競馬AI開発メモ:波乱レースを重く学習するとAIは荒れるレースに強くなるのか?

競馬AI開発

はじめに

前回の記事では、人気薄で好走した「馬単体」を sample_weight で重く学習し、穴馬の予測精度やキャリブレーションがどう変わるかを検証しました。

今回はその続編として、馬単体ではなく「波乱レースそのもの」をレース単位で重く学習する方法を検証します。人気薄が勝つ理由は、その馬だけではなく、レース全体の構造にある可能性があります。

前回記事との違い

前回 (longshot_weight_learning)今回 (upset_race_weight_learning)
重み付け単位馬単体 (1着馬のみ)レース単位 (全出走馬)
重くする対象人気薄/高オッズの1着馬波乱レースに出走した全馬
波乱定義1種類 (1着馬≠1番人気)8種類 (U1-U8)
対象馬数少ない (1着馬のみ)多い (レース全馬)

なぜレース単位で重み付けするのか

前回の「馬単体重み付け」では、人気薄で勝った馬だけを重くしました。しかし、波乱の原因はその馬だけでなく、レース全体にある可能性があります。

  • 人気馬が過大評価されていた
  • 上位人気が崩れた
  • 人気順そのものが機能しにくいレースだった
  • 混戦度が高かった
  • 高オッズ馬が勝った
  • 人気と着順の対応が崩れた

レース単位で重み付けすれば、波乱レースに出走した人気馬 (負けた側) も重く学習されるため、「なぜ人気馬が負けたのか」をモデルが学習しやすくなる可能性があります。

今回確認すること

  • 波乱レースをレース単位で重く学習すると、荒れるレースでの予測性能は上がるか
  • 全体 AUC / logloss / Brier はどう変わるか
  • NDCG@3 は改善するか
  • 人気順 NDCG との差分は改善するか
  • 単勝シミュレーションのROIは改善するか
  • 最大DD・最大連敗は悪化しないか
  • EV候補の予測勝率と実勝率の gap は縮むか
  • 高オッズ帯の calibration gap は改善するか、悪化するか
  • 人気ありモデル / 人気なしモデルで結果が変わるか
  • 波乱レース定義ごとに結果がどう変わるか

使用データ

  • テーブル: result_table
  • 学習期間: 2017〜2022 年 (787,381 件)
  • 検証期間: 2023〜2023 年 (136,354 件, early stopping / unweighted)
  • 評価期間: 2024〜2024 年 (138,372 件, レース数 13,677)
  • 帯広 (ばんえい競馬) は除外 (124,418 行)

波乱レースの定義

今回は以下の8種類の波乱レース定義を比較します。

定義条件
U1: favorite_lost_race1番人気が勝てなかったレース (1着馬の人気 != 1)
U2: longshot_win_race_66番人気以下の馬が勝ったレース
U3: longshot_win_race_88番人気以下の馬が勝ったレース
U4: high_odds_win_race_10単勝10倍以上の馬が勝ったレース
U5: high_odds_win_race_20単勝20倍以上の馬が勝ったレース
U6: low_popularity_ndcg_race人気順NDCG@3 <= 0.50 のレース
U7: popularity_order_broken1番人気が3着外、または1-3番人気が誰も3着内に入らない
U8: combined_upset_raceU1 or U2 or U4 or U6 の複合

人気順NDCG@3の分布 (train)

統計量
平均0.6455
中央値0.7453
25%点0.4398
10%点0.2015
最小値0.0000
最大値1.0000
しきい値 (U6)0.5000
しきい値以下の割合31.17%

学習重みの作り方

  • ベースは全サンプル weight = 1.0
  • 波乱レースに含まれる全出走馬の weight = 倍率
  • 1着馬だけではなく、そのレースの全出走馬を重くする
  • 重み設計は train データの結果情報のみを使用。valid / test の結果は重み設計にもハイパラ調整にも使わない
  • valid の early stopping は unweighted (sample_weight を渡さない)
  • 確定オッズ (単勝) は学習特徴量には使わず、sample_weight の作成と評価にのみ使用

比較するモデル

以下の優先バリアントを、「人気なしモデル」と「人気ありモデル」の両方で学習しました。

  • A_baseline: 通常学習 (全 weight = 1.0)
  • B_favorite_lost_race: U1 波乱レース x1.5 / x2.0
  • C_longshot_win_race_6: U2 波乱レース x1.5 / x2.0 / x3.0
  • E_high_odds_win_race_10: U4 波乱レース x1.5 / x2.0 / x3.0
  • G_low_pop_ndcg_race: U6 波乱レース x1.5 / x2.0
  • I_combined_upset_race: U8 複合定義 x2.0

モデルはすべて LightGBM 二値分類 (1着 = 1, それ以外 = 0)。ハイパーパラメータは全モデル共通です。

評価指標

AUC / logloss / Brier

通常の分類評価指標。

NDCG

  • model_ndcg@1 / model_ndcg@3 / model_ndcg@5
  • popularity_ndcg@1 / popularity_ndcg@3 / popularity_ndcg@5
  • delta_ndcg@3 (= model_ndcg@3 – popularity_ndcg@3)
  • 人気順に勝ったレース率 / 負けたレース率 / tie率

単勝シミュレーション

