未使用データは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人のルールの実力がまったく同じなら、選んだのは「運の良かったほう」そのものです。 そして運は続きません。選ばれたルールは、実際に運用すると成績が落ちます。

未使用データでの成績 =「実力」+「運」:良い方を選ぶと運の分だけ水増しされる 検証データ(1年目)での成績 John 実力 運 (小) Mary ★選択 実力 運 (大) 成績の良いMaryを選んで本番へ! 実運用(2年目以降)の残酷な現実 選ばれたMaryのその後 実力 運は続かない (剥落!) 結果:実力のベースラインまで必ず低下する ※ 2人の実力が全く同じでも、「良い方を選んだ」瞬間に運の分だけ成績が過大評価される
同じ未使用データで比べて良いほうを選ぶと、選んだ成績には「運の良さ」が混ざる。運の部分は運用では続かない(高さは説明用で、実データではありません)

Masters は続けて、1人で開発するときにも同じことが起きると説明しています。 ルールを作り、未使用データで試す。気に入らないので少し直して、また同じ未使用データで試す。これを6回、12回と繰り返し、未使用データで一番良かったものを採用する。 本人は「このデータはルール作りに使っていない」と思っていますが、実際には同じデータで何度も比べて、一番運の良い案を選んでいます。 そうして選んだルールが運用で崩れると、多くの人は「ちょうど相場が変わった」と考えます。Masters は、本人の経験では、相場は思われているよりずっと定常的(性質が安定している)で、崩れた理由のほとんどは一番運の良い案を選んだことにある、と述べています。

結論として Masters は、未使用データは貴重なので、できるだけ長く取っておき、触る前にできる限りの開発を済ませることを勧めています。未使用データが有効なのは1回だけです。 やむを得ず何度か使うなら、使うたびに成績が楽観的な方向に偏ることを理解したうえで使います。

探索・検証・最終テスト・フォワードに分ける

未使用データを1回しか使えないなら、使う回数に応じて、データをいくつかの区間に分けておくと管理しやすくなります。このコースでは、ドル円(USDJPY)の15分足を次の4つに分けました。

データの予算配分(USDJPY 15分足・年数比例):期間長だけでなく「開封回数」を決める 2008 リーマン 2011 介入 2020 コロナ 2022 介入 2024 介入 探索 2005–2016(12年間) 試行回数無制限(ただしNを数える) 検証 2017–2022(6年間) 手順ごとに1回だけ 最終テスト 1回だけ! 【データ予算の黄金律】 ① 探索:自由に開けてよい(研究開発) | ② 検証:中身を直すためではなく合否確認用 ③ 最終テスト:全開発が終了した後の最後の1回。開けたら二度とルールを変更できない
データの予算は、期間の長さだけでなく「何回開けてよいか」まで決めて初めて予算になる

区間は時間の順番で分けます。相場のデータは前後の日がつながっているので、日付を無作為に混ぜて分けると、同じ相場の流れが学習側と確認側の両方に入り、確認側が「見たことのある相場」になってしまいます。 区間の境目の近くでも同じことが起きます。たとえば学習側の最後の取引が、確認側の最初の数日まで保有されているような場合です。境目の処理は上級コースの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のデータは「検証者にとって未使用」ではない

スキャルEAの実験例はA・Bさんの最終テストが終わった後に追加した検証で、検証者(筆者)はその時点で2023〜2026年のドル円の相場を見ていました。 そのため、ルールは買いと売りを対称にし、1回の結果ではなく39回の割合を主な数字にし、取り上げる期間を結果の前に固定しました。「見てしまったデータ」は、その事実を書いたうえで、影響を減らす手当てをして使います。

期間の決め方:取引数・相場局面・年数

区間の長さに、決まった正解の比率はありません。次の3つを、データを見る前に確かめて決めます。

取引数が区間の読みやすさをどれだけ変えるかを、実際の結果で見ます。下の図は、BさんとAさんの1取引の平均と95%信頼区間を、区間ごとに並べたものです(どれも次の足の始値で約定・通常コスト)。

