未使用データは1回しか使えない:John と Mary の例
統計学者の Timothy Masters は、売買ルールを作る人がいちばんよく犯す誤りとして「未使用データの使い回し」を挙げ、次の例で説明しています (Better System Trader のインタビュー、02:05〜11:45。以下は英語の自動字幕をもとにした要約です)。
あなたは会社で、売買ルールを1つ採用する担当者です。部下の John と Mary に、それぞれ独立にルールを作ってもらいます。 ただし、直近1年のデータは2人に渡さずに取っておきます。2人がルールを提出したら、その1年で両方を試します。 この1年は2人とも見ていないので、それぞれの成績は、そのルールの将来の成績の偏りのない見積もりです。少し良すぎることも悪すぎることもあり得ますが、どちらかに系統的にずれることはありません。
Mary のルールのほうが成績が良かったので、Mary のルールを採用し、その1年の成績を将来の期待値だと考えたとします。Masters は、それは間違いだと言います。 採用したのは「Mary のルール」ではなく「John と Mary のうち成績の良かったほう」だからです。
未使用データでの成績は、2つの部分の足し算です。1つは実力(相場の中の、将来も繰り返す規則性をとらえる力)。もう1つは運(その1年の値動きのノイズが、たまたまルールに合ったか合わなかったか)です。 2人を同じデータで比べて良いほうを選ぶと、実力の差だけでなく、運の差でも選ぶことになります。極端な例として、2人のルールの実力がまったく同じなら、選んだのは「運の良かったほう」そのものです。 そして運は続きません。選ばれたルールは、実際に運用すると成績が落ちます。
Masters は続けて、1人で開発するときにも同じことが起きると説明しています。 ルールを作り、未使用データで試す。気に入らないので少し直して、また同じ未使用データで試す。これを6回、12回と繰り返し、未使用データで一番良かったものを採用する。 本人は「このデータはルール作りに使っていない」と思っていますが、実際には同じデータで何度も比べて、一番運の良い案を選んでいます。 そうして選んだルールが運用で崩れると、多くの人は「ちょうど相場が変わった」と考えます。Masters は、本人の経験では、相場は思われているよりずっと定常的(性質が安定している)で、崩れた理由のほとんどは一番運の良い案を選んだことにある、と述べています。
結論として Masters は、未使用データは貴重なので、できるだけ長く取っておき、触る前にできる限りの開発を済ませることを勧めています。未使用データが有効なのは1回だけです。 やむを得ず何度か使うなら、使うたびに成績が楽観的な方向に偏ることを理解したうえで使います。
探索・検証・最終テスト・フォワードに分ける
未使用データを1回しか使えないなら、使う回数に応じて、データをいくつかの区間に分けておくと管理しやすくなります。このコースでは、ドル円(USDJPY)の15分足を次の4つに分けました。
- 探索(In-Sample、IS):ルールの候補を作り、比較対象と比べ、感応度や置換検定で壊してみる区間。何度見てもよい代わりに、結果を見て何かを選んだ回数は試行回数Nに数えます。
- 検証:探索で決めたルールや「最適化のやり方」を、別の年で確かめる区間。ウォークフォワード(第15回)や年ごとの一貫性を見るのに使います。手順ごとに1回だけ開けます。
- 最終テスト:採否を決めるための区間。合格ラインを書いた後で、1回だけ開けます(第17回)。
- フォワード:最終テストの後、デモや少額で実際に動かしながら記録する区間。まだ存在しない未来のデータなので、見ることはできても合わせ込むことはできません(第18回)。
区間は時間の順番で分けます。相場のデータは前後の日がつながっているので、日付を無作為に混ぜて分けると、同じ相場の流れが学習側と確認側の両方に入り、確認側が「見たことのある相場」になってしまいます。 区間の境目の近くでも同じことが起きます。たとえば学習側の最後の取引が、確認側の最初の数日まで保有されているような場合です。境目の処理は上級コースのPurging(境目の取引を取り除く)とEmbargo(境目に空白を置く)で扱います。
2人がやったこと・結果(+高頻度スキャルEAの例)
| データの扱い | 結果 | |
|---|---|---|
| Aさん | 2005〜2016年で最適化し、2017〜2022年を「検証用」と呼びながら12回見て案を乗り換えた。2023年以降は見ていない | 検証期間は学習データに変わった。検証期間の成績は、12回比べて選んだ後の数字になった |
| Bさん | 分け方と開ける回数を結果の前に書いた。検証期間は1回、最終テストも1回だけ開けた | 探索期間はほぼゼロ(通常コストで −0.14 pips)、検証期間 +1.57、最終テスト +4.42。それぞれを偏りのない見積もりとして読める |
| (参考)スキャルEA | 直近1年で最適化し、次の6か月に使う組を2006年から39回繰り返した。本文で取り上げる回は結果の前に「最新の回」と決めた | テスター上は39回中36回で運用期間がプラス。口座の条件(次の足の始値・往復0.4 pips)では31回がマイナス |
スキャルEAの実験例はA・Bさんの最終テストが終わった後に追加した検証で、検証者(筆者)はその時点で2023〜2026年のドル円の相場を見ていました。 そのため、ルールは買いと売りを対称にし、1回の結果ではなく39回の割合を主な数字にし、取り上げる期間を結果の前に固定しました。「見てしまったデータ」は、その事実を書いたうえで、影響を減らす手当てをして使います。
期間の決め方:取引数・相場局面・年数
区間の長さに、決まった正解の比率はありません。次の3つを、データを見る前に確かめて決めます。
- 取引数:各区間で、判断に使える件数の取引が出るか。1取引の平均の95%信頼区間(平均が入りそうな範囲)は、取引数が少ないほど広くなります。30件未満なら信頼区間を出さず「サンプル不足」と書くのが、このコースの決まりです。
- 相場局面:各区間に、上昇・下落・横ばい、荒れた時期と静かな時期が入っているか。ドル円なら、円高が続いた時期、円安が続いた時期、2008年のリーマン・ショック、2020年のコロナ、2011年・2022年・2024年の介入を、どの区間に含めるかを確認します。
- 年数:負けは年単位で固まって来ることがあります。Bさんの探索期間は12年中7年がプラスでしたが、2006年と2008〜2011年は大きくマイナスでした。区間が短いと、こうした塊を1つも含まないか、塊だけでできてしまいます。
取引数が区間の読みやすさをどれだけ変えるかを、実際の結果で見ます。下の図は、BさんとAさんの1取引の平均と95%信頼区間を、区間ごとに並べたものです(どれも次の足の始値で約定・通常コスト)。
Bさんは1日1回までのルールなので、12年の探索期間で1,893件、3年7か月の最終テストでも561件の取引がありました。Aさんはフィルタで取引を絞ったため、検証期間6年で190件、最終テストで163件しかありません。 Aさんの最終テストの平均 +5.61 pips はBさんの +4.42 より高く見えますが、信頼区間はゼロをまたいでいて、エッジがあるとは言えません。 取引の少ないルールほど、同じ区間の長さでも判断に使える情報が少ないので、区間を長めに取る必要があります。区間の長さは、ルールの取引頻度を見積もってから決めます。
相場局面にも注意が必要です。このコースの最終テスト期間(2023年1月〜2026年7月)は円安局面と2024年の介入を含み、ドル円の買いに有利な時期でした。 Aさんの最終テストの利益は2024年の +14.2 pips に偏っていて、その中心はドル円が上がった局面に買いで乗っていたことだと読むのが自然です(第17回)。 区間の長さや切れ目は結果を見る前に決めるので、こうした偏りは避けられないことがあります。避けられない偏りは、比較対象(第10回)と年別の成績(第13回)で読み解きます。 偏りを見てから区間を切り直すと、切り直した分だけ試行が増えます。
封印ルール:誰が、いつ、何回開けるか
分け方を決めたら、次は封印ルールです。封印とは、確認用の区間を「決めた条件がそろうまで開けない」状態にしておくことです。 封印ルールには、次の4つを書きます。
- 誰が開けるか:理想は、ルールを作った本人以外がデータを保管し、本人は開けられないようにすることです。1人で検証するなら、確認用の期間のデータを別のファイルに分け、探索用のコードが読み込めないようにします。チャートソフトで確認用の期間を眺めることも、開封に数えます。
- いつ開けるか:ルール・コード・コストの3段階・合格ライン・判定の区分・判定後の行動をすべて書き、日付を付けた後です(第17回)。「もう少し探索してから」と迷う段階では開けません。
- 何回開けるか:検証期間は手順ごとに1回、最終テストは1回だけ。開ける前に「この実行で試行回数Nがどう変わるか」を宣言します(第8回)。
- 欠損と見送りをどう扱うか:確認用の期間に欠損があるかどうかは、開ける前に分かることもあります。このコースの最終テスト期間には2026年5月1日夜〜5月4日朝の欠損があり、「保有区間や決済の足に欠損がある日は見送る」と結果の前に決めていました。成績の悪い日を開けた後で「異常な日」として外すことはしません。
計画を変えるなら、結果を見る前に理由と日付を書く
封印ルールは、一度書いたら絶対に変えられないものではありません。変えてよいのは、結果を見る前で、変えた理由と日付を記録に残す場合です。 このコースの計画にも、その例があります。当初の計画では、Aさんは2005〜2022年で最適化し、2023〜2026年を12回見ることになっていました。 ところがそれでは、Aさんが一度も見ていないデータが残らず、Aさんの最終テストができません。そこで、Aさんの結果を見る前に計画を改訂し、Aさんの探索期間を2005〜2016年とし、2017〜2022年を使い回しの対象、2023〜2026年はAさんもBさんも最後に1回だけ開ける、と書き直しました(2026年9月24日)。
この改訂は結果を見る前だったので、試行回数には入りません。もし「Aさんの結果が思ったほど崩れなかったので期間を変える」という理由だったら、それは結果を見て分け方を選んだことになり、分け方そのものが1つの試行になります。 同じ理由で、このコースの制作では、最終テストは実験の最後に1回だけ開け、それより前の作業には最終テストの結果を持ち込まないことにしていました。
Aさんの「見ては直す」12回を再現する
では、Aさんが検証期間をどう使ったかを、実験の記録どおりに再現します。Aさんが見ていたのは、シグナル足の終値で約定・コスト0の成績で、フィルタは金曜除外・5月除外・RSI>55 を付けた状態です。
- 探索期間(2005〜2016年)で、57,600通りのグリッドとフィルタ50通りを試し、同じフィルタを付けた探索期間の上位12案を候補にしました(グリッドの上位はすべて「買いのみ」の案でした)。
- その12案を1つずつ検証期間(2017〜2022年)で試し、成績を見ました。12案の検証期間の総pipsは +589〜+749 pips でした。
- 検証期間の成績が一番良かったのは、探索期間では3位だった案(+749 pips)でした。Aさんは1位の案からこの3位案に乗り換え、最終案にしました。
この12回の判断は、試行回数の台帳で N_A を 57,650 から 57,662 に増やしています。そしてこの時点で、2017〜2022年はAさんにとって「検証用」ではなく「選ぶのに使ったデータ」に変わりました。
John と Mary の話に当てはめると、12案が12人の部下にあたります。Aさんが報告する「検証期間の成績」は、3位案の +749 pips、1取引で見れば190件・平均 +3.94 pips(終値約定・コスト0)です。 しかしこれは12案の中で一番良かった数字なので、3位案の将来の成績の偏りのない見積もりではありません。12案の差は +589〜+749 pips の範囲にあり、その差のどこまでが実力で、どこからが2017〜2022年という1つの期間の運なのかは、この比べ方では分かりません。 試行回数を反映した DSR(第14回)で見ると、Aさんが報告した探索期間の成績は 0.42、検証期間の成績は 0.003 でした(N=57,662、終値約定・コスト0)。
最終テストでは、選んだ案が12案中1位だった
最終テスト(2023年1月〜2026年7月)を1回だけ開けると、Aさんが乗り換えた3位案は +982 pips で、12案の中で1位でした。12案の平均は +501 pips です(どちらもAさんが見ていた条件)。 つまり今回は、検証期間を使い回して選んだ案が、未使用の期間でも一番良かったことになります。実験の前には「使い回しで選んだ案は崩れる」と予想していましたが、そうはなりませんでした。この結果はそのまま書きます。
では、使い回しは正しかったのでしょうか。整理すると、今回はたまたま当たったが、選び方として正しいかは1回の結果では分からない、ということになります。理由は3つあります。
- 1回の当たりは、選び方の確かさを示さない:Masters の説明のとおり、同じデータで比べて選べば、選んだ案には運が混ざります。運が良ければ、選んだ案が次の期間でも良いことはあります。それが実力による当たりか運による当たりかを区別するには、同じ選び方を何度も繰り返した結果が必要です。
- 同じデータの中でも、逆の結果が出ている:探索期間の成績の頂上を選ぶ別の選び方では、選んだ案が最終テストで最下位近くに落ちました。買いのみ19,200案を探索期間の1取引平均で並べると、1位の案は最終テストで −1.01 pips、下から1.6%の位置でした(終値約定・コスト0、第14回)。選び方が当たることも外れることもある以上、1回の当たりで選び方を評価することはできません。
- 当たった案にも、実力の証拠はない:3位案の最終テストの成績は、次の足の始値・通常コストで1取引 +5.61 pips でしたが、95%信頼区間は [−1.76, +12.98] でゼロを含み、DSR は 0.002、無作為な日に同じ時刻で買う比較には p=0.174、置換検定2は p=0.21 でした(第17回)。12案の中で1位でも、「ドル円が上がった時期に買っていた」以上の力は確認できていません。
もう1つ、使い回しの代償ははっきり残っています。Aさんには、最終テストの前に偏りのない見積もりを得る機会がなかったことです。 Bさんは検証期間を1回だけ開けたので、+1.57 pips(95%信頼区間 [−0.42, +3.57])という数字を、そのまま「探索期間の外での成績」として読めました。Aさんの検証期間の数字は、12案の最大値なので、同じように読むことはできません。 最終テストがなければ、Aさんは「未使用データでも勝った」と信じて運用に進むしかなかったはずです。
直近のデータも学習に使いたいとき
ここまでの話には、1つ悩ましい点があります。直近のデータを確認用に取っておくと、ルールは最新の相場を知らないまま作られます。相場の性質が変わっているなら、1年前までのデータで作ったルールは、使い始めた時点ですでに古いかもしれません。 かといって、今日までのデータを全部使ってルールを作れば、確認に使えるデータが残りません。
Masters は同じインタビュー(26:33〜31:53)で、このジレンマに対する答えとして、3つ目の置換検定を紹介しています。 ルールそのものではなく、ルールを作るやり方(開発の手順)を検定する方法です。 値動きの順番を並べ替えて規則をなくした相場を何百、何千と作り、その上で自分の開発の手順を丸ごとやり直します。本物の相場で作ったときの成績が、規則のない相場で作ったときの成績より明らかに良ければ、その手順は本物の規則性を拾える、と判断できます。 手順が確かだと分かれば、その手順で今日までの全データを使ってルールを作り直してよい、というのが Masters の考え方です。手順が確かなら、直近の1年を確認に使わなくても、できあがるルールの質は手順が保証するからです。
この検定のやり方と、Aさんの手順に当てはめた結果は第12回で扱います。 ここでは、本コースの事例に当てはめるとどうなるかだけ見ておきます。
- Aさん:探索期間の値動きを並べ替えた相場でAさんと同じ最適化をやり直すと、最良案の総pipsは中央値 +3,826 pips になり、実データの最良 +5,143 pips は1000本中155本に負けました(p=0.155、第12回)。規則のない相場からでも「聖杯」を作れる手順なので、今日までの全データで作り直してよい手順とは言えません。
- Bさん:1通りの固定ルールなので、作り直す手順がありません。Bさんにとっての選択肢は、ルールを直近まで伸ばすことではなく、封印した最終テストとフォワードで確かめることです。
- 高頻度スキャルEA(参考例):直近1年で作り直して次の6か月に使う手順そのものを、39回繰り返して確かめた形になっています(第15回)。口座の条件で39回中31回がマイナスだったので、この手順で今日までのデータを使って作り直しても、良いルールができる保証はありません。
手順の検定は、最終テストの代わりにはなりません。手順が確かでも、最終的に使うルールは別に1回確かめます。ただ、「直近を捨てるか、確認を捨てるか」という二択から抜け出す考え方として、データの予算を決めるときに知っておく価値があります。
よくある間違い
「後半で確認したから大丈夫」
後半で確認したという言葉には、何回確認したかが書かれていません。1回だけなら偏りのない見積もりですが、見ては直すを繰り返せば、後半は選ぶためのデータに変わります。 Aさんは12回見て、検証期間の成績を「12案の最大値」にしてしまいました。確認の結果を書くときは、その区間を何回開けたかも一緒に書きます。
「最終テストで負けたので、少し直してもう一度」
最終テストを開けた時点で、その期間はルールを作るのに使ったデータになっています。直したルールを同じ期間で試して合格しても、それは最終テストの合格ではありません。 直したいなら、新しい仮説として事前登録し、まだ見ていないデータ(フォワードなど)で確かめます(第17回、上級コース第10回「再検証」)。
「使い回して選んだ案が最終テストでも勝った。だから使い回しは問題ない」
Aさんの3位案は最終テストで12案中1位でした。しかし1回の当たりは、選び方の確かさを示しません。同じデータでも、探索期間の頂上を選んだ案は最終テストで下から1.6%に落ちています。 使い回しの一番の代償は、最終テストの前に偏りのない見積もりを持てなくなることです。
実戦課題
これから検証するルールを1つ選び、バックテストを走らせる前に、次の「データの予算表」を作ります。
- 手元のデータの範囲を確認する:通貨ペア、時間足、最古の日時と最新の日時、欠損の位置、時刻の規約(JSTかサーバー時刻か)を書きます。
- 取引数を見積もる:ルールが1年に何回くらい取引するかを、ルールの形から見積もります(1日1回までなら年250回程度が上限、など)。区間ごとに30件未満にならないかを確かめます。
- 区間を分ける:探索・検証・最終テストの期間を、時間の順番で書きます。各区間に入る主な相場局面(円高期・円安期・急変・介入など)を書き出します。
- 封印ルールを書く:誰が、いつ、何回開けるか、欠損や見送りの扱い、開けた後に落ちたらどうするかを書き、日付を入れて保存します。
- 開封記録の欄を作る:検証期間と最終テストのそれぞれに「開けた日付」「開けた回数」「その時点のN」を書く欄を用意します。2回目を書きたくなったら、それが使い回しの始まりです。
やるべきこと/やるべきでないこと
| やるべきこと | やるべきでないこと |
|---|---|
| 探索・検証・最終テストを最初に分け、封印ルールを書く | 後半を「確認用」と呼びながら何度も見る |
| 区間ごとに「何回開けてよいか」を決め、開けた回数を記録する | 確認の結果だけを書き、何回確認したかを書かない |
| 区間は時間の順番で分け、境目の取引を処理する | 日付を無作為に混ぜて学習用と確認用に分ける |
| 取引数と相場局面を見積もってから区間の長さを決める | 結果を見てから、都合の良い区切りに引き直す |
| 見送り日と欠損の扱いを、開ける前に決める | 成績の悪い日を「異常日」として後から外す |
| 計画を変えるなら、結果を見る前に理由と日付を記録する | 結果を見てから分け方を変え、変えたことを記録しない |
| 最終テストで落ちたら、新しい仮説として新しいデータで確かめる | 落ちたら直して、同じ期間でもう一度試す |
| 直近も使いたいなら、開発の手順そのものを検定する | 確認用の直近データを、様子見のつもりで少しずつ覗く |
チェックリスト
次の回に進む前に、以下が自分の言葉で説明できるか確認してください。
- 未使用データでの成績が「実力+運」であり、比べて選ぶと運の分だけ水増しされる理由(John と Mary)
- 探索・検証・最終テスト・フォワードの役割と、それぞれ何回開けてよいか
- 区間を時間の順番で分ける理由
- 区間の長さを、取引数・相場局面・年数から決める考え方
- 封印ルールに書く4つ(誰が・いつ・何回・欠損と見送り)
- Aさんの12回の使い回しで、検証期間の成績が偏りのない見積もりでなくなった理由
- 選んだ案が最終テストで当たっても、1回では選び方の正しさが分からない理由
- 直近のデータを使いたいときに、開発の手順を検定するという考え方
ミニテスト
最後に4問だけ確認です。不正解なら別の選択肢を選び直せます。正解すると解説が表示されます。
Q1. John と Mary のルールを、2人とも見ていない同じ1年で試し、成績の良かった Mary のルールを採用しました。その1年の Mary の成績について正しいのは?
未使用データでの成績は実力と運の足し算です。事前に Mary を使うと決めていたなら偏りはありませんが、比べて良いほうを選ぶと、運の良かったほうを選ぶ傾向が入ります。運は続かないので、運用では成績が落ちやすくなります。
Q2. このコースのデータの予算で、検証期間(2017〜2022年)について正しい説明は?
何度見てもよい(Nは数える)のは探索期間、1回だけ開けて採否を決めるのは最終テストです。検証期間はウォークフォワードや期間の一貫性を見る区間で、手順ごとに1回です。Aさんはここを12回見て、学習データに変えてしまいました。
Q3. Aさんが検証期間を12回見て選んだ3位案は、最終テストで12案中1位(+982 pips、12案平均 +501)でした。正しい読み方は?
運が混ざった選び方でも、次の期間で当たることはあります。同じデータで探索期間の頂上を選んだ案が最終テストで下から1.6%に落ちた例もあり、1回の当たり外れで選び方は評価できません。3位案の最終テストは信頼区間がゼロを含み、比較対象にも置換検定にも勝てていません。
Q4. 直近1年を確認用に残すとルールが古くなり、今日まで全部使うと確認できません。Masters が勧める考え方は?
Masters の3つ目の置換検定は、できたルールではなくルールの作り方を検定します。規則のない相場で作ったときより本物の相場で作ったときのほうが明らかに良ければ、その手順で直近まで使って作り直せます。Aさんの手順は並べ替えた相場でも中央値 +3,826 pips の最良案を作ったので、この条件を満たしません(第12回)。