競馬AI開発メモ:馬体重・馬体重増減を特徴量化すると予測精度は上がるのか?

競馬AI開発

はじめに

今回は「馬体重」と「馬体重増減」を特徴量化し、LightGBMの予測精度に効くかを確認します。

今回確認すること

  • 馬体重そのものを入れると精度が上がるか
  • 馬体重増減を入れると精度が上がるか
  • 過去平均との差(通常体重からのズレ)が効くか
  • 馬体重のトレンド(増加傾向・減少傾向)が効くか
  • 大幅増減のフラグが効くか
  • 馬体重の安定度が効くか
  • 好走時体重との差が効くか
  • レース内での相対体重が効くか
  • 人気あり/なしで馬体重特徴量の効果は変わるか

馬体重特徴量とは何か

馬体重・馬体重増減は通常レース前に発表される情報です。 馬体重そのものだけでなく、以下のような情報も特徴量化できます。

  • その馬の通常体重からのズレ(過去平均との差)
  • 直近の増減傾向(トレンド)
  • 大幅な増減(調子の変化の手がかり)
  • 好走したときの体重に近いかどうか
  • 同レース内での相対的な体重位置

重要な注意点:

  • 馬体重・馬体重増減は馬体重発表後に予測する前提の特徴量です
  • 馬体重発表前に予測する運用では使えません
  • 今走の着順・タイム・着差・上がりなどの結果情報は使っていません
  • 過去走集計は必ず shift(1) して今走を含めていません

使用データ

  • テーブル: 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 件
  • 帯広除外: 124,418 件除外
  • 1着率(学習期間): 0.1000
  • 1着率(評価期間): 0.0989

馬体重・馬体重増減の分布

馬体重の分布

  • 平均: 465.13
  • 中央値: 465.0
  • 標準偏差: 33.115
  • 最小: 310.0
  • 最大: 634.0
  • 欠損数: 653

馬体重増減の分布

  • 平均: 0.311
  • 中央値: 0.0
  • 標準偏差: 5.684
  • 最小: -64.0
  • 最大: 72.0
  • 欠損数: 653

増減カテゴリ分布

カテゴリ件数割合
増加480,02645.2%
減少461,32843.4%
増減なし120,10011.3%

作成した馬体重特徴量

A: baseline

馬体重特徴量なしのベース特徴量のみ(比較の基準)

B: 今走の馬体重

今走の馬体重・log変換・欠損フラグ

  • body_weight
  • log_body_weight
  • body_weight_missing_flag

C: 今走の馬体重増減

今走の馬体重増減・絶対値・欠損フラグ

  • body_weight_change
  • abs_body_weight_change
  • body_weight_change_missing_flag

D: 過去平均との差

過去平均馬体重との差・zスコア

  • past_avg_body_weight
  • past_median_body_weight
  • past_std_body_weight
  • body_weight_diff_from_past_avg
  • abs_body_weight_diff_from_past_avg
  • body_weight_zscore_vs_past

E: 馬体重トレンド

直近の馬体重増減トレンド(傾向)

  • past_body_weight_change_1
  • past_body_weight_change_2
  • recent_avg_body_weight_change_3
  • recent_avg_body_weight_change_5
  • body_weight_trend_3
  • body_weight_trend_5

F: 大幅増減フラグ

大幅増減(10kg/20kg以上)フラグ

  • is_large_gain_10
  • is_large_gain_20
  • is_large_loss_10
  • is_large_loss_20
  • is_large_abs_change_10
  • is_large_abs_change_20

G: 馬体重安定度

馬体重の安定度(標準偏差・変動係数)

  • body_weight_std_3
  • body_weight_std_5
  • body_weight_cv_5
  • is_body_weight_stable
  • is_body_weight_unstable

H: 好走時体重との差

好走時(3着内)体重と今走体重の差

  • good_run_avg_body_weight
  • good_run_median_body_weight
  • body_weight_diff_from_good_avg
  • abs_body_weight_diff_from_good_avg
  • has_good_run_body_weight_history

I: レース内相対体重

同レース内での相対体重(順位・パーセンタイル)

  • body_weight_rank_in_race
  • body_weight_percentile_in_race
  • body_weight_change_rank_in_race
  • body_weight_change_percentile_in_race

ALL: 全馬体重特徴量

B〜Iをすべて追加

比較方法

  • モデル: LightGBM
  • 時系列分割(ランダム分割ではない)
  • 目的変数: 1着に入るか(補助: 3着内に入るか)
  • 評価指標: AUC / logloss / Brier score
  • 人気なしモデルと人気ありモデルの2条件で比較

ベース特徴量(A_baseline):

距離・馬番・枠番・斤量・年齢・同走馬の数・月・曜日・過去3走平均着順・過去3走3着内率

※ ベースラインには馬体重・馬体重増減を含めない(効果を測定するため)

結果

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

特徴量セットAUCloglossBrierAUC差logloss差
A: baseline0.72870.29110.0826
B: 今走の馬体重0.73350.28970.0823+0.0048-0.0014
C: 今走の馬体重増減0.73000.29070.0825+0.0013-0.0004
D: 過去平均との差0.73400.28960.0823+0.0053-0.0015
E: 馬体重トレンド0.73390.28950.0822+0.0052-0.0016
F: 大幅増減フラグ0.72970.29080.0825+0.0010-0.0003
G: 馬体重安定度0.73450.28940.0822+0.0058-0.0017
H: 好走時体重との差0.73220.29020.0824+0.0035-0.0009
I: レース内相対体重0.73540.28910.0822+0.0067-0.0020
ALL: 全馬体重特徴量0.74050.28750.0818+0.0118-0.0036

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

