失敗事例: Phase-3d汚染 — 「ベンチマークに肉薄した戦略」が幻だった話
本プロジェクトには、自分たち自身の手で記録した最大の自己批判記録があります。「ベンチマークとの差がわずか−69.80円」という一見輝かしい結果が、統計的にはほとんど意味を持たない数字だったという話です。この記録は削除されず、公開ドキュメントとして残されています1。本記事ではそれを教材として読み解きます。
1. 何が起きたか(時系列)
2026年4月21日、leveraged_rally_participant という戦略の6つのバリアント(v1〜v3d)が、期間 2026-02-17〜04-19(62日間) のデータ上で設計・実行され、その中から最も成績の良い v3c が選抜されました。
問題はその後に起きます。2026年6月3〜4日、プロジェクトは「ホールドアウト法」——評価専用データを封印し、戦略探索に使うことを禁じるルール(記事3参照)——を制定しました。この新ルールの下では、v3cの選抜に使われた期間は、事前登録された実験以外が探索に使ってはいけない領域に該当します。
ここで用語を定義します。戦略の調整に使ったデータ上での成績をイン・サンプル(in-sample)、調整に一切使っていない未知データ上での成績をアウト・オブ・サンプル(OOS) と呼びます。将来の成績の見積もりとして意味があるのは後者だけです。v3cは、評価に使ったまさにその期間で6候補から選ばれた、純然たるin-sample最適化の産物でした。選抜の時点でルールは存在しなかったので「違反」ではありません。しかし結果として、このデータはコンタミネーション(汚染)——評価に使うべきデータが探索に混入してしまった状態——になったのです。
2. v3cの「α=−¥69.80」は何だったのか
α(アルファ) とは「戦略の損益 − ベンチマークの損益」のことです。本プロジェクトのベンチマークは「ETHを10枚買って持っているだけ」。v3cは62日間でこのベンチマークとの差がわずか −69.80円、つまり99.996%の一致でした。数字だけ見れば「ほぼベンチマークに追いつく自動売買戦略」の誕生です。
しかしこの数字は「6個の候補の中の最大値」でした。
最大値の統計学
サイコロを6回振って一番大きい目だけを報告すれば、平均(3.5)よりほぼ確実に大きな数字になります。戦略の成績も同じで、6個の候補それぞれに偶然のばらつきが含まれる以上、その中の最良は実力よりも必ず良く見えます。これは順序統計量(複数の値の中の最大値・最小値が持つ偏り)として知られる性質で、「選んだ後の成績」は「選ぶ前に期待できる成績」の推定値にはなりません。−69.80円のうち、どこまでが実力でどこからが「最大値を選んだボーナス」なのかは、同じデータからは原理的に分離できないのです。
3. どう処理したか
プロジェクトが選んだ対応は、結果の削除ではなく汚染の宣言でした。
- v1〜v3dファミリーは、当該期間(2026-02-17〜04-19)に対するOOS主張を恒久的に禁止(guardrails §4a)
- 経緯の全文を汚染記録
docs/research/phase3d-contamination.md(2026-06-10記録)として公開 - Phase-3d の旧結果ページには冒頭に警告バナーを追加し(Phase-5ページにも追加予定)、ページ自体は誠実な失敗記録として保存
削除すれば見た目はきれいになりますが、それでは同じ過ちを防ぐための「判例」が失われてしまいます。
4. 教訓
- ルールは、違反が起きる前には作れない。 ホールドアウト法はこの事件の後に制定されました。だからこそ、過去に遡って自分の結果を「汚染」と宣言する誠実さが必要になります。
- 記事3の5点セットは、この事件への直接の応答。 ホールドアウト法・事前登録・試行台帳とDSR/PBO・プラセボ統制・リーフリーダーガードは、二度目を人間の自制心ではなくコードで防ぐための仕組みです。
- これはこのプロジェクト固有の話ではない。 Kaggleでテストセットへの提出を繰り返してモデルを直すことも、研究室でテストデータの精度を見ながらチューニングすることも、すべて同型の汚染です。
次の記事5では、こうした仕組みの下で実行された実験たちが、どのように次々と棄却されていったかを見ます。