競馬AI開発メモ:レース間隔を特徴量化すると予測精度は上がるのか?

競馬AI開発

はじめに

地方競馬AIの特徴量エンジニアリングシリーズとして、「レース間隔」を特徴量化します。

前走からの日数・休み明け・短期続戦など、ローテーションに関する情報が予測精度に貢献するかをLightGBMで実験的に確認します。

今回確認すること

  • レース間隔特徴量はLightGBMの1着予測AUCを改善するか
  • どの種類のレース間隔特徴量が最も効くか(A〜I のグループ比較)
  • 人気なし/人気ありモデルで効果に差があるか
  • 間隔カテゴリ別(連闘・休み明けなど)の条件別AUC

レース間隔特徴量とは何か

レース間隔特徴量とは、前走からの日数や過去のローテーションパターンから算出した数値です。単純な「日数」だけでなく、以下の観点から複数の特徴量を作成しました。

  • 前走からの日数: 今走と前走の間が何日か
  • 間隔カテゴリ: 連闘・短期・通常・中期休養・長期休養
  • 過去のローテーションパターン: その馬が通常どのくらいの間隔で使われているか
  • 同カテゴリでの過去成績: 今回と同じ間隔パターンのときの成績
  • 休み明け成績: 60日以上空いたときの過去成績
  • 短期続戦成績: 14日以内で使われたときの過去成績
  • 直近出走頻度: 直近30/60/90日の出走数
  • 好走時のレース間隔: 過去に3着内に入ったときの間隔と今回の差

使用データ

  • テーブル: result_table
  • 学習期間: 2017-01-01 ~ 2022-12-31 — 787,381件
  • 検証期間: 2023-01-01 ~ 2023-12-31 — 136,354件
  • 評価期間: 2024-01-01 ~ 2024-12-31 — 138,372件
  • 合計: 1,062,107件
  • 帯広除外: 124418件除外

正例率(1着)

  • 学習: 0.1000
  • 検証: 0.0999
  • 評価: 0.0989

分割方法

時系列順にデータを分割しています(ランダム分割は使用していません)。

学習: 2017-01-01 ~ 2022-12-31
検証: 2023-01-01 ~ 2023-12-31  (early stopping)
評価: 2024-01-01 ~ 2024-12-31  (最終評価)

レース間隔カテゴリの定義

カテゴリ日数範囲件数
連闘相当(rento)0〜7日56,900 (5.4%)
中1週相当(short)8〜14日383,009 (36.1%)
通常間隔(normal)15〜35日466,289 (43.9%)
中期休養(middle_layoff)36〜59日48,304 (4.5%)
60日以上(layoff_60)60〜89日18,464 (1.7%)
90日以上(layoff_90)90〜179日31,392 (3.0%)
長期休養(long_layoff_180)180日以上10,433 (1.0%)
履歴なし(unknown)47316

前走からの日数の統計(履歴ありのみ)

  • 平均: 25.7日
  • 中央値: 15.0日
  • 最小: 3.0日
  • 最大: 2752.0日
  • 履歴なし件数: 47,316件

作成したレース間隔特徴量

A. baseline

レース間隔特徴量を追加しないベースライン。他の特徴量セットとの比較基準。

使用特徴量(リークなし): 距離・馬番・枠番・斤量・馬体重・馬体重増減・年齢・同走馬の数・月・曜日・過去3走平均着順・過去3走3着内率

B. 前走からの日数

特徴量名内容
days_since_last_run前走からの日数(初走はNaN)
log_days_since_last_run日数のlog変換(log1p)
is_first_run_or_no_history初走・過去走履歴なしフラグ

C. レース間隔カテゴリ

特徴量名内容
interval_binカテゴリ名(文字列)
is_rento連闘(0〜7日)フラグ
is_short短期(8〜14日)フラグ
is_normal通常(15〜35日)フラグ
is_middle_layoff中期(36〜59日)フラグ
is_layoff_6060日以上フラグ
is_layoff_9090日以上フラグ
is_long_layoff_180180日以上フラグ

D. 過去の平均レース間隔

特徴量名内容
past_avg_interval_days過去の平均間隔(日)
past_median_interval_days過去の中央値間隔
past_std_interval_days過去の間隔の標準偏差
past_min_interval_days過去の最小間隔
past_max_interval_days過去の最大間隔
interval_diff_from_avg今回間隔 – 過去平均
abs_interval_diff_from_avg上記の絶対値

