メインコンテンツまでスキップ

自分をだまさないための仕組み — ホールドアウト法と実験台帳

前回の記事で、このプロジェクトの主戦場であるGMOコインのETH_JPYでは「往復コスト5.6bpsを上回るエッジ(統計的優位)がなければ始める前に負けている」ことを確認しました。では、そのエッジを過去データから探すとき、何が一番危険なのでしょうか。答えは市場ではなく、自分自身です。この記事では、「過去データで勝てる戦略を探すと、なぜ偽物のエッジを掴むのか」を説明し、本プロジェクトがそれを防ぐために組み込んだ5点セット——ホールドアウト法、コードによる強制、事前登録、プラセボ統制、試行台帳——を紹介します。次の記事4(失敗事例)の理論編にあたります。

1. 1000回サイコロを振れば「必勝法」は必ず見つかる

1,024人にコインを10回ずつ投げてもらい、表裏を毎回「予言」させる実験を考えてみてください。確率的には、約1人が10回連続で的中します。その1人を連れてきて「この人は予知能力者だ」と言えるでしょうか。もちろん言えません。十分な人数から最良の1人を選べば、偶然だけで完璧な成績が必ず出るからです。

これを多重比較と呼びます。同じデータに対して検定や探索を何度も繰り返すと、最良の結果は試行回数に応じて偶然だけで膨らんでいきます。バックテスト(過去データ上での戦略シミュレーション)はまさにこれです。パラメータを変えて100通り試し、一番成績の良い1つを選べば、それは「未来でも勝てる戦略」ではなく「過去の偶然に一番フィットした戦略」である可能性が高い。過去データの偶然の癖まで暗記してしまい、新しいデータで通用しなくなる現象を過学習と呼びます。

戦略探しとは、この罠と戦い続ける作業です。

2. 対策1: ホールドアウト法(2026-06-10再分割)

ホールドアウトとは、データの一部を「答え合わせ専用」に取り分け、探索には一切使わないことです。探索に使っていないデータを**OOS(アウトオブサンプル)**と呼び、戦略の真の実力はOOSでしか測れません。

本プロジェクトは2026-06-10にデータを3層に再分割しました。

  • (a) 直近60日のローリング・テール:恒久封印。 最終評価専用で、評価は1回限り。人間の承認(環境変数 ATC_ALLOW_HOLDOUT=1)がなければ読み取り自体ができません。
  • (b) ブック期(2026-02-17〜今日−60日):事前登録された実験のみ閲覧可。 どの実験がどの窓を読んだかは ATC_PREREG_EXP として記録されます。
  • (c) 2026-02-17以前のアーカイブ:自由に探索可。

そして最終合格には、重なり合わないテール評価の複数回で HAC-t≥3 または DSR≥0.95 を要求します(HAC-tは自己相関を補正したt値で、「3以上なら偶然では稀」という強さの目安です。DSRは後述)。

コードで強制する

ルールが文書にしか書かれていなければ、いつか破られます。だから本プロジェクトでは、ホールドアウト法を src/atc/risk/holdout_law.py というコードとして実装しました。Parquet・PostgreSQL・S3、すべてのデータリーダーが guard_leaf_read という関門を通過し、封印された日付や期間無制限の読み取りは実行時にエラーで拒否されます。探索・学習の入口にも guard_search_window が置かれ、予約済みデータへのアクセスを遮断します。ルールは紙ではなくコードに書く——これがこの仕組みの合言葉です。

3. 対策2: 事前登録とプラセボ統制

事前登録とは、仮説・閾値・合否基準を、データを見るに文書として凍結することです。本プロジェクトのEXP-0005〜0018はすべてこの方式で、「結果を見てから合格ラインを動かす」ことを構造的に不可能にしています。

もうひとつがプラセボ検定です。中間価格をシャッフルしたり時系列の順序を壊したりした「効くはずのない偽データ」に、本物と同じ検定をかけます。偽データで「効いた」なら、それはエッジではなく手法側のバグや見落としです。実際、EXP-0016(Binanceのデリバティブ・板情報からGMOを先読みする仮説)は、Stage 0はシャッフル統制で棄却され、Stage 1はプラセボ自体は通過したものの2秒遅延統制で棄却され、有料データの購入を回避しました。統制が現金を守った実例です。

4. 対策3: 試行台帳と DSR/PBO

第1節の教訓は「何回試した末の最良かを知らなければ、成績を評価できない」でした。そこで本プロジェクトは、すべての探索試行を試行台帳に記録します(実験ID・データ窓・損益・分類)。

その上で2つの補正指標を使います。前提としてシャープレシオとは、リターンをそのブレ幅(リスク)で割った成績指標で、「どれだけ安定して稼いだか」を表します。**DSR(Deflated Sharpe Ratio)**は、台帳に記録された試行回数で割り引いたシャープレシオです。100回試した中の最良なら、それ相応に厳しく評価されます。**PBO(Probability of Backtest Overfitting)**は、データを多数の分割で組み替えて「バックテストの勝者がOOSで負ける確率」を推定する指標です。

つまり、コインを1,024人に投げさせたなら「1,024人試した」という事実ごと評価する——それがDSR/PBOの思想です。

5. なぜここまでやるのか

正直に言えば、これらの仕組みの多くは最初からあったわけではありません。本プロジェクトは過去に一度、後からホールドアウトに指定される期間の上で6つの戦略バリアントから最良を選んでしまい、「ベンチマークにほぼ並んだ」という幻の結果を掴みました。上の5点セットは、その事件への直接の応答です。次の記事で、その失敗——Phase-3d汚染——を隠さずに解剖します。


再現性情報(脚注): ホールドアウト3層分割と合格基準(HAC-t≥3 / DSR≥0.95)は docs/harness/guardrails.md §4(2026-06-10再分割、PR #193・#195)に、コードによる強制は src/atc/risk/holdout_law.py(HOLDOUT_TAIL_DAYS=60、BOOK_ERA_START=2026-02-17)に定義。事前登録実験はEXP-0005〜0018(docs/research/experiments/、EXP-0017/0018は prereg/ に2026-06-10凍結)。EXP-0016の統制棄却および全実験評決は docs/STATUS.md を参照。