各レースで予測1位を1頭選び、単勝100円を購入したと仮定。 ベット数 / 的中数 / 的中率 / 投資額 / 払戻額 / 回収率 / 最大DD / 最大連敗。

EV候補評価

EV = 予測勝率 x 単勝オッズ。閾値 1.0 / 1.1 / 1.2 で候補数・calibration gap・回収率。

オッズ帯別キャリブレーション

1.0-1.9 / 2.0-2.9 / 3.0-4.9 / 5.0-9.9 / 10.0-19.9 / 20.0-49.9 / 50.0+。

人気帯別キャリブレーション

1 / 2-3 / 4-5 / 6-9 / 10+。

条件別評価

全レース / 順当レース / 波乱レース各種で AUC / NDCG@3 / ROI / calibration gap を比較。

結果

波乱レース定義の出現率

表1: 波乱レース定義の出現率 (train / valid / test)

定義train レース数train 割合valid レース数valid 割合test レース数test 割合該当レース内の出走馬数(train)
U1: 1番人気が負けたレース43,58655.44%7,54355.43%7,52655.03%442,966
U2: 6番人気以下が勝ったレース7,1939.15%1,2379.09%1,2359.03%78,305
U3: 8番人気以下が勝ったレース2,5583.25%4313.17%4163.04%29,521
U4: 単勝10倍以上が勝ったレース12,37815.74%2,14215.74%2,08215.22%130,354
U5: 単勝20倍以上が勝ったレース5,2676.70%8636.34%9006.58%55,985
U6: 人気順NDCG@3<=0.50のレース24,51031.17%4,16130.58%4,13130.20%256,264
U7a: 1番人気が3着外18,72623.82%3,19123.45%3,21123.48%195,636
U7b: 1-3番人気が全員3着外2,1452.73%3902.87%3802.78%24,078
U7: 人気と着順が崩れたレース18,72623.82%3,19123.45%3,21123.48%195,636
U8: 複合 (U1 or U2 or U4 or U6)43,58855.44%7,54355.43%7,52655.03%442,985

通常指標

表2-a: 通常指標 (人気なしモデル)

バリアント件数正例率AUCloglossBrier重み対象行数
A_baseline (重み=1)138,3720.09890.73590.28910.08220
B_favorite_lost x1.5138,3720.09890.73490.28970.0824442,966
B_favorite_lost x2.0138,3720.09890.73390.29060.0826442,966
C_longshot6 x1.5138,3720.09890.73530.28940.082278,305
C_longshot6 x2.0138,3720.09890.73480.28980.082378,305
C_longshot6 x3.0138,3720.09890.73310.29110.082678,305
E_odds10 x1.5138,3720.09890.73510.28940.0823130,354
E_odds10 x2.0138,3720.09890.73450.29020.0824130,354
E_odds10 x3.0138,3720.09890.73230.29220.0828130,354
G_low_ndcg x1.5138,3720.09890.73480.28970.0823256,264
G_low_ndcg x2.0138,3720.09890.73400.29060.0826256,264
I_combined x2.0138,3720.09890.73350.29060.0826442,985

表2-b: 通常指標 (人気ありモデル)

バリアント件数正例率AUCloglossBrier重み対象行数
A_baseline (重み=1)138,3720.09890.84590.24380.07150
B_favorite_lost x1.5138,3720.09890.84530.24720.0727442,966
B_favorite_lost x2.0138,3720.09890.83830.25230.0747442,966
C_longshot6 x1.5138,3720.09890.84520.24470.071578,305
C_longshot6 x2.0138,3720.09890.84370.24750.071978,305
C_longshot6 x3.0138,3720.09890.83400.25130.072778,305
E_odds10 x1.5138,3720.09890.84580.24520.0717130,354
E_odds10 x2.0138,3720.09890.84520.24760.0722130,354
E_odds10 x3.0138,3720.09890.84080.25580.0740130,354
G_low_ndcg x1.5138,3720.09890.84550.24650.0721256,264
G_low_ndcg x2.0138,3720.09890.84450.24960.0730256,264
I_combined x2.0138,3720.09890.83850.25230.0747442,985

NDCG比較

表3-a: NDCG (人気なしモデル)

バリアントmodel_ndcg@1model_ndcg@3model_ndcg@5popularity_ndcg@3delta_ndcg@3人気順に勝ったレース率
A_baseline (重み=1)0.40530.51190.60800.6486-0.136723.40%
B_favorite_lost x1.50.40130.51010.60690.6486-0.138523.35%
B_favorite_lost x2.00.40130.51020.60680.6486-0.138323.33%
C_longshot6 x1.50.40150.51040.60660.6486-0.138223.29%
C_longshot6 x2.00.40150.51060.60650.6486-0.138023.29%
C_longshot6 x3.00.40220.50960.60530.6486-0.138923.27%
E_odds10 x1.50.40260.51110.60710.6486-0.137523.49%
E_odds10 x2.00.40230.51100.60700.6486-0.137523.57%
E_odds10 x3.00.40090.50850.60560.6486-0.140123.14%
G_low_ndcg x1.50.40300.51040.60650.6486-0.138223.56%
G_low_ndcg x2.00.40140.50990.60610.6486-0.138723.47%
I_combined x2.00.40020.50830.60520.6486-0.140223.38%

