はじめに
今回は馬の「馬場適性」を過去走情報から数値化し、LightGBMの1着予測精度への貢献を検証しました。
「重馬場が得意な馬」「良馬場でしか走らない馬」といった直感的な情報が、実際にモデルの予測精度改善に効くのかをデータで確認します。
今回確認すること
- 過去走の馬場状態情報から馬場適性を数値化できるか
- 馬場適性特徴量を追加するとLightGBMの1着予測AUCが改善するか
- どの馬場適性特徴量が最も効果的か
- 馬場変化の有無で予測精度に差があるか
- 人気ありモデルでも馬場適性特徴量の効果が残るか(人気に既に織り込まれていないか)
馬場適性とは何か
競馬では「馬場適性」という概念があります。良馬場が得意な馬は重馬場では成績が落ちやすく、道悪を得意とする馬は良馬場では力を発揮しきれないと言われます。
今回は「過去走の馬場状態と成績から、今走の馬場適性スコアを作れないか」を検証しました。使用するのは今走の着順・タイム・上がり・着差などの結果情報ではなく、今走前までの過去走履歴のみです。
使用データ
- テーブル:
result_table - 学習期間: 2017-01-01 ~ 2022-12-31 (787,381 件、1着率 0.1000)
- 検証期間: 2023-01-01 ~ 2023-12-31 (136,354 件、1着率 0.0999)
- 評価期間: 2024-01-01 ~ 2024-12-31 (138,372 件、1着率 0.0989)
- 目的変数: 1着予測(
1着)、3着内予測(3着内) - 除外: 帯広(ばんえい)を除外(124,418 件)
馬場状態の定義
DB上の馬場状態とその順序値(going_code)の定義は以下の通りです。
| 馬場状態 | going_code | 分類 | レース数 | 割合 |
|---|---|---|---|---|
| 良 | 0 | dry(良馬場) | 502,922 | 47.4% |
| 稍重 | 1 | wet(道悪) | 214,797 | 20.2% |
| 重 | 2 | wet(道悪) | 189,264 | 17.8% |
| 不良 | 3 | wet(道悪) | 155,124 | 14.6% |
この順序値は簡易的な定義です。競馬場や時期によって馬場の実際の状態は異なるため、数値が大きい=確実に悪い、とは限りません。
作成した馬場適性特徴量
馬場適性を以下の9種類に分けて特徴量化し、それぞれ単独でbaselineに追加して比較しました。
A: baseline
馬場適性なしのベース特徴量のみ(比較の基準)
B: 同馬場成績
今回と同じ馬場状態の過去走における成績(出走数・1着率・3着内率・平均着順・最良着順)
C: 道悪適性
道悪(稍重・重・不良)での過去成績と初道悪フラグ
D: 良vs道悪差
良馬場と道悪の成績差(3着内率差・平均着順差)
E: 馬場変化
前走から今回への馬場状態変化(悪化・回復・同一フラグ)
F: 競馬場×馬場
競馬場×馬場状態の組み合わせでの過去成績
G: 距離帯×馬場
距離帯×馬場状態の組み合わせでの過去成績
H: 直近馬場経験
直近3走・5走における同馬場・道悪経験数
I: 好走馬場差
過去好走時の馬場コード平均と今回馬場コードとの差
ALL: 全馬場適性特徴量
B〜Iのすべての特徴量を同時に追加した組み合わせです。
各特徴量の詳しい定義・入力列・リーク対策は feature_definitions.md に整理しています。
比較方法
- モデル: LightGBM(二値分類、
objective=binary) - 分割: 時系列分割(ランダム分割は使用しない)
- 評価指標: AUC / logloss / Brier score
- 過去走特徴量は必ず
shift(1)後に集計して今走情報のリークを防止 - 人気なしモデルと人気ありモデルの2系統で比較(人気情報に織り込まれた効果と分離するため)
- 各特徴量セットを A_baseline に単独追加し、AUC差分で効果を測定
結果
人気なしモデル:1着予測
人気情報を除外したモデルで、馬場適性特徴量そのものの効果を確認します。
| 特徴量セット | AUC | baseline差分 | logloss | Brier |
|---|---|---|---|---|
| A: baseline | 0.7341 | — | 0.2896 | 0.0823 |
| B: 同馬場成績 | 0.7437 | +0.0096 | 0.2867 | 0.0817 |
| C: 道悪適性 | 0.7455 | +0.0114 | 0.2859 | 0.0815 |
| D: 良vs道悪差 | 0.7445 | +0.0104 | 0.2862 | 0.0816 |
| E: 馬場変化 | 0.7354 | +0.0013 | 0.2893 | 0.0823 |
| F: 競馬場×馬場 | 0.7466 | +0.0125 | 0.2860 | 0.0816 |
| G: 距離帯×馬場 | 0.7430 | +0.0089 | 0.2869 | 0.0817 |
| H: 直近馬場経験 | 0.7364 | +0.0023 | 0.2889 | 0.0821 |
| I: 好走馬場差 | 0.7356 | +0.0015 | 0.2892 | 0.0822 |
| ALL: 全馬場適性特徴量 | 0.7529 | +0.0188 | 0.2837 | 0.0811 |
最良は ALL: 全馬場適性特徴量(AUC 0.7529、baseline比 +0.0188)でした。
人気ありモデル:1着予測
人気情報を含めたモデルで、市場人気に既に織り込まれた効果を差し引いた後の追加改善を確認します。
| 特徴量セット | AUC | baseline差分 | logloss | Brier |
|---|---|---|---|---|
| A: baseline | 0.8460 | — | 0.2438 | 0.0714 |
| B: 同馬場成績 | 0.8463 | +0.0003 | 0.2436 | 0.0714 |
| C: 道悪適性 | 0.8465 | +0.0005 | 0.2434 | 0.0713 |
| D: 良vs道悪差 | 0.8463 | +0.0003 | 0.2436 | 0.0714 |
| E: 馬場変化 | 0.8457 | -0.0003 | 0.2439 | 0.0715 |
| F: 競馬場×馬場 | 0.8462 | +0.0002 | 0.2436 | 0.0714 |
| G: 距離帯×馬場 | 0.8463 | +0.0003 | 0.2437 | 0.0714 |
| H: 直近馬場経験 | 0.8458 | -0.0002 | 0.2439 | 0.0714 |
| I: 好走馬場差 | 0.8460 | +0.0000 | 0.2438 | 0.0714 |
| ALL: 全馬場適性特徴量 | 0.8466 | +0.0006 | 0.2433 | 0.0713 |
最良は ALL: 全馬場適性特徴量(AUC 0.8466、baseline比 +0.0006)でした。
補助検証:3着内予測
1着予測だけでなく、3着内予測でも同じ傾向が出るかを確認します(人気なしモデル)。
| 特徴量セット | AUC | baseline差分 | logloss | Brier |
|---|---|---|---|---|
| A: baseline | 0.7199 | — | 0.5420 | 0.1819 |
| B: 同馬場成績 | 0.7256 | +0.0057 | 0.5383 | 0.1804 |
| C: 道悪適性 | 0.7270 | +0.0071 | 0.5373 | 0.1800 |
| D: 良vs道悪差 | 0.7276 | +0.0077 | 0.5369 | 0.1799 |
| E: 馬場変化 | 0.7201 | +0.0002 | 0.5419 | 0.1818 |
| F: 競馬場×馬場 | 0.7271 | +0.0072 | 0.5374 | 0.1802 |
| G: 距離帯×馬場 | 0.7255 | +0.0056 | 0.5383 | 0.1805 |
| H: 直近馬場経験 | 0.7212 | +0.0013 | 0.5412 | 0.1815 |
| I: 好走馬場差 | 0.7209 | +0.0010 | 0.5413 | 0.1816 |
| ALL: 全馬場適性特徴量 | 0.7332 | +0.0133 | 0.5333 | 0.1786 |
3着内予測での最良は ALL: 全馬場適性特徴量(AUC 0.7332、baseline比 +0.0133)でした。
特徴量重要度
ALL_going_features(人気なし・1着予測)モデルの LightGBM feature importance(gain)上位10件です。
| 順位 | 特徴量 | importance (gain) | 全体比 |
|---|---|---|---|
| 1 | past3_avg_rank | 218,092 | 36.1% |
| 2 | past3_top3_rate | 109,626 | 18.2% |
| 3 | 馬体重 | 30,394 | 5.0% |
| 4 | 同走馬の数 | 27,954 | 4.6% |
| 5 | same_place_same_going_avg_rank | 25,377 | 4.2% |
| 6 | wet_runs | 22,167 | 3.7% |
| 7 | wet_win_rate | 19,037 | 3.2% |
| 8 | wet_avg_rank | 16,877 | 2.8% |
| 9 | 距離 | 15,807 | 2.6% |
| 10 | dry_avg_rank | 15,612 | 2.6% |
条件別分析
ALL_going_features(人気なし・1着予測)モデルの評価期間予測を、条件別にAUCで比較しました。
| 条件 | サンプル数 | AUC | logloss |
|---|---|---|---|
| 馬場状態_良 | 68,380 | 0.7537 | 0.2847 |
| 馬場状態_稍重 | 28,903 | 0.7570 | 0.2808 |
| 馬場状態_重 | 22,645 | 0.7435 | 0.2860 |
| 馬場状態_不良 | 18,444 | 0.7550 | 0.2819 |
| 良馬場 | 68,380 | 0.7537 | 0.2847 |
| 道悪 | 69,992 | 0.7521 | 0.2828 |
| 同馬場経験あり | 120,049 | 0.7518 | 0.2662 |
| 同馬場経験なし | 18,323 | 0.7094 | 0.3983 |
| 道悪経験あり | 127,377 | 0.7525 | 0.2716 |
| 道悪経験なし | 10,995 | 0.6877 | 0.4246 |
| 馬場悪化 | 41,183 | 0.7514 | 0.2766 |
| 馬場回復 | 42,660 | 0.7542 | 0.2788 |
| 前走と同じ馬場 | 49,227 | 0.7583 | 0.2755 |
| 競馬場×馬場経験あり | 104,363 | 0.7564 | 0.2572 |
| 競馬場×馬場経験なし | 34,009 | 0.7158 | 0.3650 |
条件別AUCは、条件ごとの難易度差が含まれるため、数値の大小だけで馬場適性特徴量の効果を断定することはできません。サンプル数が少ない条件(重・不良)では特に注意が必要です。
考察
馬場適性特徴量は効いたか
人気なしモデルでは最良で AUC +0.0188 の改善が見られました。馬場適性特徴量には一定の予測貢献があると考えられます。
人気ありモデルとの差
人気ありモデルでの追加改善は AUC +0.0006 と小さく、馬場適性の多くは既に市場人気に織り込まれている可能性があります。
人気なしモデルの改善幅(+0.0188)と比較すると、人気情報の追加によって馬場適性の追加効果は縮小したと言えます。
どの馬場適性特徴量が効いたか
人気なしモデルで最も効いたのは ALL: 全馬場適性特徴量 でした。
条件別に見て効きやすかったところ
評価期間の条件別AUCでは 前走と同じ馬場(AUC 0.7583)が最も高く、道悪経験なし(AUC 0.6877)が最も低い結果でした。
条件によってモデルの予測しやすさに差があり、馬場変化や未経験馬場では予測が難しくなる可能性があります。
まとめ
馬場適性特徴量を9種類作成し、LightGBMベースラインへの追加効果を検証しました。人気なしモデルでは最良で AUC 0.7341 → 0.7529(+0.0188)の改善が得られました。
馬場適性の効果は特徴量の種類・条件によって差がありました。今回のデータの範囲では、D: 良vs道悪差が最も有望な追加特徴量でした。

