過剰最適化とは

過剰最適化(カーブフィッティング、曲線あてはめ)とは、過去のデータでたまたま良い成績が出るように、ルールや数値を細かく調整しすぎてしまうことです。 検証第2回でバーリプレイを使った過去検証のやり方を学びましたが、その検証には強力な落とし穴があります。 過去のチャートは「答えがすでに分かっている問題集」なので、いくらでも後から合わせ込めてしまうのです。

たとえば「移動平均線が20日だと微妙だから21日、いや23日にしたら成績が上がった」と数字を動かしていくと、 過去チャートでの成績はどんどん良くなります。しかしその23日は、過去のその期間にだけ都合よく効いた数字で、 未来の相場が同じ癖を持っている保証はどこにもありません。良く見えた成績のかなりの部分は、実力ではなく過去への合わせ込みです。

シンプルなルール 全体の流れをつかむ 合わせ込みすぎ 未来の点 過去に完璧・未来で外れる
過去の点を全部通す線ほど、未来の新しい点からは遠い。全部当てる線は、実は何も予測していない

なぜ過去に合うほど未来に外れるのか

直感的に言えば、過去のチャートには「本物の癖」と「ただの偶然」が混ざっているからです。 本物の癖(たとえば「重要な節目では反発しやすい」)は未来にも続きますが、偶然(たまたまその年だけ23日移動平均が効いた、など)は未来には続きません。

ルールを細かく調整して過去の成績を上げていくと、途中からは本物の癖ではなく、偶然のほうに合わせ込んでいます。 過去にぴったり合うほど、偶然を拾い込んでいる割合が増えています。だから「過去成績が良すぎる」ことは、良い知らせではなく警告になり得ます。 これは、過去問の答えを1問残らず暗記した状態に似ています。過去問の点は満点になりますが、その勉強法で身につくのは「解き方」ではなく「答えそのもの」なので、本番の新しい問題では解けません。

試行回数の罠:くじは引き続ければ当たる

ここが、この記事で最も重要な章です。過剰最適化の一番たちの悪い形は、「何通り試したか」を数えないことから生まれます。

こう考えてください。当たる確率がとても低いくじでも、引き続ければ、いつかは必ず当たりが出ます。 これは、そのくじに実力があるからではなく、単に回数を重ねたからです。 検証でも同じことが起きます。ルールを100通り作って全部を過去チャートで試せば、その中の何個かは、中身がデタラメでも偶然だけで好成績になります。 問題は、試した本人が「100個試して1個当たった」ではなく「良い手法を1個見つけた」と受け取ってしまうことです。

中身がデタラメなルールを100通り試すと… ← 偶然で高成績 大半は平凡(中身どおり) この1本を「発見」と誤解
たくさん試すほど、偶然の当たりが必ず混じる。数えていないと、その1本を実力と取り違える

だから、試した回数を数えることが、成績を正しく読むための前提になります。 「1通り試して良かった」と「200通り試して一番良かった1つ」では、同じ成績でも意味がまったく違います。 後者は、偶然の当たりを引いただけかもしれない、と最初から疑ってかかる必要があります。 パラメータを少しずつ変えて試した回数も、条件を足したり引いたりした回数も、すべて「試行」として数えます。頭の中で却下した案も含めて、意外と多いはずです。

過剰最適化の兆候

自分の検証結果が過剰最適化に陥っていないか、次の兆候でチェックできます。

過去成績が良すぎる 別期間で確認 崩れるなら採用しない
過去にぴったり合う設定ほど、別期間で崩れないかを先に疑います。

対策:4つのやり方

難しい計算は要りません。次の4つを習慣にするだけで、過剰最適化のかなりを防げます。

  1. ルールをできるだけシンプルに保つ:条件は少なく。条件を1つ足すたびに「これは本物の理由があるのか、成績を上げたいだけか」を自問します。理由を説明できない条件は足さない。
  2. データを前半・後半に分けて、後半で確認する:過去データの前半だけを使ってルールを決め、一度も見ていない後半で試す。後半でも通用すれば本物に近く、後半で崩れるなら前半への合わせ込みです。答えを隠した模擬試験を自分で作るイメージです。
  3. 何通り試したかを数えて記録する:検証第1回の日誌に「試行メモ」を1つ足し、試したルール・パラメータの数を正の字ででも数えます。数が多いほど、良い成績への疑いを強くします。これが試行回数の罠への唯一の防御です。
  4. 出来すぎの成績ほど、採用の前に疑う:成績が良いほど嬉しくて飛びつきたくなりますが、順番を逆にします。良い成績が出たら、まず「何通り試したか」「後半でも通用するか」「条件は多すぎないか」を点検してから採用を判断します。