表3-b: NDCG (人気ありモデル)

バリアントmodel_ndcg@1model_ndcg@3model_ndcg@5popularity_ndcg@3delta_ndcg@3人気順に勝ったレース率
A_baseline (重み=1)0.55290.64790.73030.6486-0.00070.96%
B_favorite_lost x1.50.55060.64760.72950.6486-0.00101.32%
B_favorite_lost x2.00.49430.63160.71390.6486-0.017011.74%
C_longshot6 x1.50.55300.64790.72710.6486-0.00060.78%
C_longshot6 x2.00.55300.64830.72370.6486-0.00030.23%
C_longshot6 x3.00.55300.63930.71020.6486-0.00933.90%
E_odds10 x1.50.55300.64730.72980.6486-0.00131.49%
E_odds10 x2.00.55290.64670.72930.6486-0.00194.04%
E_odds10 x3.00.55290.63610.72600.6486-0.012514.67%
G_low_ndcg x1.50.55300.64670.73020.6486-0.00194.05%
G_low_ndcg x2.00.55290.64220.72950.6486-0.006412.11%
I_combined x2.00.49460.63190.71420.6486-0.016711.78%

単勝シミュレーション

表4-a: 単勝シミュレーション (人気なしモデル / モデル予測1位)

バリアントベット数的中数的中率投資額払戻額回収率最大DD最大連敗
A_baseline (重み=1)13,6774,22430.88%1,367,700円1028250円0.7518340330円28
B_favorite_lost x1.513,6774,18730.61%1,367,700円1043270円0.7628324730円24
B_favorite_lost x2.013,6774,17030.49%1,367,700円1028450円0.7520340530円24
C_longshot6 x1.513,6774,18530.60%1,367,700円1018810円0.7449349420円24
C_longshot6 x2.013,6774,17430.52%1,367,700円1020660円0.7463347990円24
C_longshot6 x3.013,6774,20530.75%1,367,700円1018740円0.7449351810円30
E_odds10 x1.513,6774,20130.72%1,367,700円1042560円0.7623326870円30
E_odds10 x2.013,6774,19630.68%1,367,700円1035000円0.7567334460円26
E_odds10 x3.013,6774,18530.60%1,367,700円1029110円0.7524341170円24
G_low_ndcg x1.513,6774,21030.78%1,367,700円1033770円0.7558336380円28
G_low_ndcg x2.013,6774,18430.59%1,367,700円1030640円0.7536338440円26
I_combined x2.013,6774,14830.33%1,367,700円1008490円0.7374362020円23

表4-b: 単勝シミュレーション (人気ありモデル / モデル予測1位)

バリアントベット数的中数的中率投資額払戻額回収率最大DD最大連敗
A_baseline (重み=1)13,6776,15044.97%1,367,700円1107130円0.8095260730円14
B_favorite_lost x1.513,6776,11444.70%1,367,700円1109070円0.8109259010円14
B_favorite_lost x2.013,6775,32538.93%1,367,700円1106410円0.8090263000円17
C_longshot6 x1.513,6776,15144.97%1,367,700円1107270円0.8096260590円14
C_longshot6 x2.013,6776,15144.97%1,367,700円1106900円0.8093260960円14
C_longshot6 x3.013,6776,15144.97%1,367,700円1106900円0.8093260960円14
E_odds10 x1.513,6776,15144.97%1,367,700円1107300円0.8096260560円14
E_odds10 x2.013,6776,15044.97%1,367,700円1106760円0.8092261100円14
E_odds10 x3.013,6776,15044.97%1,367,700円1106760円0.8092261100円14
G_low_ndcg x1.513,6776,15144.97%1,367,700円1107200円0.8095260660円14
G_low_ndcg x2.013,6776,15044.97%1,367,700円1108390円0.8104259470円14
I_combined x2.013,6775,33439.00%1,367,700円1109660円0.8113258860円17

表4-c: 単勝シミュレーション (人気なしモデル / 予測1位 & オッズ>=10.0)

バリアントベット数的中数的中率投資額払戻額回収率最大DD最大連敗
A_baseline (重み=1)1,599543.38%159,900円111220円0.695657220円141
B_favorite_lost x1.51,687613.62%168,700円125420円0.743455970円142
B_favorite_lost x2.01,690563.31%169,000円116170円0.687458320円157
C_longshot6 x1.51,654553.33%165,400円114130円0.690060520円90
C_longshot6 x2.01,656553.32%165,600円115100円0.695054280円111
C_longshot6 x3.01,670573.41%167,000円105390円0.631166450円113
E_odds10 x1.51,655603.63%165,500円128720円0.777848240円93
E_odds10 x2.01,700603.53%170,000円123980円0.729351030円91
E_odds10 x3.01,725583.36%172,500円121470円0.704258190円146
G_low_ndcg x1.51,689563.32%168,900円112940円0.668766420円151
G_low_ndcg x2.01,703553.23%170,300円112670円0.661666340円146
I_combined x2.01,699563.30%169,900円101330円0.596472310円158

表4-d: 単勝シミュレーション (人気ありモデル / 予測1位 & オッズ>=10.0)