E. 同じ間隔カテゴリでの過去成績

特徴量名内容
same_interval_bin_runs今回と同カテゴリでの過去出走数
same_interval_bin_win_rate同カテゴリでの過去1着率
same_interval_bin_top3_rate同カテゴリでの過去3着内率
same_interval_bin_avg_rank同カテゴリでの過去平均着順
same_interval_bin_best_rank同カテゴリでの過去最良着順
same_interval_bin_has_history同カテゴリ経験ありフラグ

F. 休み明け成績

特徴量名内容
layoff_runs60日以上休み明けの過去出走数
layoff_win_rate60日以上休み明けでの過去1着率
layoff_top3_rate60日以上休み明けでの過去3着内率
layoff_avg_rank60日以上休み明けでの過去平均着順
layoff_has_history休み明け経験ありフラグ
long_layoff_runs90日以上の休み明け出走数
long_layoff_top3_rate90日以上の休み明け3着内率

G. 短期続戦成績

特徴量名内容
short_interval_runs14日以内の過去出走数
short_interval_win_rate14日以内での過去1着率
short_interval_top3_rate14日以内での過去3着内率
short_interval_avg_rank14日以内での過去平均着順
rento_runs7日以内(連闘)の過去出走数
rento_top3_rate7日以内(連闘)での過去3着内率

H. 直近の使われ方

特徴量名内容
recent_avg_interval_3直近3走の平均間隔(日)
recent_avg_interval_5直近5走の平均間隔(日)
recent_min_interval_5直近5走の最小間隔(日)
recent_max_interval_5直近5走の最大間隔(日)
recent_race_count_30d直近30日以内の出走数
recent_race_count_60d直近60日以内の出走数
recent_race_count_90d直近90日以内の出走数

I. 好走時のレース間隔との差

特徴量名内容
good_run_avg_interval_days過去の好走時(3着内)の平均間隔
good_run_median_interval_days過去の好走時の中央値間隔
interval_diff_from_good_avg今回間隔 – 好走時平均間隔
abs_interval_diff_from_good_avg上記の絶対値
has_good_run_interval_history好走時間隔履歴ありフラグ

ALL. 全レース間隔特徴量

B〜Iのすべてを結合した特徴量セット。

比較方法

以下の特徴量セット(A〜ALL)に対して、LightGBMで1着予測(および3着内予測)モデルを学習し、テスト期間(2024年)のAUC・logloss・Brier scoreを比較しました。

  • 時系列分割: 学習2017〜2022年、検証2023年(early stopping)、評価2024年
  • 2条件: 人気なし / 人気あり(人気を特徴量に含めるか)
  • 目的変数: 1着(主)、3着内(補助)
  • NaN補完: 学習データの中央値で補完

結果

人気なしモデル:1着予測

ベースライン AUC(テスト期間): 0.7341

特徴量セットAUCloglossBrierAUC差logloss差
A: baseline0.73410.28950.0823
B: 前走からの日数0.73910.28820.0821+0.0050-0.0013
C: 間隔カテゴリ0.73850.28830.0821+0.0044-0.0012
D: 過去平均間隔0.74650.28600.0815+0.0124-0.0035
E: 同カテゴリ成績0.74330.28670.0817+0.0092-0.0028
F: 休み明け成績0.73690.28890.0821+0.0028-0.0006
G: 短期続戦成績0.74620.28590.0815+0.0121-0.0036
H: 直近出走頻度0.74720.28580.0815+0.0131-0.0037
I: 好走間隔差0.74220.28720.0818+0.0081-0.0023
ALL: 全レース間隔特徴量0.75240.28400.0811+0.0183-0.0055

人気なしモデルでは ALL: 全レース間隔特徴量 が最もAUCを改善しました(+0.0183)。

人気ありモデル:1着予測

ベースライン AUC(テスト期間): 0.8461