1取引の平均と95%信頼区間:同じプラスでも、取引数が少ないとゼロを跨ぐ 0 pips -2 +4 +8 +12 Bさん 探索 (1,893件) -0.14 [-1.7, +1.4] Bさん 検証 (914件) +1.57 [-0.4, +3.6] Bさん 最終 (561件) +4.42 [+0.4, +8.5] ★ゼロ超え確定 Aさん 検証 (190件) +3.55 [-1.2, +8.3] (幅大) Aさん 最終 (163件) +5.61 [-1.8 〜 +13.0] ゼロ跨ぎ! Aさんは平均値こそ高く見えるが、取引数が少なすぎて信頼区間がマイナスまで届き、真の実力とは言えない
同じ「プラス」でも、取引数で読める範囲が変わる。Aさんの163件は平均 +5.61 でも、信頼区間は −1.76〜+12.98 と広く、ゼロを含む

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. 誰が開けるか:理想は、ルールを作った本人以外がデータを保管し、本人は開けられないようにすることです。1人で検証するなら、確認用の期間のデータを別のファイルに分け、探索用のコードが読み込めないようにします。チャートソフトで確認用の期間を眺めることも、開封に数えます。
  2. いつ開けるか:ルール・コード・コストの3段階・合格ライン・判定の区分・判定後の行動をすべて書き、日付を付けた後です(第17回)。「もう少し探索してから」と迷う段階では開けません。
  3. 何回開けるか:検証期間は手順ごとに1回、最終テストは1回だけ。開ける前に「この実行で試行回数Nがどう変わるか」を宣言します(第8回)。
  4. 欠損と見送りをどう扱うか:確認用の期間に欠損があるかどうかは、開ける前に分かることもあります。このコースの最終テスト期間には2026年5月1日夜〜5月4日朝の欠損があり、「保有区間や決済の足に欠損がある日は見送る」と結果の前に決めていました。成績の悪い日を開けた後で「異常な日」として外すことはしません。
封印ルール:封印を開けた後に同じデータへ戻る道はない ① 書く ルール・合格基準 • コスト・約定モデル • 比較対象の設定 ② 宣言する N確定の宣言 • 研究ログに事前記入 • これ以上Nを増やさない ③ 開封 1回だけ開ける • 全項目を一括計算 • 途中結果は見ない ④ 判定 合否の決定 • 合格ライン確認 • 採否・保留を決定 ×「結果を見てからルールを微調整して同じデータに再挑戦する」のは完全禁止! 不合格なら、新しい仮説を立て直し、未使用の新しいデータで最初からやり直すのが鉄則
封印を開けた後に同じデータへ戻る道はない。直したくなったら、新しい仮説として新しいデータで確かめる

計画を変えるなら、結果を見る前に理由と日付を書く

封印ルールは、一度書いたら絶対に変えられないものではありません。変えてよいのは、結果を見る前で、変えた理由と日付を記録に残す場合です。 このコースの計画にも、その例があります。当初の計画では、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 を付けた状態です。

  1. 探索期間(2005〜2016年)で、57,600通りのグリッドとフィルタ50通りを試し、同じフィルタを付けた探索期間の上位12案を候補にしました(グリッドの上位はすべて「買いのみ」の案でした)。
  2. その12案を1つずつ検証期間(2017〜2022年)で試し、成績を見ました。12案の検証期間の総pipsは +589〜+749 pips でした。
  3. 検証期間の成績が一番良かったのは、探索期間では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)。

Aさんの候補12案の推移:検証で選んだ案が最終でも1位になったが… 0 +500 +1,000 pips 検証期間 2017–2022(12回見比べた) 12案の範囲 +589〜+749 3位案: +749 選抜 最終テスト 2023–2026(未知相場) 平均: +501 +982 pips ★1位 【運と実力の混同】今回は当たったが、検証データを12回も見て乗り換えた行為は統計的に不正 1回の成功体験が「データを見て直せば勝てる」という破滅的な過剰最適化習慣を固定化させてしまう
検証期間で12案の最大を選んだ3位案は、最終テストでも12案中1位だった。今回は当たったが、この1回だけでは選び方が正しかったかは分からない

最終テストでは、選んだ案が12案中1位だった

最終テスト(2023年1月〜2026年7月)を1回だけ開けると、Aさんが乗り換えた3位案は +982 pips で、12案の中で1位でした。12案の平均は +501 pips です(どちらもAさんが見ていた条件)。 つまり今回は、検証期間を使い回して選んだ案が、未使用の期間でも一番良かったことになります。実験の前には「使い回しで選んだ案は崩れる」と予想していましたが、そうはなりませんでした。この結果はそのまま書きます。

では、使い回しは正しかったのでしょうか。整理すると、今回はたまたま当たったが、選び方として正しいかは1回の結果では分からない、ということになります。理由は3つあります。