バリアントベット数的中数的中率投資額払戻額回収率最大DD最大連敗
A_baseline (重み=1)100.00%100円0円0.00000円1
B_favorite_lost x1.5100.00%100円0円0.00000円1
B_favorite_lost x2.03126.45%3,100円2120円0.68391900円20
C_longshot6 x1.5100.00%100円0円0.00000円1
C_longshot6 x2.0100.00%100円0円0.00000円1
C_longshot6 x3.0100.00%100円0円0.00000円1
E_odds10 x1.5100.00%100円0円0.00000円1
E_odds10 x2.0100.00%100円0円0.00000円1
E_odds10 x3.0100.00%100円0円0.00000円1
G_low_ndcg x1.5100.00%100円0円0.00000円1
G_low_ndcg x2.0100.00%100円0円0.00000円1
I_combined x2.03226.25%3,200円2120円0.66251800円19

EV候補評価

表5-a: EV>=1.0 候補 (人気なしモデル)

バリアント件数予測勝率実勝率calibration gap平均オッズ単勝回収率
A_baseline (重み=1)84,0830.08920.02850.060785.610.6213
B_favorite_lost x1.585,7770.08820.02770.060584.690.6273
B_favorite_lost x2.087,0580.08750.02690.060684.200.6248
C_longshot6 x1.585,2140.08830.02790.060485.080.6266
C_longshot6 x2.086,5050.08780.02740.060484.600.6284
C_longshot6 x3.087,7050.08720.02640.060884.070.6295
E_odds10 x1.585,6550.08790.02750.060484.920.6260
E_odds10 x2.087,0650.08740.02680.060684.280.6270
E_odds10 x3.088,5500.08700.02590.061183.580.6328
G_low_ndcg x1.585,9140.08800.02750.060584.700.6291
G_low_ndcg x2.087,4200.08740.02660.060784.070.6266
I_combined x2.086,8080.08780.02720.060684.220.6297

表5-b: EV>=1.0 候補 (人気ありモデル)

バリアント件数予測勝率実勝率calibration gap平均オッズ単勝回収率
A_baseline (重み=1)53,0500.08050.04610.034593.750.5890
B_favorite_lost x1.567,1550.06660.03460.032092.550.5981
B_favorite_lost x2.070,3280.07600.03830.037783.900.6189
C_longshot6 x1.564,9430.06610.03630.029893.920.6218
C_longshot6 x2.076,4660.05770.02810.029692.950.6147
C_longshot6 x3.077,4780.06070.02630.034491.950.6271
E_odds10 x1.569,3240.06190.03330.028694.070.6147
E_odds10 x2.076,7780.05870.02880.030090.020.6188
E_odds10 x3.086,5160.06080.02480.036085.280.6348
G_low_ndcg x1.572,6920.05960.03040.029192.820.6065
G_low_ndcg x2.076,9090.06200.02990.032187.480.6238
I_combined x2.070,4800.07580.03860.037284.050.6258

表5-c: EV>=1.1 候補 (人気なしモデル)

バリアント件数予測勝率実勝率calibration gap平均オッズ単勝回収率
A_baseline (重み=1)79,9260.08800.02600.062089.020.6181
B_favorite_lost x1.581,7540.08710.02510.061987.960.6176
B_favorite_lost x2.083,2510.08640.02430.062187.330.6175
C_longshot6 x1.581,1870.08730.02550.061788.350.6169
C_longshot6 x2.082,5230.08660.02480.061787.890.6233
C_longshot6 x3.083,9290.08610.02400.062187.200.6228
E_odds10 x1.581,6550.08680.02520.061788.160.6197
E_odds10 x2.083,2290.08620.02460.061687.460.6238
E_odds10 x3.084,8800.08600.02340.062686.600.6246
G_low_ndcg x1.581,9920.08690.02510.061887.910.6214
G_low_ndcg x2.083,5860.08630.02430.061987.230.6222
I_combined x2.082,9280.08670.02450.062287.370.6196

表5-d: EV>=1.2 候補 (人気なしモデル)

バリアント件数予測勝率実勝率calibration gap平均オッズ単勝回収率
A_baseline (重み=1)76,1500.08690.02360.063392.300.6086
B_favorite_lost x1.578,1380.08610.02290.063291.070.6138
B_favorite_lost x2.079,7480.08560.02240.063290.360.6138
C_longshot6 x1.577,5300.08620.02340.062891.540.6130
C_longshot6 x2.078,9770.08540.02260.062991.020.6136
C_longshot6 x3.080,4930.08510.02210.063090.230.6206
E_odds10 x1.578,0090.08580.02300.062791.340.6162
E_odds10 x2.079,6730.08520.02220.062990.580.6154
E_odds10 x3.081,5360.08510.02140.063789.540.6196
G_low_ndcg x1.578,2970.08580.02260.063291.110.6111
G_low_ndcg x2.080,2010.08530.02220.063190.180.6154
I_combined x2.079,3430.08580.02230.063590.460.6116

表5-e: EV>=1.2 候補 (人気ありモデル)