特徴量セットAUCloglossBrierAUC差logloss差
A: baseline0.84570.24390.0715
B: 今走の馬体重0.84560.24400.0715-0.0001+0.0001
C: 今走の馬体重増減0.84600.24390.0714+0.0003+0.0000
D: 過去平均との差0.84560.24390.0715-0.0001+0.0000
E: 馬体重トレンド0.84570.24390.0714+0.0000+0.0000
F: 大幅増減フラグ0.84570.24380.0714+0.0000-0.0001
G: 馬体重安定度0.84560.24380.0714-0.0001-0.0001
H: 好走時体重との差0.84560.24400.0715-0.0001+0.0001
I: レース内相対体重0.84610.24370.0714+0.0004-0.0002
ALL: 全馬体重特徴量0.84570.24390.0714+0.0000+0.0000

補助検証:3着内予測(人気なし)

特徴量セットAUCloglossBrierAUC差logloss差
A: baseline0.71610.54440.1828
B: 今走の馬体重0.71880.54270.1821+0.0027-0.0017
C: 今走の馬体重増減0.71680.54390.1826+0.0007-0.0005
D: 過去平均との差0.71960.54220.1819+0.0035-0.0022
E: 馬体重トレンド0.71900.54270.1821+0.0029-0.0017
F: 大幅増減フラグ0.71660.54410.1827+0.0005-0.0003
G: 馬体重安定度0.71960.54230.1819+0.0035-0.0021
H: 好走時体重との差0.71850.54300.1822+0.0024-0.0014
I: レース内相対体重0.72080.54130.1816+0.0047-0.0031
ALL: 全馬体重特徴量0.72450.53900.1806+0.0084-0.0054

特徴量重要度(人気なし・1着・ALL)

順位特徴量Gain
1past3_avg_rank271201.6
2past3_top3_rate82780.7
3body_weight_percentile_in_race31069.0
4同走馬の数22795.8
5年齢16323.1
6距離10011.2
7recent_avg_body_weight_change_59953.3
8past_std_body_weight9925.3
9body_weight_std_58309.3
107688.9
11has_good_run_body_weight_history7552.0
12斤量7235.6
13past_median_body_weight6906.0
14body_weight6875.8
15body_weight_trend_56367.1

特徴量重要度(人気あり・1着・ALL)

順位特徴量Gain
1人気887405.2
2past3_avg_rank53170.4
3past3_top3_rate27847.3
4同走馬の数11828.0
5body_weight_percentile_in_race8541.4
6年齢4230.7
7body_weight3923.9
8recent_avg_body_weight_change_53819.7
9body_weight_change_percentile_in_race3214.5
10past_std_body_weight3211.2
112947.6
12recent_avg_body_weight_change_32922.0
13abs_body_weight_diff_from_past_avg2919.5
14距離2820.3
15body_weight_change2788.6

条件別分析

ALLモデル(人気なし・1着予測)のテスト期間における条件別AUC:

条件AUCloglossBrierN正例率
馬体重増加0.74290.28190.079963,1870.0962
馬体重減少0.73720.29070.082759,5700.1003
馬体重増減なし0.74190.29810.085815,5600.1044
10kg以上増加0.71160.35120.10407,1950.1286
10kg以上減少0.72420.30730.08814,7230.1069
20kg以上増加0.68130.38270.11541,1620.1420
20kg以上減少0.69900.28770.07993170.0915
過去平均より重い0.73540.28360.080180,5320.0962
過去平均より軽い0.75020.27430.077451,3030.0939
過去平均との差が大きい0.73560.27700.077832,7430.0928
好走時体重履歴あり0.73810.28940.0823121,6830.0997
好走時体重履歴なし0.75490.27370.078116,6890.0931
馬体重発表なし0.65600.29050.0818550.0909

考察

馬体重特徴量は効いたか

全馬体重特徴量を追加すると、AUCが 0.7287 → 0.7405 (+0.0118) と改善しました。

どの特徴量が効いたか

人気なしモデルで最もAUCが高かったのは レース内相対体重 でした。

人気ありモデルとの差

人気ありモデル: AUC 0.8457 → 0.8457 (+0.0000) 人気なしモデル: AUC 0.7287 → 0.7405 (+0.0118)

人気ありモデルでは改善幅が小さく、馬体重情報の一部が人気に織り込まれている可能性があります。

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

AUCが0.55を超えた条件:

  • 好走時体重履歴なし: AUC=0.7549
  • 過去平均より軽い: AUC=0.7502
  • 馬体重増加: AUC=0.7429
  • 馬体重増減なし: AUC=0.7419
  • 好走時体重履歴あり: AUC=0.7381

まとめ

馬体重特徴量を追加することで、1着予測のAUCが +0.0118 改善しました。

馬体重・馬体重増減は発表後に予測する前提の特徴量であり、運用タイミングに注意が必要です。

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