もう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年を確認に使わなくても、できあがるルールの質は手順が保証するからです。

直近のデータをどう使うか(Masters の置換検定3の考え方) 道1 直近を残す ルールを作る 確認 ○ 公平に試せる × ルールが古い 道2 全部使う ルールを作る(今日まで) ○ ルールが最新 × 試すデータがない 道3 手順を検定 並べ替えた相場で 開発の手順ごとやり直す 手順が確かなら 今日まで全部で作り直す 手順が確かでなければ ルールを作る前にやめる 検定するのは「できたルール」ではなく「ルールの作り方」。詳しくは第12回
直近を残すか全部使うかの二択ではなく、作り方そのものを確かめてから、最新のデータで作るという3つ目の道がある

この検定のやり方と、Aさんの手順に当てはめた結果は第12回で扱います。 ここでは、本コースの事例に当てはめるとどうなるかだけ見ておきます。

手順の検定は、最終テストの代わりにはなりません。手順が確かでも、最終的に使うルールは別に1回確かめます。ただ、「直近を捨てるか、確認を捨てるか」という二択から抜け出す考え方として、データの予算を決めるときに知っておく価値があります。

よくある間違い

「後半で確認したから大丈夫」

後半で確認したという言葉には、何回確認したかが書かれていません。1回だけなら偏りのない見積もりですが、見ては直すを繰り返せば、後半は選ぶためのデータに変わります。 Aさんは12回見て、検証期間の成績を「12案の最大値」にしてしまいました。確認の結果を書くときは、その区間を何回開けたかも一緒に書きます。

「最終テストで負けたので、少し直してもう一度」

最終テストを開けた時点で、その期間はルールを作るのに使ったデータになっています。直したルールを同じ期間で試して合格しても、それは最終テストの合格ではありません。 直したいなら、新しい仮説として事前登録し、まだ見ていないデータ(フォワードなど)で確かめます(第17回、上級コース第10回「再検証」)。

「使い回して選んだ案が最終テストでも勝った。だから使い回しは問題ない」

Aさんの3位案は最終テストで12案中1位でした。しかし1回の当たりは、選び方の確かさを示しません。同じデータでも、探索期間の頂上を選んだ案は最終テストで下から1.6%に落ちています。 使い回しの一番の代償は、最終テストの前に偏りのない見積もりを持てなくなることです。

実戦課題

これから検証するルールを1つ選び、バックテストを走らせる前に、次の「データの予算表」を作ります。

  1. 手元のデータの範囲を確認する:通貨ペア、時間足、最古の日時と最新の日時、欠損の位置、時刻の規約(JSTかサーバー時刻か)を書きます。
  2. 取引数を見積もる:ルールが1年に何回くらい取引するかを、ルールの形から見積もります(1日1回までなら年250回程度が上限、など)。区間ごとに30件未満にならないかを確かめます。
  3. 区間を分ける:探索・検証・最終テストの期間を、時間の順番で書きます。各区間に入る主な相場局面(円高期・円安期・急変・介入など)を書き出します。
  4. 封印ルールを書く:誰が、いつ、何回開けるか、欠損や見送りの扱い、開けた後に落ちたらどうするかを書き、日付を入れて保存します。
  5. 開封記録の欄を作る:検証期間と最終テストのそれぞれに「開けた日付」「開けた回数」「その時点のN」を書く欄を用意します。2回目を書きたくなったら、それが使い回しの始まりです。

やるべきこと/やるべきでないこと

やるべきことやるべきでないこと
探索・検証・最終テストを最初に分け、封印ルールを書く後半を「確認用」と呼びながら何度も見る
区間ごとに「何回開けてよいか」を決め、開けた回数を記録する確認の結果だけを書き、何回確認したかを書かない
区間は時間の順番で分け、境目の取引を処理する日付を無作為に混ぜて学習用と確認用に分ける
取引数と相場局面を見積もってから区間の長さを決める結果を見てから、都合の良い区切りに引き直す
見送り日と欠損の扱いを、開ける前に決める成績の悪い日を「異常日」として後から外す
計画を変えるなら、結果を見る前に理由と日付を記録する結果を見てから分け方を変え、変えたことを記録しない
最終テストで落ちたら、新しい仮説として新しいデータで確かめる落ちたら直して、同じ期間でもう一度試す
直近も使いたいなら、開発の手順そのものを検定する確認用の直近データを、様子見のつもりで少しずつ覗く

チェックリスト

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

ミニテスト

最後に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回)。