今回の成果
競馬AIの過去検証で最も避けたいのは、本来その時点では知ることができなかった情報が特徴量へ混ざることです。
今回、予測に使える情報をレース前日23:00までに利用可能だったものへ限定し、結果・払戻・時点不明データを安全側に倒して扱うPoint-in-Time / Lineage / Leakageゲートを実装しました。
なぜ必要なのか
未来情報が少しでも混ざると、過去検証ではモデルが強く見えることがあります。
しかし、その情報は実戦時には存在しないため、再現できません。
そのため特徴量の有効性を評価する前に、「当時本当に利用可能だった情報だけで予測しているか」を保証する必要があります。
実装したルール
特徴量候補について、前日23:00以前に利用可能だったかを確認します。
結果・払戻などレース後情報は予測特徴量から分離します。
また、値の利用可能時点を追跡できない場合は推測で通さず、Fail Closedとして扱います。
実DB監査
実データベースをREAD_ONLYで監査し、データベースが変更されていないことも確認しました。
結果系・払戻系の領域が存在すること、さらに時間的Lineageをそのまま追えない領域が存在することも把握しています。
これらを「存在するから使う」のではなく、「予測時点で利用可能だったと確認できるか」で判定します。
今回の意味
今回の成果は、予測精度が上がったことではありません。
今後の特徴量研究で「その特徴量が本当に効いた」と言うために、未来情報による見かけ上の改善を排除できる土台を作ったことです。
次はFeature Storeのバージョン管理、キャッシュ、途中再開、スキーマ変更への対応へ進みます。