バリアント件数予測勝率実勝率calibration gap平均オッズ単勝回収率
A_baseline (重み=1)37,2000.06520.03090.0344109.950.5619
B_favorite_lost x1.550,8460.05670.02300.0337108.660.5540
B_favorite_lost x2.053,5260.06810.02830.039896.170.5948
C_longshot6 x1.549,9960.05270.02340.0293108.650.5990
C_longshot6 x2.064,2890.04690.01790.0291106.050.5898
C_longshot6 x3.067,5770.05320.01820.0350101.540.6128
E_odds10 x1.554,2500.04950.02060.0289109.630.5702
E_odds10 x2.063,2730.04980.01910.0308102.390.5907
E_odds10 x3.077,2210.05630.01910.037293.500.6197
G_low_ndcg x1.557,8260.04950.01960.0300108.270.5604
G_low_ndcg x2.062,3920.05540.02160.033899.520.5982
I_combined x2.053,6710.06780.02830.039596.460.6073

オッズ帯別キャリブレーション

表6-a: オッズ帯別 calibration_gap 比較 (人気なしモデル)

※ 各セルは 予測勝率 - 実勝率 (オッズ帯別)。正なら過大評価、負なら過小評価。

バリアント1.0-1.92.0-2.93.0-4.95.0-9.910.0-19.920.0-49.950.0+
A_baseline (重み=1)-0.3275-0.1401-0.05040.00690.04140.05170.0427
B_favorite_lost x1.5-0.3464-0.1489-0.05470.00660.04340.05500.0462
B_favorite_lost x2.0-0.3606-0.1555-0.05800.00620.04470.05730.0491
C_longshot6 x1.5-0.3337-0.1445-0.05340.00560.04150.05310.0454
C_longshot6 x2.0-0.3403-0.1486-0.05600.00470.04200.05460.0482
C_longshot6 x3.0-0.3526-0.1566-0.06120.00250.04210.05690.0528
E_odds10 x1.5-0.3383-0.1468-0.05470.00550.04190.05380.0463
E_odds10 x2.0-0.3492-0.1530-0.05850.00420.04280.05620.0499
E_odds10 x3.0-0.3681-0.1642-0.06520.00190.04360.05940.0555
G_low_ndcg x1.5-0.3428-0.1487-0.05530.00570.04270.05480.0468
G_low_ndcg x2.0-0.3567-0.1559-0.05940.00480.04390.05740.0505
I_combined x2.0-0.3595-0.1551-0.05780.00630.04460.05710.0487

表6-b: オッズ帯別 calibration_gap 比較 (人気ありモデル)

※ 各セルは 予測勝率 - 実勝率 (オッズ帯別)。正なら過大評価、負なら過小評価。

バリアント1.0-1.92.0-2.93.0-4.95.0-9.910.0-19.920.0-49.950.0+
A_baseline (重み=1)-0.10340.0274-0.0007-0.00270.00640.00830.0075
B_favorite_lost x1.5-0.2017-0.02180.01700.01560.01710.01440.0104
B_favorite_lost x2.0-0.2628-0.04860.02930.02760.02360.01750.0107
C_longshot6 x1.5-0.12120.0121-0.0101-0.00760.00880.01600.0123
C_longshot6 x2.0-0.1479-0.0088-0.0211-0.01210.01190.02450.0197
C_longshot6 x3.0-0.1669-0.0265-0.0332-0.01910.01480.03500.0248
E_odds10 x1.5-0.13700.0010-0.0154-0.00400.01500.01830.0128
E_odds10 x2.0-0.1641-0.0205-0.0269-0.00490.02220.02650.0167
E_odds10 x3.0-0.2236-0.0657-0.0497-0.00650.03440.04130.0274
G_low_ndcg x1.5-0.1670-0.0196-0.01450.00670.02100.01890.0132
G_low_ndcg x2.0-0.2048-0.0477-0.02200.01470.03160.02530.0144
I_combined x2.0-0.2627-0.04880.02910.02750.02370.01760.0108

参考: A_baseline (人気なしモデル) のオッズ帯別 詳細

オッズ帯件数予測勝率実勝率calibration gaploglossBrier単勝回収率(帯全体)
1.0-1.97,2110.24080.5683-0.32750.99230.35770.8236
2.0-2.97,8630.18300.3230-0.14010.73930.24680.7754
3.0-4.912,8600.15150.2019-0.05040.55680.17270.7657
5.0-9.920,6800.12120.11430.00690.38360.10750.7851
10.0-19.920,8490.09810.05670.04140.24440.05950.7832
20.0-49.927,0770.07730.02560.05170.15210.03050.7880
50.0+41,8320.04770.00500.04270.06510.00820.4821

人気帯別キャリブレーション

表7-a: 人気帯別 calibration_gap 比較 (人気なしモデル)

※ 各セルは 予測勝率 - 実勝率 (人気帯別)。正なら過大評価、負なら過小評価。

バリアント12-34-56-910+
A_baseline (重み=1)-0.2442-0.01880.03800.04500.0324
B_favorite_lost x1.5-0.2575-0.02210.03970.04840.0356
B_favorite_lost x2.0-0.2674-0.02470.04080.05100.0384
C_longshot6 x1.5-0.2494-0.02130.03780.04680.0356
C_longshot6 x2.0-0.2547-0.02350.03800.04880.0387
C_longshot6 x3.0-0.2645-0.02780.03770.05180.0436
E_odds10 x1.5-0.2528-0.02230.03820.04770.0362
E_odds10 x2.0-0.2610-0.02540.03870.05050.0399
E_odds10 x3.0-0.2754-0.03110.03910.05470.0455
G_low_ndcg x1.5-0.2557-0.02270.03900.04850.0365
G_low_ndcg x2.0-0.2659-0.02600.03980.05160.0399
I_combined x2.0-0.2668-0.02450.04070.05080.0379

