競馬AI開発メモ:展開圧力を数値化すると勝率予測に効くのか?

競馬AI開発

はじめに

前回は各馬の過去走通過順から脚質特徴量を作り、予測精度への貢献を確認しました。 今回はその発展として、今走メンバー全体の脚質構成から「展開圧力」を数値化し、LightGBMの1着予測精度が改善するかを検証しました。

今回確認すること

  • 各馬の過去脚質指数から「今走のメンバー全体の展開圧力」を数値化できるか
  • 展開圧力特徴量を追加するとLightGBMの1着予測AUCが改善するか
  • 馬単体の脚質特徴量と展開圧力特徴量の効果に違いがあるか
  • 単騎逃げ候補・前争い候補・後方×高圧力などの条件別に結果に差があるか
  • 人気あり・なしで展開圧力特徴量の効果が変わるか

展開圧力とは何か

「展開圧力」とは、今走のメンバー全体を見たときに、前に行きたい馬がどれくらいいるか、という概念です。

逃げ候補が多いレースでは、先頭争いが激化し、前に行く馬の消耗が大きくなりやすいとされます。逆に逃げ候補が1頭だけなら、単騎で楽なペースに持ち込める可能性があります。

今回はこの展開圧力を、各馬の過去走から作った脚質指数を使って数値化しました。

馬単体の脚質特徴量との違い

今回の記事では、以下2種類の特徴量を明確に区別しています。

種類内容
馬単体の脚質特徴量その馬自身が過去にどの位置で走ってきたか
展開圧力特徴量今走の出走メンバー全体を見たとき、前に行きたい馬がどれくらいいるか

馬単体の脚質特徴量は「この馬はどんなタイプか」という情報です。展開圧力特徴量は「このレースはどんな展開になりそうか」という情報です。

展開圧力特徴量は、今走の出走メンバーの過去走脚質指数を使って作ります。今走の通過順・4角位置・脚質ラベル・着順は一切使いません。

