[STATUS: ONLINE] 当サイトは要約付きのエンジニア向けFeedです。

TechDistill.dev

[DISCLAIMER] 当サイトの要約は正確性を保証しません。気になる記事は必ず原文を確認してください。
cd ..

【要約】競馬予想 ML でデータリーケージを正攻法で潰した話 — race_date フィルタを4箇所に入れて気づいたこと [Zenn_Python] | Summary by TechDistill

> Source: Zenn_Python
Execute Primary Source

// Problem

UmaScoreの開発者が、バックテストの評価指標が現実離れして高すぎる問題に直面した。原因は、学習データに未来の情報が混入するデータリーケージであった。この問題は、時系列予測において評価指標を過大評価させ、実運用での失敗を招く致命的なバグとなる。
  • 走力指数の算出に、予測対象レース以降の走破タイムが混入する。
  • コース実績の集計に、予測対象レース当日以降のデータが含まれる。
  • 血統情報のJOIN時に、結合先テーブルの未来データが混入する。
  • 推論関数への日付引数の渡し忘れが発生する。

// Approach

開発者は、集計クエリのWHERE句に必ず race_date < ? を挿入する単一の規律を導入した。これにより、あらゆる集計経路で未来情報の混入を物理的に遮断する。
  • calculate_base_ability_index 関数にて、SQLのWHERE句に日付フィルタを実装。
  • コース実績集計時、空間軸(距離)と時間軸(日付)の両面でフィルタを適用。
  • 血統情報のJOINクエリにおいて、結合先テーブルの race_date を明示的に制限。
  • 推論パイプラインの入口で race_date を一度だけ取得し、各関数へ一貫して渡す。
  • 呼び出し箇所を1ファイルに集約し、引数の渡し忘れを防止する。

// Result

リーク防止策を適用した結果、バックテストの数値が現実的な範囲に収まった。これにより、モデルの真の性能を把握することが可能となった。
  • EV >= 1.5 戦略において、16ヶ月間の回収率が118.4%を記録。
  • 月次での収支変動(プラス10ヶ月、マイナス6ヶ月)を含む、実運用に近い挙動を確認。
  • 「数値が下がることは、モデルの品質確認として正常である」という評価基準を確立。
  • フォワードテストの公開により、実運用とのギャップ検証フェーズへ移行。

Senior Engineer Insight

> 時系列MLにおいて、リークは「注意」で防げるものではなく「仕組み」で防ぐべき問題である。本記事の「JOIN先の時間軸も独立して制限する」という規律は、複雑なリレーショナルデータを取り扱う現場で極めて重要だ。実装コストは増すが、バックテストと実運用の乖離を防ぐための必須投資といえる。

[ RELATED_KERNELS_DETECTED ]

cd ..

> System.About()

TechDistillは、膨大な技術記事から情報の真髄(Kernel)のみを抽出・提示します。