「異常に高い ROI」は喜ぶ前に疑え
機械学習で競馬予想モデルを開発していると、ある瞬間に 異常に高い回収率 (ROI) が出ることがあります。本サイト開発初期にも、バックテストで「南関東 ROI 200%」が出て一瞬喜びました。
しかしこれ、ほぼ間違いなく データリーケージ。実運用したら ROI 60% に転落、という典型パターンです。「うまく行きすぎ」は喜ぶサインではなく、バグを疑うサイン でした。
データリーケージとは何か
データリーケージとは、機械学習モデルが 本来知り得ないはずの「未来情報」を学習データに混入 してしまうバグです。
例えば「過去のレース結果から勝率を予想」という設定で、誤って「このレースの着順情報」が特徴量に入っていたら、モデルは未来カンニングをしているだけ。バックテストでは異常に高い精度が出ますが、実運用では当然使えません。
実際に踏んだ罠
本サイトで踏んだリーケージの例:
- 「人気」をそのまま特徴量に — 当日の確定人気はレース後にしか分からない
- 「着差」の前 5 走平均 — 集計対象に当該レースが含まれていた
- レース後の「上がり 3F」を予測特徴量に — 走った後のタイムなので予測時点では未知
リーケージの 3 大パターン
- 時間軸の漏れ未来のレース結果が過去の特徴量に混入
- ターゲットエンコーディングの自己参照「同レースの平均着順」のような集計に当該レース自身が含まれる
- ホールドアウト分割の誤りtrain と test で同じレースが両方に入る
検出方法 — Walk-Forward Validation
リーケージを検出する最も信頼できる方法は Walk-Forward Validation:
Walk-Forward Validation の流れ
1. データを時系列で分割
2. 古いデータで学習、新しいデータで予測
3. 「予測時点で知り得る情報だけ」で特徴量を再計算
4. 異常な ROI が出たら必ず特徴量を疑う
2. 古いデータで学習、新しいデータで予測
3. 「予測時点で知り得る情報だけ」で特徴量を再計算
4. 異常な ROI が出たら必ず特徴量を疑う
機械学習エンジニアの間で「too good to be true は too good to be true」(うますぎる結果は本当にうますぎる) という格言があります。バックテスト ROI 200% は喜びではなく、特徴量チェックの開始合図です。
まとめ
- 異常に高い ROI は データリーケージのサイン
- 原因は「未来情報の混入」
- 本サイトでも初期に「人気」「着差集計」「上がり 3F」で踏んだ
- 検出には Walk-Forward Validation が必須
- 機械学習で勝つには、まず リーケージを徹底排除 が前提