使用データ

  • データソース: ローカル環境のレース結果データベース(common.db
  • 対象テーブルresult_table
  • 目的変数(主)1着(1着に入るか)
  • 目的変数(補助)3着内(3着内に入るか)
  • 帯広除外: ばんえい競馬(帯広)を除外しました(124,418件)。ばんえい競馬は通常の地方競馬とはレース構造が異なり、通過順・脚質・展開の意味が他場と異なる可能性があります。
分割期間件数正例率(1着割合)
訓練 (train)2017-01-01 ~ 2022-12-31787,3810.100
検証 (valid)2023-01-01 ~ 2023-12-31136,3540.100
テスト (test)2024-01-01 ~ 2024-12-31138,3720.099

通過順の扱い

地方競馬のDBには 通過1通過4 のカラムがありますが、短距離レースでは4角まで通過しない場合があります。 そのため、4角固定ではなく、取得できる通過順のうち 最初(first) と 最後(final) を使いました。

通過1, 通過2, 通過3, 通過4 がある場合: first=通過1, final=通過4
通過3, 通過4 だけがある場合: first=通過3, final=通過4
通過1, 通過2 だけがある場合: first=通過1, final=通過2
通過順がない場合: 欠損(NaN)扱い

位置は頭数で正規化しています:

position_rate = (通過順 - 1) / (出走頭数 - 1)

前にいるほど0に近く、後ろにいるほど1に近い値になります。

今回のデータでは、通過順が取得できたレコードは 1,062,107件 / 1,062,107件(100.0%)でした。

馬単体の脚質指数の作り方

展開圧力特徴量を作る土台として、まず各馬の過去走から以下の脚質指数を計算しました。すべての特徴量は shift(1) してから rolling() で計算しており、今走の情報は含まれません。

特徴量名定義意味
avg_first_position_rate直近5走のfirst_position_rate平均序盤の位置取り傾向
avg_final_position_rate直近5走のfinal_position_rate平均終盤の位置取り傾向
front_index1 - avg_final_position_rate高いほど前に行く馬
early_front_index1 - avg_first_position_rate序盤の前傾度
closing_indexavg_first_position_rate - avg_final_position_rate末脚度(正で末脚タイプ)
style_stability直近5走のfinal_position_rate標準偏差脚質の安定性(低いほど安定)

front_index は0〜1の値で、1に近いほど普段から前に行く馬、0に近いほど後方になりやすい馬という解釈です。

展開圧力特徴量の作り方

各馬の front_index(過去走から計算済み)を使って、今走レース内で集計します。

各馬の過去走のみからfront_indexを作る
  ↓
今走の出走メンバーについて、各馬の過去front_indexを並べる
  ↓
そのレース内で逃げ候補数・先行馬密度・相対先行指数などを作る

展開圧力特徴量は、今走の結果情報を一切含みません。

しきい値

今回は以下のしきい値を使いました。これは仮の定義であり、しきい値を変えると結果が変わる可能性があります。

名称条件
逃げ候補(escape_candidates)front_index >= 0.85
先行候補(front_runner_candidates)front_index >= 0.65
後方馬(closer)front_index <= 0.35
単騎逃げ判定ギャップfront_index差 >= 0.1
高圧力レース判定front_runner_candidates >= 3

特徴量定義表への案内

各展開圧力特徴量の詳細な定義(入力・計算方法・リーク対策・注意点)は、同フォルダの feature_definitions.md を参照してください。

比較方法

時系列分割(ランダム分割なし)でLightGBMモデルを学習しました。

訓練期間: 2017-01-01 ~ 2022-12-31
検証期間: 2023-01-01 ~ 2023-12-31
テスト期間: 2024-01-01 ~ 2024-12-31

以下の特徴量セットを比較しました:

  • A_baseline: ベース特徴量のみ(脚質・展開圧力なし)
  • B_horse_style_only: 馬単体の脚質特徴量のみ追加(avg_first/final_position_rate, front_index等)
  • C_race_pressure_only: 展開圧力特徴量のみ追加(馬単体の脚質指数は含まない)
  • D_horse_style_plus_pressure: 馬単体脚質 + 展開圧力特徴量(A〜D)を追加
  • E_pressure_interactions: 馬単体脚質 + 相対先行力 + 交互作用フラグを追加
  • F_all_pressure_features: すべての展開圧力特徴量を追加(A〜Eすべて)

人気あり・なしの2条件でも比較しています:

  1. 人気なしモデル: 人気(単勝人気順)を特徴量に含めない
  2. 人気ありモデル: 人気(単勝人気順)を特徴量に含める

人気を含めると、市場参加者が展開や脚質をある程度織り込んでいる可能性があります。人気なしモデルの方が、展開圧力特徴量そのものの情報量が見えやすいと考えられます。

結果

人気なしモデル(1着予測)

特徴量セットAUC (test)logloss (test)Brier (test)AUCの差分(Aとの比較)
A_baseline0.73410.28950.0823
B_horse_style_only0.74640.28580.0816+0.0123 (改善)
C_race_pressure_only0.76380.27970.0801+0.0297 (改善)
D_horse_style_plus_pressure0.76570.27910.0800+0.0316 (改善)
E_pressure_interactions0.76460.27950.0801+0.0305 (改善)
F_all_pressure_features0.76570.27910.0800+0.0316 (改善)

人気ありモデル(1着予測)

特徴量セットAUC (test)logloss (test)Brier (test)AUCの差分(Aとの比較)
A_baseline0.84610.24370.0714
B_horse_style_only0.84620.24370.0714+0.0001 (同程度)
C_race_pressure_only0.84670.24340.0713+0.0006 (改善)
D_horse_style_plus_pressure0.84650.24350.0713+0.0004 (改善)
E_pressure_interactions0.84630.24350.0714+0.0002 (改善)
F_all_pressure_features0.84650.24350.0713+0.0004 (改善)

人気なしモデル(3着内予測・補助)

特徴量セットAUC (test)logloss (test)Brier (test)
A_baseline0.71960.54220.1819
B_horse_style_only0.72870.53600.1798
C_race_pressure_only0.74420.52530.1755
D_horse_style_plus_pressure0.74550.52420.1751
F_all_pressure_features0.74550.52420.1751

どの展開圧力特徴量が効いたか

特徴量重要度(人気なし・F_all_pressure_features)

特徴量名重要度(gain)
front_index_gap_to_second164421.0
past3_avg_rank157425.3
relative_front_index78435.0
front_index_gap_to_top56414.0
past3_top3_rate31288.3
馬体重30887.3
opponent_avg_front_index19619.3
同走馬の数19105.7
style_stability16576.4
年齢11961.4
斤量11097.8
馬体重増減10535.6
front_index_percentile_in_race10021.0
距離9706.8
race_max_front_index9195.2

しきい値の感度分析

逃げ候補判定に使うfront_indexのしきい値を変えた場合の影響を確認しました。

しきい値AUC (test)logloss (test)
front_index >= 0.80.75880.2816
front_index >= 0.850.75720.2823
front_index >= 0.90.75410.2831

しきい値はあくまで仮の定義です。どのしきい値でも大きな差がない場合は、しきい値自体の影響は限定的と考えられます。

条件別分析

逃げ候補数・単騎逃げ候補・前争い候補・後方×高圧力などの条件別に、テスト期間のAUCを比較しました。

注意: 条件別AUCは条件ごとの難易度差と混ざるため、単純な大小比較だけで結論を出すのは危険です。また、サンプル数が少ない条件は信頼性が低くなります。

条件AUCloglossBrierサンプル数
逃げ候補0頭0.73760.29540.084758,273
逃げ候補1頭0.78400.27000.077446,292
逃げ候補2頭以上0.78600.26340.075433,807
先行候補1頭以下0.73540.30620.088426,164
先行候補2-3頭0.77320.28030.080651,860
先行候補4頭以上0.77130.26630.075860,348
単騎逃げ候補=10.68530.57620.19565,208
単騎逃げ候補=00.75480.26000.0728127,862
前争い候補=10.69910.47720.15407,847
前争い候補=00.76300.25960.0728125,223
後方×高圧力=10.73440.09910.021416,859
後方×高圧力=00.75060.29750.0858116,211

人気あり・人気なしの比較

人気を特徴量に含めた場合と含めない場合の比較です。人気には市場参加者が展開・脚質を織り込んだ情報が含まれている可能性があります。

特徴量セットAUC(人気なし)AUC(人気あり)差分
A_baseline0.73410.8461+0.1120 (改善)
B_horse_style_only0.74640.8462+0.0998 (改善)
C_race_pressure_only0.76380.8467+0.0829 (改善)
D_horse_style_plus_pressure0.76570.8465+0.0808 (改善)
E_pressure_interactions0.76460.8463+0.0817 (改善)
F_all_pressure_features0.76570.8465+0.0808 (改善)

考察

今回のデータでは、人気なしモデルにおいて D_horse_style_plus_pressure の特徴量セットが ベースラインに対してAUCで+0.0316の改善が見られました。

馬単体の脚質特徴量のみ追加(B): ベース比+0.0123、展開圧力のみ追加(C): ベース比+0.0297という結果でした。

馬単体脚質に展開圧力を組み合わせた(D)は、馬単体脚質のみ(B)に対してAUCが+0.0193という結果でした。

展開圧力は「今走メンバーの構成」から作る特徴量であり、各馬の過去脚質の質や量に依存します。過去走が少ない馬ではfront_indexの信頼性が低く、展開圧力の集計値にもノイズが入りやすくなります。

逃げ候補・先行候補のしきい値は仮の定義です。今後は実際のレース展開(逃げ馬が実際に逃げたか)との照合が必要です。

人気ありモデルでは、展開圧力特徴量の追加効果が小さく見える可能性があります。市場参加者が展開・脚質をある程度織り込んでいれば、展開圧力特徴量の独立した情報量は小さくなります。

条件別分析では、条件ごとのサンプル数や難易度の差が結果に影響します。単純なAUCの大小だけで判断せず、サンプル数も確認してください。


タイトルとURLをコピーしました