表7-b: 人気帯別 calibration_gap 比較 (人気ありモデル)

※ 各セルは 予測勝率 - 実勝率 (人気帯別)。正なら過大評価、負なら過小評価。

バリアント12-34-56-910+
A_baseline (重み=1)-0.00640.00020.00320.00080.0015
B_favorite_lost x1.5-0.10320.02810.01500.00530.0033
B_favorite_lost x2.0-0.16120.04650.02240.00690.0031
C_longshot6 x1.5-0.0254-0.00700.00010.01040.0041
C_longshot6 x2.0-0.0521-0.0154-0.00050.02060.0098
C_longshot6 x3.0-0.0727-0.0253-0.00580.03370.0110
E_odds10 x1.5-0.0398-0.01070.01230.00970.0048
E_odds10 x2.0-0.0667-0.01920.01990.01700.0068
E_odds10 x3.0-0.1243-0.03580.03340.03100.0150
G_low_ndcg x1.5-0.0708-0.00480.02330.00900.0055
G_low_ndcg x2.0-0.1094-0.00670.03860.01270.0052
I_combined x2.0-0.16120.04630.02240.00700.0031

条件別評価

表8: 条件別評価 (人気なしモデル, 主要バリアント)

条件バリアントレース数AUCNDCG@3delta_ndcg@3単勝ROIEV>=1.0 gapodds>=10帯 gap
全レースA_baseline (重み=1)13,6770.73590.5119-0.13670.75180.06070.0414
1番人気が勝ったレースA_baseline (重み=1)6,1510.84730.6477-0.22640.85040.08880.1035
1番人気が負けたレースA_baseline (重み=1)7,5260.64450.4009-0.06330.67130.0361-0.0065
6番人気以下が勝ったレースA_baseline (重み=1)1,2350.45480.21560.02670.6456-0.0322-0.0790
単勝10倍以上が勝ったレースA_baseline (重み=1)2,0820.49560.25100.01980.5342-0.0223-0.1868
人気順NDCG@3が低いレースA_baseline (重み=1)4,1310.57870.30210.03200.61810.0124-0.0637
人気順NDCG@3が高いレースA_baseline (重み=1)4,6270.83970.6698-0.24760.82620.08870.1063
全レースC_longshot6 x2.013,6770.73480.5106-0.13800.74630.06040.0420
1番人気が勝ったレースC_longshot6 x2.06,1510.84560.6456-0.22850.83710.08820.1037
1番人気が負けたレースC_longshot6 x2.07,5260.64380.4003-0.06390.67210.0362-0.0056
6番人気以下が勝ったレースC_longshot6 x2.01,2350.45620.21700.02810.7047-0.0390-0.0776
単勝10倍以上が勝ったレースC_longshot6 x2.02,0820.49770.25280.02160.5528-0.0277-0.1859
人気順NDCG@3が低いレースC_longshot6 x2.04,1310.57870.30150.03140.61090.0108-0.0625
人気順NDCG@3が高いレースC_longshot6 x2.04,6270.83780.6680-0.24950.81910.08810.1063
全レースE_odds10 x2.013,6770.73450.5110-0.13750.75670.06060.0428
1番人気が勝ったレースE_odds10 x2.06,1510.84460.6462-0.22790.84200.08820.1043
1番人気が負けたレースE_odds10 x2.07,5260.64430.4006-0.06370.68700.0366-0.0046
6番人気以下が勝ったレースE_odds10 x2.01,2350.45750.21690.02800.7432-0.0403-0.0767
単勝10倍以上が勝ったレースE_odds10 x2.02,0820.49930.25290.02170.5955-0.0293-0.1850
人気順NDCG@3が低いレースE_odds10 x2.04,1310.57970.30300.03300.63740.0102-0.0615
人気順NDCG@3が高いレースE_odds10 x2.04,6270.83700.6680-0.24950.82690.08840.1069
全レースG_low_ndcg x2.013,6770.73400.5099-0.13870.75360.06070.0439
1番人気が勝ったレースG_low_ndcg x2.06,1510.84280.6437-0.23040.83690.08830.1054
1番人気が負けたレースG_low_ndcg x2.07,5260.64480.4005-0.06370.68550.0369-0.0035
6番人気以下が勝ったレースG_low_ndcg x2.01,2350.45900.21530.02640.6589-0.0400-0.0758
単勝10倍以上が勝ったレースG_low_ndcg x2.02,0820.50070.25200.02070.5412-0.0301-0.1839
人気順NDCG@3が低いレースG_low_ndcg x2.04,1310.58080.30270.03260.63010.0098-0.0604
人気順NDCG@3が高いレースG_low_ndcg x2.04,6270.83510.6664-0.25100.82460.08860.1079
全レースI_combined x2.013,6770.73350.5083-0.14020.73740.06060.0446
1番人気が勝ったレースI_combined x2.06,1510.84230.6410-0.23320.82580.08870.1063
1番人気が負けたレースI_combined x2.07,5260.64450.3999-0.06430.66510.0362-0.0029
6番人気以下が勝ったレースI_combined x2.01,2350.45720.21800.02910.5645-0.0378-0.0753
単勝10倍以上が勝ったレースI_combined x2.02,0820.49970.25710.02590.4867-0.0284-0.1833
人気順NDCG@3が低いレースI_combined x2.04,1310.58000.30410.03400.59040.0092-0.0600
人気順NDCG@3が高いレースI_combined x2.04,6270.83440.6635-0.25400.81180.08880.1089

