30秒でわかる概要
「特徴量は多いほど強い」とは限りません。
前日予想に使える候補20項目をPIT AuthorityとCanonical Producerに接続して精査した結果、**実際のモデル入力は5項目だけ**にしました。
さらにcanonical race_entry全418,869行で実投影し、重複0、JoinLoss 0、5特徴量のNULL行0、available_at欠損0を確認しています。
一方で、真正なpre-cutoff snapshotが証明できないため、STRICT_FORWARDへの昇格は0のままです。
なぜ20項目をそのまま使わないのか
候補として存在することと、予測特徴量として使うべきことは別です。
ID、表示名、Recovery補助情報、knowledge time確認用メタデータまでモデルに混ぜると、意味の違う情報を同列に扱ってしまいます。
そこで20項目を役割別に分離しました。
- MODEL_FEATURE:5
- CONTEXT_FEATURE:8
- CONTEXT_KEY:2
- IDENTITY_CONTEXT:2
- PIT_METADATA:2
- RECOVERY_METADATA:1
モデル入力として残した5項目
- race.distance_m
- race.surface
- race.venue_code
- race_entry.frame_number
- race_entry.horse_number
「たくさん使う」より、**使う理由を説明できるものだけ残す**方針です。
418,869行で実データ検証
粒度は1 race_id × 1 horse_idです。
- race_entry row:418,869
- distinct race_id×horse_id:418,869
- duplicate pair:0
- joined projection row:418,869
- join loss:0
- any model feature null row:0
- race_entry.available_at missing:0
定義しただけではなく、**全418,869行で5特徴量を欠けずにmaterializeできることまで確認**しました。
それでもSTRICT_FORWARDは0
今回の20項目はRECONSTRUCTED_HISTORICALです。
後から再構成できたことと、当時前日までに取得済みだったことは同じではありません。
そのため、真正なpre-cutoff snapshot証拠がない項目をSTRICT_FORWARDには昇格させていません。
Leakage Safety
- Market feature:FORBIDDEN
- Post-outcome feature:FORBIDDEN
- STRICT_FORWARD promotion:FORBIDDEN
- RECONSTRUCTED_HISTORICALをSTRICT_FORWARDと呼ばない
- DB access:READ_ONLY
- DB write:NO
- DB hash before/after:一致
今回の意味
今回の成果は「特徴量を5つ作った」ことだけではありません。
**前日予想で使う情報と、使ってはいけない・混ぜてはいけない情報の境界を固定した**ことです。
ここを曖昧にすると過去検証だけ良く見える可能性があります。
次工程
次はMODEL_READY TRUE FORWARD DATASET CERTIFICATIONへ進みます。
今回のFeature Universeをどこまで学習・検証へ戻せるかを最終監査し、その後モデル検証へ戻ります。