はじめに
地方競馬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_60 | 60日以上フラグ |
is_layoff_90 | 90日以上フラグ |
is_long_layoff_180 | 180日以上フラグ |
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_runs | 60日以上休み明けの過去出走数 |
layoff_win_rate | 60日以上休み明けでの過去1着率 |
layoff_top3_rate | 60日以上休み明けでの過去3着内率 |
layoff_avg_rank | 60日以上休み明けでの過去平均着順 |
layoff_has_history | 休み明け経験ありフラグ |
long_layoff_runs | 90日以上の休み明け出走数 |
long_layoff_top3_rate | 90日以上の休み明け3着内率 |
G. 短期続戦成績
| 特徴量名 | 内容 |
|---|---|
short_interval_runs | 14日以内の過去出走数 |
short_interval_win_rate | 14日以内での過去1着率 |
short_interval_top3_rate | 14日以内での過去3着内率 |
short_interval_avg_rank | 14日以内での過去平均着順 |
rento_runs | 7日以内(連闘)の過去出走数 |
rento_top3_rate | 7日以内(連闘)での過去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
| 特徴量セット | AUC | logloss | Brier | AUC差 | logloss差 |
|---|---|---|---|---|---|
| A: baseline | 0.7341 | 0.2895 | 0.0823 | – | – |
| B: 前走からの日数 | 0.7391 | 0.2882 | 0.0821 | +0.0050 | -0.0013 |
| C: 間隔カテゴリ | 0.7385 | 0.2883 | 0.0821 | +0.0044 | -0.0012 |
| D: 過去平均間隔 | 0.7465 | 0.2860 | 0.0815 | +0.0124 | -0.0035 |
| E: 同カテゴリ成績 | 0.7433 | 0.2867 | 0.0817 | +0.0092 | -0.0028 |
| F: 休み明け成績 | 0.7369 | 0.2889 | 0.0821 | +0.0028 | -0.0006 |
| G: 短期続戦成績 | 0.7462 | 0.2859 | 0.0815 | +0.0121 | -0.0036 |
| H: 直近出走頻度 | 0.7472 | 0.2858 | 0.0815 | +0.0131 | -0.0037 |
| I: 好走間隔差 | 0.7422 | 0.2872 | 0.0818 | +0.0081 | -0.0023 |
| ALL: 全レース間隔特徴量 | 0.7524 | 0.2840 | 0.0811 | +0.0183 | -0.0055 |
人気なしモデルでは ALL: 全レース間隔特徴量 が最もAUCを改善しました(+0.0183)。
人気ありモデル:1着予測
ベースライン AUC(テスト期間): 0.8461
| 特徴量セット | AUC | logloss | Brier | AUC差 | logloss差 |
|---|---|---|---|---|---|
| A: baseline | 0.8461 | 0.2437 | 0.0714 | – | – |
| B: 前走からの日数 | 0.8459 | 0.2439 | 0.0714 | -0.0002 | +0.0002 |
| C: 間隔カテゴリ | 0.8461 | 0.2437 | 0.0714 | +0.0000 | +0.0000 |
| D: 過去平均間隔 | 0.8466 | 0.2434 | 0.0713 | +0.0005 | -0.0003 |
| E: 同カテゴリ成績 | 0.8464 | 0.2435 | 0.0713 | +0.0003 | -0.0002 |
| F: 休み明け成績 | 0.8460 | 0.2438 | 0.0714 | -0.0001 | +0.0001 |
| G: 短期続戦成績 | 0.8465 | 0.2434 | 0.0713 | +0.0004 | -0.0003 |
| H: 直近出走頻度 | 0.8465 | 0.2435 | 0.0713 | +0.0004 | -0.0002 |
| I: 好走間隔差 | 0.8463 | 0.2436 | 0.0714 | +0.0002 | -0.0001 |
| ALL: 全レース間隔特徴量 | 0.8468 | 0.2433 | 0.0712 | +0.0007 | -0.0004 |
人気ありモデルでは ALL: 全レース間隔特徴量 がわずかにAUCを改善しました(+0.0007)。
補助検証:3着内予測
人気なしモデル
ベースライン AUC(テスト期間): 0.7196
| 特徴量セット | AUC | logloss | Brier | AUC差 | logloss差 |
|---|---|---|---|---|---|
| A: baseline | 0.7196 | 0.5422 | 0.1819 | – | – |
| B: 前走からの日数 | 0.7222 | 0.5405 | 0.1813 | +0.0026 | -0.0017 |
| C: 間隔カテゴリ | 0.7217 | 0.5408 | 0.1814 | +0.0021 | -0.0014 |
| D: 過去平均間隔 | 0.7279 | 0.5373 | 0.1800 | +0.0083 | -0.0049 |
| E: 同カテゴリ成績 | 0.7256 | 0.5381 | 0.1804 | +0.0060 | -0.0041 |
| F: 休み明け成績 | 0.7217 | 0.5409 | 0.1814 | +0.0021 | -0.0013 |
| G: 短期続戦成績 | 0.7275 | 0.5373 | 0.1801 | +0.0079 | -0.0049 |
| H: 直近出走頻度 | 0.7273 | 0.5376 | 0.1802 | +0.0077 | -0.0046 |
| I: 好走間隔差 | 0.7244 | 0.5394 | 0.1808 | +0.0048 | -0.0028 |
| ALL: 全レース間隔特徴量 | 0.7323 | 0.5341 | 0.1788 | +0.0127 | -0.0081 |
特徴量重要度
人気なしモデル・1着予測・ALL特徴量セットの上位特徴量(gain基準):
| 特徴量名 | importance (gain) |
|---|---|
past3_avg_rank | 255189.9 |
past3_top3_rate | 84439.5 |
同走馬の数 | 31847.6 |
short_interval_runs | 31017.6 |
馬体重 | 24851.7 |
距離 | 13027.9 |
年齢 | 12325.5 |
short_interval_avg_rank | 12107.8 |
same_interval_bin_avg_rank | 8995.4 |
days_since_last_run | 8467.4 |
same_interval_bin_top3_rate | 7519.3 |
same_interval_bin_runs | 7478.7 |
interval_diff_from_good_avg | 7329.9 |
斤量 | 7133.5 |
recent_avg_interval_5 | 7098.3 |
条件別分析
人気なしモデル・1着予測・ALL特徴量セットで評価した条件別AUC(テスト期間)。
| 条件 | AUC | logloss | Brier | n |
|---|---|---|---|---|
| interval_rento | 0.7586 | 0.2532 | 0.0705 | 3745 |
| interval_short | 0.7655 | 0.2496 | 0.0693 | 48565 |
| interval_normal | 0.7498 | 0.2810 | 0.0798 | 63869 |
| interval_middle_layoff | 0.7315 | 0.3352 | 0.0990 | 7264 |
| interval_layoff_60 | 0.7152 | 0.3492 | 0.1036 | 2811 |
| interval_layoff_90 | 0.7164 | 0.3508 | 0.1041 | 5162 |
| interval_long_layoff_180 | 0.6942 | 0.3875 | 0.1182 | 1654 |
| 初出走・履歴なし | 0.6097 | 0.4552 | 0.1424 | 5302 |
| 過去走履歴あり | 0.7544 | 0.2772 | 0.0787 | 133070 |
| 同間隔カテゴリ経験あり | 0.7482 | 0.2607 | 0.0726 | 114031 |
| 同間隔カテゴリ経験なし | 0.7184 | 0.3931 | 0.1212 | 24341 |
| 過去に休み明け経験あり | 0.7467 | 0.2705 | 0.0760 | 83963 |
| 過去に休み明け経験なし | 0.7562 | 0.3049 | 0.0890 | 54409 |
| 直近30日2走以上 | 0.7481 | 0.2280 | 0.0612 | 47255 |
| 直近30日1走以下 | 0.7442 | 0.3130 | 0.0914 | 91117 |
| 直近90日4走以上 | 0.7402 | 0.2292 | 0.0614 | 72105 |
| 直近90日2走以下 | 0.7300 | 0.3663 | 0.1110 | 44083 |
考察
レース間隔特徴量は効いたか
人気なしモデルで最大 +0.0183 のAUC改善が確認されました。レース間隔特徴量は一定の予測力を持つことが示されました。
人気ありモデルとの差
人気なしモデルの方がレース間隔特徴量の改善幅が大きく、人気にはレース間隔情報の一部が織り込まれている可能性があります。
条件別に見て効きやすかったところ
条件別AUCでは interval_short が最も高く(AUC=0.7655)、 初出走・履歴なし が最も低い結果でした(AUC=0.6097)。
まとめ
地方競馬データを用いて、レース間隔特徴量(A〜ALL)の効果をLightGBMで検証しました。
| 項目 | 値 |
|---|---|
| 評価対象データ | テスト期間 2024-01-01 ~ 2024-12-31 |
| テストデータ件数 | 138,372件 |
| 人気なしベースライン AUC | 0.7341 |
| 人気なし最良モデル AUC | 0.7524 (ALL: 全レース間隔特徴量) |
| 人気ありベースライン AUC | 0.8461 |
| 人気あり最良モデル AUC | 0.8468 (ALL: 全レース間隔特徴量) |

