開発ログ

認証済みの前日情報だけから特徴量を正本Producerでまとめて再生成し、再現可能なFeature Universeを作り直す

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をどこまで学習・検証へ戻せるかを最終監査し、その後モデル検証へ戻ります。

全体ロードマップを見る →

← 開発ログへ戻る

掲載内容は、その時点の開発・検証記録です。将来の利益や的中を保証するものではありません。