特徴量セットAUCloglossBrierAUC差logloss差
A: baseline0.84610.24370.0714
B: 前走からの日数0.84590.24390.0714-0.0002+0.0002
C: 間隔カテゴリ0.84610.24370.0714+0.0000+0.0000
D: 過去平均間隔0.84660.24340.0713+0.0005-0.0003
E: 同カテゴリ成績0.84640.24350.0713+0.0003-0.0002
F: 休み明け成績0.84600.24380.0714-0.0001+0.0001
G: 短期続戦成績0.84650.24340.0713+0.0004-0.0003
H: 直近出走頻度0.84650.24350.0713+0.0004-0.0002
I: 好走間隔差0.84630.24360.0714+0.0002-0.0001
ALL: 全レース間隔特徴量0.84680.24330.0712+0.0007-0.0004

人気ありモデルでは ALL: 全レース間隔特徴量 がわずかにAUCを改善しました(+0.0007)。

補助検証:3着内予測

人気なしモデル

ベースライン AUC(テスト期間): 0.7196

特徴量セットAUCloglossBrierAUC差logloss差
A: baseline0.71960.54220.1819
B: 前走からの日数0.72220.54050.1813+0.0026-0.0017
C: 間隔カテゴリ0.72170.54080.1814+0.0021-0.0014
D: 過去平均間隔0.72790.53730.1800+0.0083-0.0049
E: 同カテゴリ成績0.72560.53810.1804+0.0060-0.0041
F: 休み明け成績0.72170.54090.1814+0.0021-0.0013
G: 短期続戦成績0.72750.53730.1801+0.0079-0.0049
H: 直近出走頻度0.72730.53760.1802+0.0077-0.0046
I: 好走間隔差0.72440.53940.1808+0.0048-0.0028
ALL: 全レース間隔特徴量0.73230.53410.1788+0.0127-0.0081

特徴量重要度

人気なしモデル・1着予測・ALL特徴量セットの上位特徴量(gain基準):

特徴量名importance (gain)
past3_avg_rank255189.9
past3_top3_rate84439.5
同走馬の数31847.6
short_interval_runs31017.6
馬体重24851.7
距離13027.9
年齢12325.5
short_interval_avg_rank12107.8
same_interval_bin_avg_rank8995.4
days_since_last_run8467.4
same_interval_bin_top3_rate7519.3
same_interval_bin_runs7478.7
interval_diff_from_good_avg7329.9
斤量7133.5
recent_avg_interval_57098.3

条件別分析

人気なしモデル・1着予測・ALL特徴量セットで評価した条件別AUC(テスト期間)。

条件AUCloglossBriern
interval_rento0.75860.25320.07053745
interval_short0.76550.24960.069348565
interval_normal0.74980.28100.079863869
interval_middle_layoff0.73150.33520.09907264
interval_layoff_600.71520.34920.10362811
interval_layoff_900.71640.35080.10415162
interval_long_layoff_1800.69420.38750.11821654
初出走・履歴なし0.60970.45520.14245302
過去走履歴あり0.75440.27720.0787133070
同間隔カテゴリ経験あり0.74820.26070.0726114031
同間隔カテゴリ経験なし0.71840.39310.121224341
過去に休み明け経験あり0.74670.27050.076083963
過去に休み明け経験なし0.75620.30490.089054409
直近30日2走以上0.74810.22800.061247255
直近30日1走以下0.74420.31300.091491117
直近90日4走以上0.74020.22920.061472105
直近90日2走以下0.73000.36630.111044083

考察

レース間隔特徴量は効いたか

人気なしモデルで最大 +0.0183 のAUC改善が確認されました。レース間隔特徴量は一定の予測力を持つことが示されました。

人気ありモデルとの差

人気なしモデルの方がレース間隔特徴量の改善幅が大きく、人気にはレース間隔情報の一部が織り込まれている可能性があります。

条件別に見て効きやすかったところ

条件別AUCでは interval_short が最も高く(AUC=0.7655)、 初出走・履歴なし が最も低い結果でした(AUC=0.6097)。

まとめ

地方競馬データを用いて、レース間隔特徴量(A〜ALL)の効果をLightGBMで検証しました。

項目
評価対象データテスト期間 2024-01-01 ~ 2024-12-31
テストデータ件数138,372件
人気なしベースライン AUC0.7341
人気なし最良モデル AUC0.7524 (ALL: 全レース間隔特徴量)
人気ありベースライン AUC0.8461
人気あり最良モデル AUC0.8468 (ALL: 全レース間隔特徴量)
タイトルとURLをコピーしました