表8-b: 条件別評価 (人気ありモデル, 主要バリアント)

条件バリアントレース数AUCNDCG@3delta_ndcg@3単勝ROIEV>=1.0 gapodds>=10帯 gap
全レースA_baseline (重み=1)13,6770.84590.6479-0.00070.80950.03450.0064
1番人気が勝ったレースA_baseline (重み=1)6,1510.99980.8739-0.00021.79900.02780.0709
1番人気が負けたレースA_baseline (重み=1)7,5260.71840.4631-0.00110.00070.0414-0.0433
6番人気以下が勝ったレースA_baseline (重み=1)1,2350.36700.1880-0.00090.00000.0351-0.1144
単勝10倍以上が勝ったレースA_baseline (重み=1)2,0820.47940.23140.00020.0000-0.0088-0.2183
人気順NDCG@3が低いレースA_baseline (重み=1)4,1310.60730.27140.00130.00000.0393-0.1003
人気順NDCG@3が高いレースA_baseline (重み=1)4,6270.99120.9167-0.00071.63110.02990.0723
全レースC_longshot6 x2.013,6770.84370.6483-0.00030.80930.02960.0119
1番人気が勝ったレースC_longshot6 x2.06,1510.99980.8740-0.00011.79950.03740.0732
1番人気が負けたレースC_longshot6 x2.07,5260.71460.4638-0.00050.00000.0224-0.0353
6番人気以下が勝ったレースC_longshot6 x2.01,2350.42010.18950.00060.0000-0.0636-0.1035
単勝10倍以上が勝ったレースC_longshot6 x2.02,0820.47910.23180.00060.0000-0.0443-0.2118
人気順NDCG@3が低いレースC_longshot6 x2.04,1310.59840.27030.00020.00000.0060-0.0904
人気順NDCG@3が高いレースC_longshot6 x2.04,6270.99110.9172-0.00031.63140.03850.0737
全レースE_odds10 x2.013,6770.84520.6467-0.00190.80920.03000.0222
1番人気が勝ったレースE_odds10 x2.06,1510.99980.8730-0.00111.79930.04300.0843
1番人気が負けたレースE_odds10 x2.07,5260.71770.4618-0.00240.00000.0177-0.0257
6番人気以下が勝ったレースE_odds10 x2.01,2350.37500.1875-0.00140.0000-0.0504-0.0963
単勝10倍以上が勝ったレースE_odds10 x2.02,0820.48560.23740.00620.0000-0.0587-0.2021
人気順NDCG@3が低いレースE_odds10 x2.04,1310.60900.27740.00730.0000-0.0052-0.0818
人気順NDCG@3が高いレースE_odds10 x2.04,6270.99120.9129-0.00461.63140.04410.0854
全レースG_low_ndcg x2.013,6770.84450.6422-0.00640.81040.03210.0316
1番人気が勝ったレースG_low_ndcg x2.06,1510.99930.8703-0.00391.79680.05630.0969
1番人気が負けたレースG_low_ndcg x2.07,5260.71670.4559-0.00840.00420.0089-0.0188
6番人気以下が勝ったレースG_low_ndcg x2.01,2350.36990.1866-0.00230.0000-0.0330-0.0924
単勝10倍以上が勝ったレースG_low_ndcg x2.02,0820.48590.24550.01430.0000-0.0538-0.1942
人気順NDCG@3が低いレースG_low_ndcg x2.04,1310.61500.29220.02210.0010-0.0187-0.0770
人気順NDCG@3が高いレースG_low_ndcg x2.04,6270.99060.9034-0.01401.62940.05590.0993
全レースI_combined x2.013,6770.83850.6319-0.01670.81130.03720.0237
1番人気が勝ったレースI_combined x2.06,1510.96190.8068-0.06731.22740.07500.0907
1番人気が負けたレースI_combined x2.07,5260.73630.48900.02470.4713-0.0008-0.0279
6番人気以下が勝ったレースI_combined x2.01,2350.36910.1841-0.00480.00000.0003-0.1007
単勝10倍以上が勝ったレースI_combined x2.02,0820.48090.2270-0.00430.0102-0.0263-0.2020
人気順NDCG@3が低いレースI_combined x2.04,1310.61320.27960.00960.1579-0.0017-0.0860
人気順NDCG@3が高いレースI_combined x2.04,6270.95870.8651-0.05241.20390.06960.0928

波乱定義別・重み倍率別比較

表9-a: 波乱定義別・重み倍率別比較 (人気なしモデル)