検証は「良い手法を探す作業」ではなく「思いついた手法を疑う作業」

初心者は検証を「勝てる手法を見つける宝探し」と捉えがちですが、これが試行回数の罠に真っすぐ入る道です。 検証の本当の役割は、思いついた1つの手法が、偶然ではなく本物かを厳しく疑うことです。 たくさん試して一番良いものを選ぶのではなく、1つの仮説を前半・後半の両方で確かめる。この向きの違いが、実戦で崩れるかどうかを分けます。

試行回数を成績へ反映する

試行回数を記録するだけで終わらず、選択バイアスを成績へ反映します。 グリッド探索は組み合わせ数ぶんを累計試行回数Nへ加え、生のシャープレシオとDSRを並べます。 本サイトの採用基準はDSR 0.95以上です。詳しい数え方と実装は第9回「試行回数NとDSR」で扱います。

裁量トレードにも起きる

過剰最適化はプログラムで自動売買する人だけの話だと思われがちですが、裁量トレードでも同じことが起きます。 「この形は勝てる」という思い込みの多くは、過去のチャートを見て後から作った後付けの説明だからです。

人間の脳は、うまくいった数例を強く記憶し、そこに共通点を見つけて「法則」に仕立てるのが得意です。 しかしそれは、たくさん見た値動きの中から、たまたま勝った数例だけを選んで線を引いているのと同じです。頭の中で試行回数の罠を起こしています。 だから裁量でも対策は同じです。「勝てる形」を思いついたら、記憶ではなく日誌の記録で、勝ちも負けも数えて確かめる(検証第1回)。 印象に残った数例ではなく、その形が出た全部の例で成績を見て初めて、本物かどうかが分かります。

よくある勘違い

「過去成績が良ければ良い手法だ」

過去成績の良さは、実力の証拠にも、合わせ込みの証拠にもなり得ます。どちらかは、成績だけを見ても分かりません。 「何通り試したか」「後半でも通用するか」を合わせて見て初めて、その成績の意味が読めます。成績の数字を単体で信じないでください。

「条件を増やせば精度が上がる」

条件を増やすと過去成績は上がりますが、それは精度の向上ではなく、合わせ込みが進んだ結果であることが多くなります。 シンプルなルールのほうが未来で崩れにくい、という関係は直感に反しますが、検証の世界では繰り返し確認されている経験則です。

「自分は数個しか試していないから大丈夫」

パラメータをちょっと動かした回数、条件を足し引きした回数、頭の中で却下した案。数えてみると、思ったより多く試しているのが普通です。 「大丈夫」と感じているときこそ、実際の試行回数を書き出して確認してください。感覚は試行回数を過小評価します。

実戦:自分の検証を点検する

読んで終わりにしないための課題です。直近で検証した(あるいはこれから検証する)手法を1つ選び、次を点検してください。

  1. 何通り試したかを書き出す:パラメータ変更・条件の足し引き・却下した案も含めて、正直に数えます。1桁で収まらないことが多いはずです。
  2. データを前半・後半に分けて後半で試す:ルールを決めるのに使っていない期間で、同じ成績が出るか確認します。崩れたら、前半への合わせ込みです。
  3. 条件の数と「出来すぎ度」をチェックする:条件が多い/特定期間に偏る/パラメータを少しずらすと崩れる、に当てはまらないかを見ます。
  4. 点検結果を検証日誌に残す:「試行◯通り・後半で△△・採用可否」を1行で記録。次に手法を思いついたとき、同じ点検を通す習慣にします。

チェックリスト

次の記事に進む前に、以下が自分の言葉で説明できるか確認してください。

ミニテスト

最後に4問だけ確認です。不正解なら別の選択肢を選び直せます。正解すると解説が表示されます。

Q1. 過剰最適化(カーブフィッティング)とは何か?

過去問の答えを丸暗記した状態と同じで、過去には完璧に合うのに、未来の新しい相場では崩れます。過去に合いすぎる成績は警告になり得ます。

Q2. 「試行回数の罠」を正しく説明しているのは?

当たる確率の低いくじも、引き続ければいつか当たります。100通り試して一番良い1つは、実力ではなく偶然の当たりかもしれない、と疑う必要があります。

Q3. 過剰最適化の兆候として本文が挙げていないのは?

条件が少なくほどほどの成績は、むしろ健全な方向です。危険なのは、条件が多い・特定期間に偏る・少しずらすと崩れる・出来すぎ、の4つです。

Q4. 「データを前半・後半に分ける」対策の目的は?

答えを隠した模擬試験を自分で作るイメージです。一度も見ていない後半で通用すれば本物に近く、後半で崩れるなら前半の偶然に合わせ込んでいたと分かります。