今回はPFIの結果です。これらの結果から何が見えるのか?そして、何が課題なのかを突き詰めておきたいと思っています。まず、以下が結果でした。
📊 Baseline NDCG@3: 0.9201
🚀 Numeric PFI: 24 features × 5 repeats
✅ done: 距離 ΔNDCG@3 = +0.0010 ± 0.0009 (249.7s)
✅ done: 馬番 ΔNDCG@3 = -0.0004 ± 0.0003 (253.1s)
✅ done: 斤量 ΔNDCG@3 = -0.0004 ± 0.0002 (250.3s)
✅ done: 馬体重 ΔNDCG@3 = -0.0003 ± 0.0005 (248.8s)
✅ done: 体重増減 ΔNDCG@3 = -0.0001 ± 0.0006 (249.5s)
✅ done: 日数差 ΔNDCG@3 = -0.0014 ± 0.0015 (248.5s)
✅ done: 日数差_norm ΔNDCG@3 = -0.0006 ± 0.0000 (252.6s)
✅ done: 斤量_馬体重比 ΔNDCG@3 = -0.0005 ± 0.0000 (251.2s)
✅ done: 好成績 ΔNDCG@3 = -0.0008 ± 0.0004 (252.1s)
✅ done: 距離フラグ ΔNDCG@3 = -0.0005 ± 0.0004 (256.3s)
✅ done: 脚質フラグ ΔNDCG@3 = -0.0008 ± 0.0002 (268.0s)
✅ done: 馬場フラグ ΔNDCG@3 = -0.0009 ± 0.0001 (266.0s)
✅ done: 出走数 ΔNDCG@3 = -0.0039 ± 0.0017 (264.0s)
✅ done: 勝利数 ΔNDCG@3 = -0.0058 ± 0.0008 (261.7s)
✅ done: 騎手勝率 ΔNDCG@3 = -0.0068 ± 0.0001 (259.1s)
✅ done: 過去走破速度 ΔNDCG@3 = -0.0068 ± 0.0001 (262.7s)
✅ done: 過去人気 ΔNDCG@3 = -0.0065 ± 0.0006 (260.8s)
✅ done: 過去着順 ΔNDCG@3 = -0.0068 ± 0.0004 (259.3s)
✅ done: 過去上り ΔNDCG@3 = -0.0063 ± 0.0003 (263.9s)
✅ done: 履歴長_norm ΔNDCG@3 = -0.0067 ± 0.0001 (263.7s)
✅ done: 騎手-馬コンビ勝率 ΔNDCG@3 = -0.0066 ± 0.0001 (263.8s)
✅ done: 相対斤量差 ΔNDCG@3 = -0.0066 ± 0.0003 (259.3s)
✅ done: 相対騎手勝率差 ΔNDCG@3 = -0.0063 ± 0.0001 (263.2s)
✅ done: 相対過去速度 ΔNDCG@3 = -0.0065 ± 0.0001 (263.3s)
🚀 Categorical PFI: 18 features × 5 repeats
✅ done: 競馬場 ΔNDCG@3 = -0.0063 ± 0.0002 (281.3s)
✅ done: 芝ダ ΔNDCG@3 = -0.0063 ± 0.0000 (245.1s)
✅ done: 馬場 ΔNDCG@3 = -0.0063 ± 0.0001 (248.7s)
✅ done: 性 ΔNDCG@3 = -0.0060 ± 0.0002 (263.1s)
✅ done: 年齢層 ΔNDCG@3 = -0.0062 ± 0.0001 (265.9s)
✅ done: 距離カテゴリ ΔNDCG@3 = -0.0067 ± 0.0001 (266.3s)
✅ done: 距離Cx芝ダ ΔNDCG@3 = -0.0067 ± 0.0001 (265.9s)
✅ done: 天候x馬場 ΔNDCG@3 = -0.0065 ± 0.0003 (268.3s)
✅ done: 競馬場x芝ダ ΔNDCG@3 = -0.0063 ± 0.0001 (265.3s)
✅ done: 年齢層x芝ダ ΔNDCG@3 = -0.0061 ± 0.0001 (265.3s)
✅ done: 性x距離カテゴリ ΔNDCG@3 = -0.0065 ± 0.0005 (263.2s)
✅ done: 血統キー ΔNDCG@3 = -0.0071 ± 0.0003 (264.6s)
✅ done: 血統得意距離 ΔNDCG@3 = -0.0072 ± 0.0002 (265.0s)
✅ done: 血統得意脚質 ΔNDCG@3 = -0.0073 ± 0.0002 (268.0s)
✅ done: 血統得意馬場 ΔNDCG@3 = -0.0072 ± 0.0001 (303.9s)
✅ done: 脚質過去 ΔNDCG@3 = -0.0073 ± 0.0003 (271.4s)
✅ done: 騎手ID ΔNDCG@3 = -0.0069 ± 0.0003 (266.3s)
✅ done: 調教師ID ΔNDCG@3 = -0.0068 ± 0.0002 (271.9s)
📋 数値特徴量の影響(NDCG@3 低下量: 平均±SD):
距離 drop = +0.0010 ± 0.0009 ⬆️
体重増減 drop = -0.0001 ± 0.0006 ⬇️
馬体重 drop = -0.0003 ± 0.0005 ⬇️
馬番 drop = -0.0004 ± 0.0003 ⬇️
斤量 drop = -0.0004 ± 0.0002 ⬇️
距離フラグ drop = -0.0005 ± 0.0004 ⬇️
斤量_馬体重比 drop = -0.0005 ± 0.0000 ⬇️
日数差_norm drop = -0.0006 ± 0.0000 ⬇️
脚質フラグ drop = -0.0008 ± 0.0002 ⬇️
好成績 drop = -0.0008 ± 0.0004 ⬇️
馬場フラグ drop = -0.0009 ± 0.0001 ⬇️
日数差 drop = -0.0014 ± 0.0015 ⬇️
出走数 drop = -0.0039 ± 0.0017 ⬇️
勝利数 drop = -0.0058 ± 0.0008 ⬇️
相対騎手勝率差 drop = -0.0063 ± 0.0001 ⬇️
過去上り drop = -0.0063 ± 0.0003 ⬇️
過去人気 drop = -0.0065 ± 0.0006 ⬇️
相対過去速度 drop = -0.0065 ± 0.0001 ⬇️
相対斤量差 drop = -0.0066 ± 0.0003 ⬇️
騎手-馬コンビ勝率 drop = -0.0066 ± 0.0001 ⬇️
履歴長_norm drop = -0.0067 ± 0.0001 ⬇️
過去着順 drop = -0.0068 ± 0.0004 ⬇️
過去走破速度 drop = -0.0068 ± 0.0001 ⬇️
騎手勝率 drop = -0.0068 ± 0.0001 ⬇️
📋 カテゴリ特徴量の影響(NDCG@3 低下量: 平均±SD):
性 drop = -0.0060 ± 0.0002 ⬇️
年齢層x芝ダ drop = -0.0061 ± 0.0001 ⬇️
年齢層 drop = -0.0062 ± 0.0001 ⬇️
競馬場 drop = -0.0063 ± 0.0002 ⬇️
芝ダ drop = -0.0063 ± 0.0000 ⬇️
競馬場x芝ダ drop = -0.0063 ± 0.0001 ⬇️
馬場 drop = -0.0063 ± 0.0001 ⬇️
性x距離カテゴリ drop = -0.0065 ± 0.0005 ⬇️
天候x馬場 drop = -0.0065 ± 0.0003 ⬇️
距離カテゴリ drop = -0.0067 ± 0.0001 ⬇️
距離Cx芝ダ drop = -0.0067 ± 0.0001 ⬇️
調教師ID drop = -0.0068 ± 0.0002 ⬇️
騎手ID drop = -0.0069 ± 0.0003 ⬇️
血統キー drop = -0.0071 ± 0.0003 ⬇️
血統得意距離 drop = -0.0072 ± 0.0002 ⬇️
血統得意馬場 drop = -0.0072 ± 0.0001 ⬇️
血統得意脚質 drop = -0.0073 ± 0.0002 ⬇️
脚質過去 drop = -0.0073 ± 0.0003 ⬇️
✅ PFI (NDCG@3 × 5回平均, レース内S軸シャッフル, 馬ID除外) 完了
先ずは、その評価をしてみたいと思います。
1. 全体の傾向
- ベースライン NDCG@3 = 0.9201 と、まずまず高い水準。
- 多くの特徴量をシャッフルしても性能低下は -0.006 ~ -0.007 程度に収まっており、
→ 「どの特徴量が欠けても致命的には崩れない=モデルが複数の情報源をバランス良く活用している」ことを示しています。
2. 数値特徴量の重要度
- ほとんどの数値特徴量は 軽微〜中程度の性能低下。
- 特に効いているのは以下のグループで、いずれも 過去の成績や騎手関連に関わる指標:
- 騎手勝率, 騎手-馬コンビ勝率, 相対騎手勝率差
- 過去走破速度, 過去着順, 過去人気, 過去上り
- 履歴長_norm(馬のレース経験の長さ)
- 一方で「距離」「斤量」「馬体重」といったレース直前にわかる基本情報はほとんど効いておらず、驚くべき点です。
→ モデルは「直近の数値条件」より「過去履歴」や「騎手関連」の方を重視していると解釈できます。
3. カテゴリ特徴量の重要度
- 多くのカテゴリ特徴量は -0.006 ~ -0.007 程度の低下を示し、数値特徴量と同程度に効いている。
- 特に効いているのは 血統・脚質関連:
- 血統得意距離 / 馬場 / 脚質
- 脚質過去
- 騎手ID・調教師ID も効いているが、血統系よりやや劣る。
- 一方、「性」「年齢層」など基本的なカテゴリ変数は影響が比較的小さく、モデルにとって補助的役割にとどまっていると見られます。
4. 課題として見えること
- 距離や斤量など基本条件が効いていない
→ 正しくモデリングできていない、あるいは他の特徴(血統・過去走破記録)に飲み込まれている可能性。
→ 特徴量の表現方法(カテゴリ化、相対化、非線形変換など)を工夫する余地あり。 - 低下量が横並び
→ 多くの特徴量で差が小さく、どれが「決定的」かが見えにくい。
→ これは良く言えば「モデルが冗長に情報を使えている」ことですが、悪く言えば「強い特徴が欠けても補完されてしまう」ため、解釈性が低い。 - 血統特徴の強さ
→ 血統関連は確かに効いているが、過学習のリスク(特定の系統に偏る)もある。
→ 外部データ(調教情報や当日馬体重増減など)との組み合わせでバランスを取る必要あり。 - 調教師IDや騎手IDは、「数が多い」「偏りがある」ため、そのままでは不安定
→実務では:
◎「IDをカテゴリ特徴量(embedding)」+「成績を数値特徴量」
◎頻度の少ないIDはまとめる
◎時系列・リーク対策を徹底
👉 こうすると、「騎手ID・調教師ID」を使っても、汎化性能を保ちつつモデルに貢献させられます。
5. 今後の対応アイデア
- 特徴量表現の改善
- 距離や斤量を「絶対値」ではなく「馬やクラスに対する相対差」で表す
- 馬体重は正規化した上で変化量を強調
- 新しい特徴量追加
- 当日の馬場状態や直前オッズ情報
- 調教・走行タイム、厩舎コメントなど
- PFI以外の重要度指標も併用
- SHAP値などを使い、「どの条件下で効いているか」まで可視化する
- カテゴリ特徴の圧縮・再設計
- 血統や騎手IDは高次元になりがち → embedding サイズや grouping 方法を工夫する
まとめ
今回の PFI から言えるのは:
- モデルは 「過去成績+騎手関連+血統」 に強く依存している
- 「距離や斤量などの基本条件」はほとんど活かせていない
- 特徴量の影響が横並びで、解釈性に欠ける面がある
次の改善では、基礎条件の表現強化・特徴量重要度の多角的評価を行うと、さらに精度向上や納得感のあるモデル解釈につながりそうです。
コメント