バリアントAUCloglossBrierNDCG@3delta_ndcg@3単勝ROIodds>=10帯 gap重み対象行数
A_baseline (重み=1)0.73590.28910.08220.5119-0.13670.75180.04140
B_favorite_lost x1.50.73490.28970.08240.5101-0.13850.76280.0434442,966
B_favorite_lost x2.00.73390.29060.08260.5102-0.13830.75200.0447442,966
C_longshot6 x1.50.73530.28940.08220.5104-0.13820.74490.041578,305
C_longshot6 x2.00.73480.28980.08230.5106-0.13800.74630.042078,305
C_longshot6 x3.00.73310.29110.08260.5096-0.13890.74490.042178,305
E_odds10 x1.50.73510.28940.08230.5111-0.13750.76230.0419130,354
E_odds10 x2.00.73450.29020.08240.5110-0.13750.75670.0428130,354
E_odds10 x3.00.73230.29220.08280.5085-0.14010.75240.0436130,354
G_low_ndcg x1.50.73480.28970.08230.5104-0.13820.75580.0427256,264
G_low_ndcg x2.00.73400.29060.08260.5099-0.13870.75360.0439256,264
I_combined x2.00.73350.29060.08260.5083-0.14020.73740.0446442,985

表9-b: 波乱定義別・重み倍率別比較 (人気ありモデル)

バリアントAUCloglossBrierNDCG@3delta_ndcg@3単勝ROIodds>=10帯 gap重み対象行数
A_baseline (重み=1)0.84590.24380.07150.6479-0.00070.80950.00640
B_favorite_lost x1.50.84530.24720.07270.6476-0.00100.81090.0171442,966
B_favorite_lost x2.00.83830.25230.07470.6316-0.01700.80900.0236442,966
C_longshot6 x1.50.84520.24470.07150.6479-0.00060.80960.008878,305
C_longshot6 x2.00.84370.24750.07190.6483-0.00030.80930.011978,305
C_longshot6 x3.00.83400.25130.07270.6393-0.00930.80930.014878,305
E_odds10 x1.50.84580.24520.07170.6473-0.00130.80960.0150130,354
E_odds10 x2.00.84520.24760.07220.6467-0.00190.80920.0222130,354
E_odds10 x3.00.84080.25580.07400.6361-0.01250.80920.0344130,354
G_low_ndcg x1.50.84550.24650.07210.6467-0.00190.80950.0210256,264
G_low_ndcg x2.00.84450.24960.07300.6422-0.00640.81040.0316256,264
I_combined x2.00.83850.25230.07470.6319-0.01670.81130.0237442,985

考察

レース単位で重くすると荒れるレースに強くなったか

表8 (条件別評価) を見ると、波乱レース内の NDCG@3 や delta_ndcg@3 がbaseline から改善しているかを確認できます。レース単位の重み付けは、前回の馬単体重み付けよりも重みがかかる行数が大幅に多いため (波乱レースの全出走馬が対象)、モデルへの影響は大きくなります。

改善が見られた場合でも、波乱レースは事後的にしか定義できないため、実運用ではレース前に波乱レースかどうかを判定する Gate が必要です。

波乱定義によって結果は変わったか

表9 (波乱定義別・重み倍率別比較) で各定義の影響を比較できます。U1 (1番人気が負けたレース) は train の約半数を占めるため重み対象が広く、U3 (8番人気以下が勝ったレース) は狭い定義です。定義が広すぎると通常学習との差が薄まり、狭すぎると効果が限定的になります。

順当レースで悪化していないか

波乱レースを重くすると、順当レース (1番人気が勝ったレース) の学習が相対的に軽くなります。表8 の「1番人気が勝ったレース」条件で AUC / NDCG@3 が大きく悪化していないかを確認する必要があります。

高オッズ馬の過大評価は改善したか、悪化したか

calibration gap の定義は 予測勝率 - 実勝率 です。正に大きいほど過大評価、負に大きいほど過小評価です。

表6 (オッズ帯別 calibration_gap) の 10.0-19.9 / 20.0-49.9 / 50.0+ 帯を見ると、重み倍率を上げるほど calibration gap がどう動くかを確認できます。前回記事では重みを強くすると高オッズ帯の gap が正方向に広がる傾向がありましたが、レース単位の重み付けではこの傾向が異なる可能性があります。

単純な重み付けの限界

sample_weight の変更は最も軽い介入であり、レース全体を重くしても波乱レースの特徴をモデルが本質的に学べるとは限りません。よりドラスティックな改善を目指すなら、以下の組み合わせが候補になります。

  • キャリブレーション後補正 (Isotonic / Platt Scaling)
  • ランキング学習 (LightGBM の lambdarank) との併用
  • 波乱レース用/順当レース用モデル分離 (MoE/Gate)
  • レース前特徴量で波乱度を推定する「レース前Gate」の構築

まとめ

今回は波乱レースをレース単位で重く学習する8種類の定義 (U1-U8) を比較しました。

  • レース単位の重み付けは、前回の馬単体重み付けよりも対象行数が大幅に多い
  • 波乱レース定義が広い (U1, U8) ほど重み対象が多く、モデルへの影響は大きい
  • 全体 AUC / logloss / Brier はどの定義でも大きく変わらないことが多い
  • 波乱レース内の NDCG@3 / delta_ndcg@3 が改善するかが本記事の焦点
  • 順当レースで大きく悪化していないかの確認も重要
  • 波乱レースはレース後にしか分からないため、実運用にはレース前Gateが必要
タイトルとURLをコピーしました