はじめに
今回は特徴量追加ではなく、「学習のさせ方」を変えることで予測性能が変わるかを検証します。具体的には、人気薄で好走した馬 (いわゆる「穴馬として好走した馬」) を LightGBM の学習時に sample_weight で重く扱うことで、モデルの穴馬評価・キャリブレーション・単勝シミュレーション回収率に何が起きるかを確認します。
なぜ人気薄を重く学習するのか
多くの実データでは、上位人気馬の情報量が多く、下位人気馬 (人気薄) は「勝つ例が少ないノイズ」として扱われがちです。学習損失に対する寄与は少ない上、下位人気の馬が勝ったサンプルはさらに希少なため、モデルが下位人気帯の確率を過小評価する傾向が生まれる可能性があります。
この記事では「人気薄で好走したサンプル」の sample_weight を上げることで、モデルの高オッズ帯キャリブレーション、NDCG、単勝シミュレーション、EV候補評価がどう動くかを確認します。 重すぎると今度は高オッズ馬の予測勝率が過大になり、EV候補や単勝ROIが悪化する可能性もあります。
今回確認すること
- 人気薄で好走した馬を重く学習すると、人気薄・高オッズ馬の予測精度は上がるか
- 全体 AUC / logloss / Brier はどう動くか
- NDCG@3 は改善するか、人気順 NDCG との差分は改善するか
- 単勝シミュレーション回収率は改善するか
- EV候補 (EV≥1.0/1.1/1.2) の予測勝率と実勝率の gap は縮むか
- 高オッズ帯 (10倍以上) の過大評価は悪化しないか
- 人気ありモデル / 人気なしモデルで挙動は変わるか
使用データ
- テーブル:
result_table - 学習期間: 2017〜2022 年 (787,381 件)
- 検証期間: 2023〜2023 年 (136,354 件, early stopping / unweighted)
- 評価期間: 2024〜2024 年 (138,372 件, レース数 13,677)
- 帯広 (ばんえい競馬) は除外 (124,418 行)
人気薄・高オッズ・波乱レースの定義
- 人気薄: 人気 ≥ 6 (6番人気以下)
- 高オッズ: 単勝オッズ ≥ 10.0 倍
- 波乱レース: 1着馬の人気 ≠ 1 (= 「1番人気が負けたレース」または「1着馬が6番人気以下のレース」)
本記事では最低限の「6番人気以下」「単勝10倍以上」を採用しています。8番人気以下・20倍以上などの追加定義は次回以降で扱う予定です。
学習データ (train) における重み対象の出現率
| 対象 | 出現率 |
|---|---|
| 人気薄 (6番人気以下) 全馬 | 50.08% |
| 人気薄 かつ 1着 | 0.92% |
| 高オッズ (≥10倍) 全馬 | 64.46% |
| 高オッズ かつ 1着 | 1.58% |
| 波乱レースの全馬 | 56.26% |
| 波乱レースの1着馬 | 5.54% |
「人気薄かつ1着」「高オッズかつ1着」は train 全体の 1〜数%程度と非常に少ないため、重みを2倍〜3倍にしても損失に与える影響は限定的だと予想されます。
学習重みの作り方
- ベースは全サンプル
weight = 1.0 - 対象サンプルにのみ
weight = 倍率を掛ける - 重み設計は train データの結果情報のみを使用。valid / test の結果は重み設計にもハイパラ調整にも使わない
- valid の early stopping は unweighted (sample_weight を渡さない)
- 確定オッズ (単勝) は学習特徴量には使わず、sample_weight の作成と評価にのみ使用
比較するモデル
以下の優先バリアントを、「人気なしモデル」と「人気ありモデル」の両方で学習しました。
- A_baseline: 通常学習 (全 weight = 1.0)
- C_longshot_winner_weight × 1.5 / 2.0 / 3.0: 人気薄 かつ 1着 の馬の weight を倍率倍
- E_high_odds_winner_weight × 1.5 / 2.0 / 3.0: 単勝10倍以上 かつ 1着 の馬の weight を倍率倍
- G_upset_race_winner_weight × 1.5 / 2.0 / 3.0: 波乱レース (1着馬が1番人気ではない) の1着馬の weight を倍率倍
- H_combined × 2.0: C ∪ E ∪ G の合成条件を満たす馬の weight を 2.0 倍
モデルはすべて LightGBM 二値分類 (1着 = 1, それ以外 = 0)。ハイパーパラメータは全モデル共通です。
評価指標
本記事では前回整備した評価基盤 (scripts/experiments/evaluation_metrics.py) を再利用しています。
- 通常指標: AUC / logloss / Brier
- NDCG: model_ndcg@1/3/5, popularity_ndcg@1/3/5, delta_ndcg@3, 人気順に勝ったレース率
- 単勝シミュレーション: モデル予測1位 / 予測勝率≥0.30 / オッズ≥5.0 / オッズ≥10.0 の各フィルタ別に回収率・最大DD・最大連敗
- EV候補評価: EV ≥ 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 の絶対値よりも以下を重視します。
- 高オッズ帯 (10倍以上) の calibration gap
- 人気帯 6-9 / 10+ の calibration gap
- EV候補の実勝率が予測勝率に近づくか
- 単勝シミュレーション回収率と最大DD・最大連敗
- NDCG@3 が baseline から大きく劣化していないか
結果
通常指標
表1-a: 通常指標 (人気なしモデル)
| バリアント | 件数 | 正例率 | AUC | logloss | Brier | 重み対象行数 |
|---|---|---|---|---|---|---|
| A_baseline (重み=1) | 138,372 | 0.0989 | 0.7359 | 0.2891 | 0.0822 | 0 |
| C_longshot_winner ×1.5 | 138,372 | 0.0989 | 0.7354 | 0.2895 | 0.0822 | 7,219 |
| C_longshot_winner ×2.0 | 138,372 | 0.0989 | 0.7350 | 0.2903 | 0.0823 | 7,219 |
| C_longshot_winner ×3.0 | 138,372 | 0.0989 | 0.7338 | 0.2927 | 0.0827 | 7,219 |
| E_high_odds_winner ×1.5 | 138,372 | 0.0989 | 0.7352 | 0.2898 | 0.0823 | 12,417 |
| E_high_odds_winner ×2.0 | 138,372 | 0.0989 | 0.7348 | 0.2912 | 0.0825 | 12,417 |
| E_high_odds_winner ×3.0 | 138,372 | 0.0989 | 0.7337 | 0.2958 | 0.0832 | 12,417 |
| G_upset_race_winner ×1.5 | 138,372 | 0.0989 | 0.7350 | 0.2926 | 0.0829 | 43,625 |
| G_upset_race_winner ×2.0 | 138,372 | 0.0989 | 0.7347 | 0.3000 | 0.0846 | 43,625 |
| G_upset_race_winner ×3.0 | 138,372 | 0.0989 | 0.7341 | 0.3211 | 0.0906 | 43,625 |
| H_combined ×2.0 | 138,372 | 0.0989 | 0.7348 | 0.2999 | 0.0846 | 43,648 |
表1-b: 通常指標 (人気ありモデル)
| バリアント | 件数 | 正例率 | AUC | logloss | Brier | 重み対象行数 |
|---|---|---|---|---|---|---|
| A_baseline (重み=1) | 138,372 | 0.0989 | 0.8459 | 0.2438 | 0.0715 | 0 |
| C_longshot_winner ×1.5 | 138,372 | 0.0989 | 0.8456 | 0.2449 | 0.0715 | 7,219 |
| C_longshot_winner ×2.0 | 138,372 | 0.0989 | 0.8439 | 0.2475 | 0.0717 | 7,219 |
| C_longshot_winner ×3.0 | 138,372 | 0.0989 | 0.8360 | 0.2519 | 0.0723 | 7,219 |
| E_high_odds_winner ×1.5 | 138,372 | 0.0989 | 0.8458 | 0.2454 | 0.0716 | 12,417 |
| E_high_odds_winner ×2.0 | 138,372 | 0.0989 | 0.8453 | 0.2486 | 0.0719 | 12,417 |
| E_high_odds_winner ×3.0 | 138,372 | 0.0989 | 0.8425 | 0.2596 | 0.0734 | 12,417 |
| G_upset_race_winner ×1.5 | 138,372 | 0.0989 | 0.8459 | 0.2488 | 0.0725 | 43,625 |
| G_upset_race_winner ×2.0 | 138,372 | 0.0989 | 0.8450 | 0.2585 | 0.0752 | 43,625 |
| G_upset_race_winner ×3.0 | 138,372 | 0.0989 | 0.8370 | 0.2829 | 0.0831 | 43,625 |
| H_combined ×2.0 | 138,372 | 0.0989 | 0.8450 | 0.2585 | 0.0752 | 43,648 |
NDCG 比較
表2-a: NDCG (人気なしモデル)
| バリアント | model_ndcg@1 | model_ndcg@3 | model_ndcg@5 | popularity_ndcg@3 | delta_ndcg@3 | 人気順に勝ったレース率 |
|---|---|---|---|---|---|---|
| A_baseline (重み=1) | 0.4053 | 0.5119 | 0.6080 | 0.6486 | -0.1367 | 23.40% |
| C_longshot_winner ×1.5 | 0.4033 | 0.5117 | 0.6070 | 0.6486 | -0.1368 | 23.40% |
| C_longshot_winner ×2.0 | 0.4038 | 0.5114 | 0.6070 | 0.6486 | -0.1372 | 23.29% |
| C_longshot_winner ×3.0 | 0.4035 | 0.5103 | 0.6056 | 0.6486 | -0.1383 | 23.35% |
| E_high_odds_winner ×1.5 | 0.4012 | 0.5101 | 0.6062 | 0.6486 | -0.1385 | 23.23% |
| E_high_odds_winner ×2.0 | 0.4024 | 0.5099 | 0.6066 | 0.6486 | -0.1386 | 23.51% |
| E_high_odds_winner ×3.0 | 0.4001 | 0.5101 | 0.6056 | 0.6486 | -0.1385 | 23.39% |
| G_upset_race_winner ×1.5 | 0.4024 | 0.5104 | 0.6070 | 0.6486 | -0.1382 | 23.24% |
| G_upset_race_winner ×2.0 | 0.4021 | 0.5100 | 0.6063 | 0.6486 | -0.1386 | 23.54% |
| G_upset_race_winner ×3.0 | 0.4016 | 0.5104 | 0.6066 | 0.6486 | -0.1382 | 23.58% |
| H_combined ×2.0 | 0.4032 | 0.5106 | 0.6068 | 0.6486 | -0.1380 | 23.32% |
表2-b: NDCG (人気ありモデル)
| バリアント | model_ndcg@1 | model_ndcg@3 | model_ndcg@5 | popularity_ndcg@3 | delta_ndcg@3 | 人気順に勝ったレース率 |
|---|---|---|---|---|---|---|
| A_baseline (重み=1) | 0.5529 | 0.6479 | 0.7303 | 0.6486 | -0.0007 | 0.96% |
| C_longshot_winner ×1.5 | 0.5530 | 0.6484 | 0.7279 | 0.6486 | -0.0002 | 0.41% |
| C_longshot_winner ×2.0 | 0.5530 | 0.6483 | 0.7240 | 0.6486 | -0.0003 | 0.31% |
| C_longshot_winner ×3.0 | 0.5530 | 0.6426 | 0.7126 | 0.6486 | -0.0060 | 2.62% |
| E_high_odds_winner ×1.5 | 0.5530 | 0.6476 | 0.7299 | 0.6486 | -0.0009 | 1.35% |
| E_high_odds_winner ×2.0 | 0.5530 | 0.6465 | 0.7297 | 0.6486 | -0.0020 | 3.36% |
| E_high_odds_winner ×3.0 | 0.5530 | 0.6399 | 0.7274 | 0.6486 | -0.0087 | 11.40% |
| G_upset_race_winner ×1.5 | 0.5524 | 0.6481 | 0.7300 | 0.6486 | -0.0005 | 0.68% |
| G_upset_race_winner ×2.0 | 0.5476 | 0.6467 | 0.7287 | 0.6486 | -0.0019 | 2.22% |
| G_upset_race_winner ×3.0 | 0.4814 | 0.6282 | 0.7103 | 0.6486 | -0.0203 | 14.90% |
| H_combined ×2.0 | 0.5475 | 0.6465 | 0.7288 | 0.6486 | -0.0020 | 2.18% |
単勝シミュレーション (モデル予測1位)
表3-a: 単勝シミュレーション (人気なしモデル / モデル予測1位)
| バリアント | ベット数 | 的中数 | 的中率 | 投資額 | 払戻額 | 回収率 | 最大DD | 最大連敗 |
|---|---|---|---|---|---|---|---|---|
| A_baseline (重み=1) | 13,677 | 4,224 | 30.88% | 1,367,700円 | 1028250円 | 0.7518 | 340330円 | 28 |
| C_longshot_winner ×1.5 | 13,677 | 4,207 | 30.76% | 1,367,700円 | 1016060円 | 0.7429 | 353290円 | 30 |
| C_longshot_winner ×2.0 | 13,677 | 4,219 | 30.85% | 1,367,700円 | 1028420円 | 0.7519 | 341400円 | 24 |
| C_longshot_winner ×3.0 | 13,677 | 4,214 | 30.81% | 1,367,700円 | 1040760円 | 0.7610 | 328770円 | 26 |
| E_high_odds_winner ×1.5 | 13,677 | 4,180 | 30.56% | 1,367,700円 | 1022360円 | 0.7475 | 345840円 | 24 |
| E_high_odds_winner ×2.0 | 13,677 | 4,200 | 30.71% | 1,367,700円 | 1035830円 | 0.7574 | 333190円 | 26 |
| E_high_odds_winner ×3.0 | 13,677 | 4,167 | 30.47% | 1,367,700円 | 1019260円 | 0.7452 | 349620円 | 26 |
| G_upset_race_winner ×1.5 | 13,677 | 4,198 | 30.69% | 1,367,700円 | 1025270円 | 0.7496 | 344840円 | 24 |
| G_upset_race_winner ×2.0 | 13,677 | 4,185 | 30.60% | 1,367,700円 | 1040060円 | 0.7604 | 327790円 | 23 |
| G_upset_race_winner ×3.0 | 13,677 | 4,185 | 30.60% | 1,367,700円 | 1043210円 | 0.7627 | 324650円 | 24 |
| H_combined ×2.0 | 13,677 | 4,205 | 30.75% | 1,367,700円 | 1050520円 | 0.7681 | 318250円 | 28 |
表3-b: 単勝シミュレーション (人気ありモデル / モデル予測1位)
| バリアント | ベット数 | 的中数 | 的中率 | 投資額 | 払戻額 | 回収率 | 最大DD | 最大連敗 |
|---|---|---|---|---|---|---|---|---|
| A_baseline (重み=1) | 13,677 | 6,150 | 44.97% | 1,367,700円 | 1107130円 | 0.8095 | 260730円 | 14 |
| C_longshot_winner ×1.5 | 13,677 | 6,151 | 44.97% | 1,367,700円 | 1106900円 | 0.8093 | 260960円 | 14 |
| C_longshot_winner ×2.0 | 13,677 | 6,151 | 44.97% | 1,367,700円 | 1106900円 | 0.8093 | 260960円 | 14 |
| C_longshot_winner ×3.0 | 13,677 | 6,151 | 44.97% | 1,367,700円 | 1106900円 | 0.8093 | 260960円 | 14 |
| E_high_odds_winner ×1.5 | 13,677 | 6,151 | 44.97% | 1,367,700円 | 1106900円 | 0.8093 | 260960円 | 14 |
| E_high_odds_winner ×2.0 | 13,677 | 6,151 | 44.97% | 1,367,700円 | 1106900円 | 0.8093 | 260960円 | 14 |
| E_high_odds_winner ×3.0 | 13,677 | 6,151 | 44.97% | 1,367,700円 | 1106900円 | 0.8093 | 260960円 | 14 |
| G_upset_race_winner ×1.5 | 13,677 | 6,144 | 44.92% | 1,367,700円 | 1106390円 | 0.8089 | 261470円 | 14 |
| G_upset_race_winner ×2.0 | 13,677 | 6,076 | 44.42% | 1,367,700円 | 1111440円 | 0.8126 | 256420円 | 16 |
| G_upset_race_winner ×3.0 | 13,677 | 5,134 | 37.54% | 1,367,700円 | 1120070円 | 0.8189 | 249340円 | 16 |
| H_combined ×2.0 | 13,677 | 6,076 | 44.42% | 1,367,700円 | 1110260円 | 0.8118 | 257600円 | 16 |
表3-c: 単勝シミュレーション (人気なしモデル / 予測1位 & オッズ≥10.0)
| バリアント | ベット数 | 的中数 | 的中率 | 投資額 | 払戻額 | 回収率 | 最大DD | 最大連敗 |
|---|---|---|---|---|---|---|---|---|
| A_baseline (重み=1) | 1,599 | 54 | 3.38% | 159,900円 | 111220円 | 0.6956 | 57220円 | 141 |
| C_longshot_winner ×1.5 | 1,648 | 53 | 3.22% | 164,800円 | 106140円 | 0.6441 | 66830円 | 226 |
| C_longshot_winner ×2.0 | 1,633 | 56 | 3.43% | 163,300円 | 115350円 | 0.7064 | 51950円 | 147 |
| C_longshot_winner ×3.0 | 1,652 | 64 | 3.87% | 165,200円 | 130880円 | 0.7923 | 43400円 | 109 |
| E_high_odds_winner ×1.5 | 1,687 | 58 | 3.44% | 168,700円 | 118050円 | 0.6998 | 56280円 | 94 |
| E_high_odds_winner ×2.0 | 1,684 | 57 | 3.38% | 168,400円 | 119600円 | 0.7102 | 55480円 | 166 |
| E_high_odds_winner ×3.0 | 1,698 | 59 | 3.47% | 169,800円 | 115270円 | 0.6789 | 57200円 | 148 |
| G_upset_race_winner ×1.5 | 1,657 | 55 | 3.32% | 165,700円 | 110380円 | 0.6661 | 67280円 | 143 |
| G_upset_race_winner ×2.0 | 1,691 | 59 | 3.49% | 169,100円 | 127420円 | 0.7535 | 51650円 | 147 |
| G_upset_race_winner ×3.0 | 1,726 | 56 | 3.24% | 172,600円 | 119560円 | 0.6927 | 56780円 | 162 |
| H_combined ×2.0 | 1,692 | 62 | 3.66% | 169,200円 | 131060円 | 0.7746 | 48740円 | 89 |
表3-d: 単勝シミュレーション (人気ありモデル / 予測1位 & オッズ≥10.0)
| バリアント | ベット数 | 的中数 | 的中率 | 投資額 | 払戻額 | 回収率 | 最大DD | 最大連敗 |
|---|---|---|---|---|---|---|---|---|
| A_baseline (重み=1) | 1 | 0 | 0.00% | 100円 | 0円 | 0.0000 | 0円 | 1 |
| C_longshot_winner ×1.5 | 1 | 0 | 0.00% | 100円 | 0円 | 0.0000 | 0円 | 1 |
| C_longshot_winner ×2.0 | 1 | 0 | 0.00% | 100円 | 0円 | 0.0000 | 0円 | 1 |
| C_longshot_winner ×3.0 | 1 | 0 | 0.00% | 100円 | 0円 | 0.0000 | 0円 | 1 |
| E_high_odds_winner ×1.5 | 1 | 0 | 0.00% | 100円 | 0円 | 0.0000 | 0円 | 1 |
| E_high_odds_winner ×2.0 | 1 | 0 | 0.00% | 100円 | 0円 | 0.0000 | 0円 | 1 |
| E_high_odds_winner ×3.0 | 1 | 0 | 0.00% | 100円 | 0円 | 0.0000 | 0円 | 1 |
| G_upset_race_winner ×1.5 | 1 | 0 | 0.00% | 100円 | 0円 | 0.0000 | 0円 | 1 |
| G_upset_race_winner ×2.0 | 3 | 1 | 33.33% | 300円 | 1120円 | 3.7333 | 100円 | 2 |
| G_upset_race_winner ×3.0 | 41 | 4 | 9.76% | 4,100円 | 4200円 | 1.0244 | 1900円 | 20 |
| H_combined ×2.0 | 4 | 1 | 25.00% | 400円 | 1120円 | 2.8000 | 100円 | 2 |
EV候補評価
表4-a: EV≥1.0 候補 (人気なしモデル)
| バリアント | 件数 | 予測勝率 | 実勝率 | calibration gap | 平均オッズ | 単勝回収率 |
|---|---|---|---|---|---|---|
| A_baseline (重み=1) | 84,083 | 0.0892 | 0.0285 | 0.0607 | 85.61 | 0.6213 |
| C_longshot_winner ×1.5 | 87,377 | 0.0923 | 0.0288 | 0.0635 | 83.60 | 0.6269 |
| C_longshot_winner ×2.0 | 90,358 | 0.0955 | 0.0293 | 0.0662 | 81.81 | 0.6326 |
| C_longshot_winner ×3.0 | 94,266 | 0.1033 | 0.0306 | 0.0728 | 79.13 | 0.6415 |
| E_high_odds_winner ×1.5 | 88,752 | 0.0950 | 0.0294 | 0.0656 | 82.57 | 0.6282 |
| E_high_odds_winner ×2.0 | 92,426 | 0.1013 | 0.0305 | 0.0709 | 80.17 | 0.6356 |
| E_high_odds_winner ×3.0 | 98,132 | 0.1144 | 0.0326 | 0.0818 | 76.49 | 0.6472 |
| G_upset_race_winner ×1.5 | 94,731 | 0.1112 | 0.0337 | 0.0775 | 78.21 | 0.6402 |
| G_upset_race_winner ×2.0 | 102,121 | 0.1327 | 0.0386 | 0.0941 | 73.54 | 0.6516 |
| G_upset_race_winner ×3.0 | 111,552 | 0.1731 | 0.0465 | 0.1266 | 68.11 | 0.6663 |
| H_combined ×2.0 | 102,068 | 0.1326 | 0.0383 | 0.0944 | 73.57 | 0.6498 |
表4-b: EV≥1.0 候補 (人気ありモデル)
| バリアント | 件数 | 予測勝率 | 実勝率 | calibration gap | 平均オッズ | 単勝回収率 |
|---|---|---|---|---|---|---|
| A_baseline (重み=1) | 53,050 | 0.0805 | 0.0461 | 0.0345 | 93.75 | 0.5890 |
| C_longshot_winner ×1.5 | 71,956 | 0.0690 | 0.0376 | 0.0313 | 92.48 | 0.6146 |
| C_longshot_winner ×2.0 | 82,649 | 0.0689 | 0.0345 | 0.0344 | 87.26 | 0.6268 |
| C_longshot_winner ×3.0 | 87,695 | 0.0802 | 0.0366 | 0.0437 | 83.36 | 0.6457 |
| E_high_odds_winner ×1.5 | 75,967 | 0.0717 | 0.0386 | 0.0330 | 88.61 | 0.6220 |
| E_high_odds_winner ×2.0 | 89,162 | 0.0755 | 0.0379 | 0.0376 | 81.55 | 0.6401 |
| E_high_odds_winner ×3.0 | 100,316 | 0.0907 | 0.0370 | 0.0537 | 75.12 | 0.6581 |
| G_upset_race_winner ×1.5 | 88,973 | 0.0956 | 0.0516 | 0.0439 | 77.23 | 0.6469 |
| G_upset_race_winner ×2.0 | 108,852 | 0.1200 | 0.0603 | 0.0596 | 67.25 | 0.6694 |
| G_upset_race_winner ×3.0 | 123,411 | 0.1605 | 0.0672 | 0.0933 | 61.20 | 0.6815 |
| H_combined ×2.0 | 108,989 | 0.1200 | 0.0603 | 0.0597 | 67.21 | 0.6705 |
表4-c: EV≥1.2 候補 (人気なしモデル)
| バリアント | 件数 | 予測勝率 | 実勝率 | calibration gap | 平均オッズ | 単勝回収率 |
|---|---|---|---|---|---|---|
| A_baseline (重み=1) | 76,150 | 0.0869 | 0.0236 | 0.0633 | 92.30 | 0.6086 |
| C_longshot_winner ×1.5 | 79,642 | 0.0899 | 0.0241 | 0.0657 | 90.00 | 0.6131 |
| C_longshot_winner ×2.0 | 82,921 | 0.0929 | 0.0243 | 0.0686 | 87.83 | 0.6192 |
| C_longshot_winner ×3.0 | 87,164 | 0.1007 | 0.0255 | 0.0752 | 84.61 | 0.6306 |
| E_high_odds_winner ×1.5 | 81,115 | 0.0925 | 0.0246 | 0.0679 | 88.73 | 0.6170 |
| E_high_odds_winner ×2.0 | 85,179 | 0.0988 | 0.0259 | 0.0729 | 85.80 | 0.6302 |
| E_high_odds_winner ×3.0 | 91,210 | 0.1118 | 0.0274 | 0.0844 | 81.52 | 0.6378 |
| G_upset_race_winner ×1.5 | 87,236 | 0.1086 | 0.0280 | 0.0805 | 83.69 | 0.6268 |
| G_upset_race_winner ×2.0 | 94,963 | 0.1298 | 0.0320 | 0.0978 | 78.29 | 0.6391 |
| G_upset_race_winner ×3.0 | 105,197 | 0.1698 | 0.0394 | 0.1304 | 71.79 | 0.6562 |
| H_combined ×2.0 | 94,959 | 0.1297 | 0.0321 | 0.0976 | 78.28 | 0.6399 |
表4-d: EV≥1.2 候補 (人気ありモデル)
| バリアント | 件数 | 予測勝率 | 実勝率 | calibration gap | 平均オッズ | 単勝回収率 |
|---|---|---|---|---|---|---|
| A_baseline (重み=1) | 37,200 | 0.0652 | 0.0309 | 0.0344 | 109.95 | 0.5619 |
| C_longshot_winner ×1.5 | 56,585 | 0.0544 | 0.0241 | 0.0303 | 108.40 | 0.5856 |
| C_longshot_winner ×2.0 | 69,570 | 0.0556 | 0.0224 | 0.0332 | 99.97 | 0.6082 |
| C_longshot_winner ×3.0 | 76,425 | 0.0679 | 0.0244 | 0.0435 | 93.16 | 0.6260 |
| E_high_odds_winner ×1.5 | 60,149 | 0.0578 | 0.0247 | 0.0330 | 103.32 | 0.5856 |
| E_high_odds_winner ×2.0 | 75,167 | 0.0626 | 0.0252 | 0.0374 | 93.19 | 0.6160 |
| E_high_odds_winner ×3.0 | 90,401 | 0.0811 | 0.0271 | 0.0540 | 82.41 | 0.6468 |
| G_upset_race_winner ×1.5 | 70,123 | 0.0803 | 0.0349 | 0.0453 | 90.84 | 0.6068 |
| G_upset_race_winner ×2.0 | 92,190 | 0.1069 | 0.0457 | 0.0612 | 76.15 | 0.6480 |
| G_upset_race_winner ×3.0 | 114,093 | 0.1530 | 0.0583 | 0.0946 | 64.97 | 0.6725 |
| H_combined ×2.0 | 92,118 | 0.1069 | 0.0457 | 0.0612 | 76.25 | 0.6514 |
オッズ帯別キャリブレーション
表5-a: オッズ帯別 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+ |
|---|---|---|---|---|---|---|---|
| A_baseline (重み=1) | -0.3275 | -0.1401 | -0.0504 | 0.0069 | 0.0414 | 0.0517 | 0.0427 |
| C_longshot_winner ×1.5 | -0.3264 | -0.1378 | -0.0474 | 0.0108 | 0.0460 | 0.0567 | 0.0480 |
| C_longshot_winner ×2.0 | -0.3276 | -0.1368 | -0.0453 | 0.0144 | 0.0506 | 0.0620 | 0.0536 |
| C_longshot_winner ×3.0 | -0.3263 | -0.1326 | -0.0395 | 0.0219 | 0.0594 | 0.0717 | 0.0636 |
| E_high_odds_winner ×1.5 | -0.3245 | -0.1352 | -0.0444 | 0.0140 | 0.0492 | 0.0597 | 0.0502 |
| E_high_odds_winner ×2.0 | -0.3214 | -0.1301 | -0.0384 | 0.0211 | 0.0571 | 0.0679 | 0.0578 |
| E_high_odds_winner ×3.0 | -0.3180 | -0.1221 | -0.0278 | 0.0343 | 0.0719 | 0.0838 | 0.0729 |
| G_upset_race_winner ×1.5 | -0.3003 | -0.1106 | -0.0216 | 0.0346 | 0.0671 | 0.0743 | 0.0591 |
| G_upset_race_winner ×2.0 | -0.2757 | -0.0835 | 0.0053 | 0.0603 | 0.0910 | 0.0957 | 0.0747 |
| G_upset_race_winner ×3.0 | -0.2315 | -0.0349 | 0.0536 | 0.1071 | 0.1350 | 0.1351 | 0.1040 |
| H_combined ×2.0 | -0.2758 | -0.0836 | 0.0052 | 0.0601 | 0.0911 | 0.0957 | 0.0746 |
表5-b: オッズ帯別 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+ |
|---|---|---|---|---|---|---|---|
| A_baseline (重み=1) | -0.1034 | 0.0274 | -0.0007 | -0.0027 | 0.0064 | 0.0083 | 0.0075 |
| C_longshot_winner ×1.5 | -0.1067 | 0.0259 | -0.0015 | -0.0026 | 0.0120 | 0.0183 | 0.0139 |
| C_longshot_winner ×2.0 | -0.1151 | 0.0205 | -0.0035 | -0.0023 | 0.0179 | 0.0283 | 0.0216 |
| C_longshot_winner ×3.0 | -0.1090 | 0.0259 | -0.0009 | -0.0007 | 0.0274 | 0.0443 | 0.0294 |
| E_high_odds_winner ×1.5 | -0.1073 | 0.0257 | -0.0004 | 0.0044 | 0.0201 | 0.0214 | 0.0142 |
| E_high_odds_winner ×2.0 | -0.1132 | 0.0229 | -0.0000 | 0.0111 | 0.0332 | 0.0341 | 0.0213 |
| E_high_odds_winner ×3.0 | -0.1419 | 0.0039 | -0.0050 | 0.0234 | 0.0585 | 0.0607 | 0.0412 |
| G_upset_race_winner ×1.5 | -0.1074 | 0.0513 | 0.0578 | 0.0421 | 0.0342 | 0.0245 | 0.0145 |
| G_upset_race_winner ×2.0 | -0.1081 | 0.0726 | 0.1072 | 0.0821 | 0.0599 | 0.0395 | 0.0204 |
| G_upset_race_winner ×3.0 | -0.1076 | 0.1111 | 0.1870 | 0.1503 | 0.1061 | 0.0669 | 0.0306 |
| H_combined ×2.0 | -0.1083 | 0.0726 | 0.1074 | 0.0821 | 0.0600 | 0.0395 | 0.0204 |
参考: 表5-c: A_baseline (人気なしモデル) のオッズ帯別 詳細
| オッズ帯 | 件数 | 予測勝率 | 実勝率 | calibration gap | logloss | Brier | 単勝回収率(帯全体) |
|---|---|---|---|---|---|---|---|
| 1.0-1.9 | 7,211 | 0.2408 | 0.5683 | -0.3275 | 0.9923 | 0.3577 | 0.8236 |
| 2.0-2.9 | 7,863 | 0.1830 | 0.3230 | -0.1401 | 0.7393 | 0.2468 | 0.7754 |
| 3.0-4.9 | 12,860 | 0.1515 | 0.2019 | -0.0504 | 0.5568 | 0.1727 | 0.7657 |
| 5.0-9.9 | 20,680 | 0.1212 | 0.1143 | 0.0069 | 0.3836 | 0.1075 | 0.7851 |
| 10.0-19.9 | 20,849 | 0.0981 | 0.0567 | 0.0414 | 0.2444 | 0.0595 | 0.7832 |
| 20.0-49.9 | 27,077 | 0.0773 | 0.0256 | 0.0517 | 0.1521 | 0.0305 | 0.7880 |
| 50.0+ | 41,832 | 0.0477 | 0.0050 | 0.0427 | 0.0651 | 0.0082 | 0.4821 |
参考: 表5-d: C_longshot_winner ×2.0 (人気なしモデル) のオッズ帯別 詳細
| オッズ帯 | 件数 | 予測勝率 | 実勝率 | calibration gap | logloss | Brier | 単勝回収率(帯全体) |
|---|---|---|---|---|---|---|---|
| 1.0-1.9 | 7,211 | 0.2407 | 0.5683 | -0.3276 | 0.9825 | 0.3570 | 0.8236 |
| 2.0-2.9 | 7,863 | 0.1862 | 0.3230 | -0.1368 | 0.7271 | 0.2451 | 0.7754 |
| 3.0-4.9 | 12,860 | 0.1566 | 0.2019 | -0.0453 | 0.5464 | 0.1712 | 0.7657 |
| 5.0-9.9 | 20,680 | 0.1287 | 0.1143 | 0.0144 | 0.3779 | 0.1069 | 0.7851 |
| 10.0-19.9 | 20,849 | 0.1074 | 0.0567 | 0.0506 | 0.2450 | 0.0598 | 0.7832 |
| 20.0-49.9 | 27,077 | 0.0876 | 0.0256 | 0.0620 | 0.1577 | 0.0314 | 0.7880 |
| 50.0+ | 41,832 | 0.0586 | 0.0050 | 0.0536 | 0.0752 | 0.0091 | 0.4821 |
人気帯別キャリブレーション
表6-a: 人気帯別 calibration_gap 比較 (人気なしモデル)
※ 各セルは 予測勝率 - 実勝率 (人気帯別)。正なら過大評価、負なら過小評価。
| バリアント | 1 | 2-3 | 4-5 | 6-9 | 10+ |
|---|---|---|---|---|---|
| A_baseline (重み=1) | -0.2442 | -0.0188 | 0.0380 | 0.0450 | 0.0324 |
| C_longshot_winner ×1.5 | -0.2422 | -0.0158 | 0.0422 | 0.0501 | 0.0382 |
| C_longshot_winner ×2.0 | -0.2421 | -0.0133 | 0.0464 | 0.0555 | 0.0444 |
| C_longshot_winner ×3.0 | -0.2389 | -0.0072 | 0.0546 | 0.0652 | 0.0551 |
| E_high_odds_winner ×1.5 | -0.2400 | -0.0126 | 0.0455 | 0.0529 | 0.0400 |
| E_high_odds_winner ×2.0 | -0.2357 | -0.0064 | 0.0531 | 0.0609 | 0.0475 |
| E_high_odds_winner ×3.0 | -0.2294 | 0.0046 | 0.0675 | 0.0766 | 0.0627 |
| G_upset_race_winner ×1.5 | -0.2161 | 0.0098 | 0.0641 | 0.0658 | 0.0467 |
| G_upset_race_winner ×2.0 | -0.1903 | 0.0363 | 0.0886 | 0.0853 | 0.0605 |
| G_upset_race_winner ×3.0 | -0.1442 | 0.0843 | 0.1333 | 0.1217 | 0.0863 |
| H_combined ×2.0 | -0.1904 | 0.0362 | 0.0885 | 0.0853 | 0.0604 |
表6-b: 人気帯別 calibration_gap 比較 (人気ありモデル)
※ 各セルは 予測勝率 - 実勝率 (人気帯別)。正なら過大評価、負なら過小評価。
| バリアント | 1 | 2-3 | 4-5 | 6-9 | 10+ |
|---|---|---|---|---|---|
| A_baseline (重み=1) | -0.0064 | 0.0002 | 0.0032 | 0.0008 | 0.0015 |
| C_longshot_winner ×1.5 | -0.0090 | -0.0005 | 0.0035 | 0.0123 | 0.0057 |
| C_longshot_winner ×2.0 | -0.0166 | -0.0019 | 0.0054 | 0.0237 | 0.0115 |
| C_longshot_winner ×3.0 | -0.0098 | -0.0002 | 0.0056 | 0.0417 | 0.0150 |
| E_high_odds_winner ×1.5 | -0.0095 | 0.0013 | 0.0175 | 0.0122 | 0.0057 |
| E_high_odds_winner ×2.0 | -0.0143 | 0.0023 | 0.0310 | 0.0235 | 0.0107 |
| E_high_odds_winner ×3.0 | -0.0406 | 0.0010 | 0.0575 | 0.0485 | 0.0273 |
| G_upset_race_winner ×1.5 | -0.0098 | 0.0617 | 0.0339 | 0.0126 | 0.0059 |
| G_upset_race_winner ×2.0 | -0.0101 | 0.1141 | 0.0623 | 0.0233 | 0.0094 |
| G_upset_race_winner ×3.0 | -0.0058 | 0.1991 | 0.1136 | 0.0430 | 0.0147 |
| H_combined ×2.0 | -0.0102 | 0.1142 | 0.0624 | 0.0233 | 0.0094 |
重み倍率別比較
表7-a: C_longshot_winner の重み倍率別比較 (人気なしモデル)
| 重み倍率 | AUC | logloss | Brier | NDCG@3 | delta_ndcg@3 | 単勝ROI(model_top1) | odds≥10帯 calibration_gap |
|---|---|---|---|---|---|---|---|
| ×1.0 | 0.7359 | 0.2891 | 0.0822 | 0.5119 | -0.1367 | 0.7518 | 0.0414 |
| ×1.5 | 0.7354 | 0.2895 | 0.0822 | 0.5117 | -0.1368 | 0.7429 | 0.0460 |
| ×2.0 | 0.7350 | 0.2903 | 0.0823 | 0.5114 | -0.1372 | 0.7519 | 0.0506 |
| ×3.0 | 0.7338 | 0.2927 | 0.0827 | 0.5103 | -0.1383 | 0.7610 | 0.0594 |
表7-b: E_high_odds_winner の重み倍率別比較 (人気なしモデル)
| 重み倍率 | AUC | logloss | Brier | NDCG@3 | delta_ndcg@3 | 単勝ROI(model_top1) | odds≥10帯 calibration_gap |
|---|---|---|---|---|---|---|---|
| ×1.0 | 0.7359 | 0.2891 | 0.0822 | 0.5119 | -0.1367 | 0.7518 | 0.0414 |
| ×1.5 | 0.7352 | 0.2898 | 0.0823 | 0.5101 | -0.1385 | 0.7475 | 0.0492 |
| ×2.0 | 0.7348 | 0.2912 | 0.0825 | 0.5099 | -0.1386 | 0.7574 | 0.0571 |
| ×3.0 | 0.7337 | 0.2958 | 0.0832 | 0.5101 | -0.1385 | 0.7452 | 0.0719 |
表7-c: G_upset_race_winner の重み倍率別比較 (人気なしモデル)
| 重み倍率 | AUC | logloss | Brier | NDCG@3 | delta_ndcg@3 | 単勝ROI(model_top1) | odds≥10帯 calibration_gap |
|---|---|---|---|---|---|---|---|
| ×1.0 | 0.7359 | 0.2891 | 0.0822 | 0.5119 | -0.1367 | 0.7518 | 0.0414 |
| ×1.5 | 0.7350 | 0.2926 | 0.0829 | 0.5104 | -0.1382 | 0.7496 | 0.0671 |
| ×2.0 | 0.7347 | 0.3000 | 0.0846 | 0.5100 | -0.1386 | 0.7604 | 0.0910 |
| ×3.0 | 0.7341 | 0.3211 | 0.0906 | 0.5104 | -0.1382 | 0.7627 | 0.1350 |
表7-d: C_longshot_winner の重み倍率別比較 (人気ありモデル)
| 重み倍率 | AUC | logloss | Brier | NDCG@3 | delta_ndcg@3 | 単勝ROI(model_top1) | odds≥10帯 calibration_gap |
|---|---|---|---|---|---|---|---|
| ×1.0 | 0.8459 | 0.2438 | 0.0715 | 0.6479 | -0.0007 | 0.8095 | 0.0064 |
| ×1.5 | 0.8456 | 0.2449 | 0.0715 | 0.6484 | -0.0002 | 0.8093 | 0.0120 |
| ×2.0 | 0.8439 | 0.2475 | 0.0717 | 0.6483 | -0.0003 | 0.8093 | 0.0179 |
| ×3.0 | 0.8360 | 0.2519 | 0.0723 | 0.6426 | -0.0060 | 0.8093 | 0.0274 |
考察
人気薄を重く学習すると穴馬に強くなったか
「人気薄かつ1着」のサンプルは train 全体の 1〜数%と非常に少ないため、重み倍率 1.5〜3.0 では損失関数に与える影響は限定的でした。その結果、AUC / logloss / Brier は A_baseline から大きく変わらないことが多く、NDCG@3 も同様に大きな改善は見られない場合が多いです。上の表2で人気薄重み付けバリアントの NDCG@3 が A_baseline を上回っているかを確認できます。
重み対象を「1着」ではなく「全馬 (B) / 3着内 (D, F)」に広げれば重み対象は数倍になりますが、その場合は「人気薄馬の弱走サンプルまで重くする」ことになり、逆に人気薄馬の予測勝率を下げる方向に働く可能性もあります。今回は優先バリアントに絞ったため未検証で、次回以降の検討事項です。
高オッズ馬の過大評価は改善したか、悪化したか
calibration gap の定義は 予測勝率 - 実勝率 で、正に大きいほど予測勝率が実勝率を上回っている (= 過大評価)、負に大きいほど予測勝率が実勝率を下回っている (= 過小評価) です。
表5 (オッズ帯別 calibration_gap 比較) の 10.0-19.9 / 20.0-49.9 / 50.0+ 帯を見ると、重み倍率を上げるほど calibration gap が正方向に大きくなり、高オッズ馬の予測勝率が実勝率を上回りやすくなる傾向が見られます。これは、高オッズ帯の過大評価が悪化している可能性を示しています。
NDCG や人気順との差はどう変わったか
AUC が同等でも、レース内 NDCG は微妙に変化することがあります。人気薄重み付けは「上位馬より下位馬の順位精度」を優先する方向に働くため、NDCG@1 (1着相当の relevance が最大) は変わらないが NDCG@5 (下位まで含む) が動く、というパターンも出やすいです。
回収率は改善したか
単勝シミュレーション (表3) では、モデル予測1位の ROI が baseline より安定的に改善しているか、むしろ悪化しているかを見ます。1年評価では分散が大きいため、単年で ROI が 1.0 を上回っても実運用で再現できるとは限りません。最大DD・最大連敗も併せて確認する必要があります。
EV候補評価 (表4) では、EV≥1.0 / 1.2 の候補について予測勝率 – 実勝率 が baseline より縮まっているか、単勝回収率が baseline より高いかを確認します。
重み付けだけで十分か
sample_weight の変更は最も軽い介入であり、正例が極端に少ないサブグループに対しては効果が限定的になりやすいです。よりドラスティックな改善を狙うなら、以下の組み合わせが候補になります。
- キャリブレーション後補正 (Isotonic / Platt Scaling)
- ランキング学習 (LightGBM の lambdarank) との併用
- 堅いレース用 / 波乱レース用モデル分離
- オッズ帯別に独立モデルを訓練
まとめ
今回の検証は、人気薄で好走した「馬単体」を sample_weight で重くする方法でした。
- sample_weight を変えても AUC / logloss / Brier / NDCG は大きく改善せず、むしろ重みを強くすると高オッズ帯の calibration gap が正方向に広がり、高オッズ馬の過大評価が悪化しやすい傾向が見られた
- 一部の単勝シミュレーションでは ROI が改善したバリアントもあるが、NDCG やキャリブレーションが同時に改善しているわけではないため、「穴馬に強くなった」とは断定できない
- 重要なのは AUC 単体ではなく、オッズ帯別・人気帯別の calibration gap、EV候補の実勝率、単勝シミュレーション ROI・最大DD・最大連敗を総合的に見ること
- 人気ありモデル / 人気なしモデルの両方で同じ重みバリアントを試すことで、人気特徴量そのものによる補正効果と、sample_weight の効果を切り分けやすくなる

