⚠️ 先 に 重要 な お知らせ (= 全部 読まなくて も これ だけ は):
- 本 記事 は 競馬 データ を 題材 に した 時系列 機械 学習 の 検証 記録 で あり、 馬券 購入 ・ 自動 投票 ・ 投資 判断 を 推奨 する もの で は あり ません。
- 記載 する ROI は 特定 条件 下 の backtest または 検証 ログ で あり、 将来 の 成績 ・ 利益 を 保証 する もの で は あり ません。
- 20 歳 未満 の 方 は、 競馬 法 第 28 条 に より 勝馬 投票券 を 購入 ・ 譲り 受け する こと は できません。
- 契約 サービス 由来 の 生 データ、 個別 レース ・ 個別 馬 の 予測値、 買い目、 再 構築 可能 な 特徴量、 投票 連携 手順 は 公開 しません。
📖 3 分 要約 (= 長い 記事 です が、 結論 だけ):
- リーク を 潰したら 構造 ROI は 80% 程度 まで 落ちた (= 控除率 に 飲まれる)。 「ROI 800% モデル」 は 全部 leak だった
- そこ から 市場 オッズ と 合成 (= Benter 較正) + 戦略 選定 (= EV 閾値) を 重ねて、 backtest 上 100% 超え 候補 が 数 戦略 出 た
- ただし backtest は 確定 オッズ で 評価 して おり、 実 投票 時点 で は odds drift で 期待値 が ズレる 可能性 が ある。 「forward 検証 に 進める 候補」 に 過ぎ ない
- 競馬 ML で 一番 重い の は モデル 設計 では なく、 データ 基盤 (30%) と 特徴量 設計 + リーク 監査 (40%) だった
これは何:
弊社 Qiita 連載「建築 × AI」 シリーズの 番外編 続報 です。 前回 記事 (= 「ROI 140% より 先 に 税金 が 気 に なった 話」) で 触れた 競馬 AI、 その後 1 ヶ月 で 9 代 血統 / Plackett-Luce / Benter 較正 / LambdaRank まで 詰め込んだ ので、 自分 が 通った 道 と、 同じ 道 を 1970 年代 から 通って きた 世界 中 の 先人 を 並べて 紹介 します。
📌 本 記事 は 中間 報告 で、 一部 の 検証 ・ 起動 確認 は 投稿 時点 で 進行中 / 予定 の 状態 を 含み ます。 完了 / 失敗 / 延期 は 後続 の 「結果 編」 で 報告 します。
この 記事 で 分かる こと 📖
- 競馬 ML で なぜ 二値 分類 だけ では 足り ない の か (= Plackett-Luce が 必要 な 理由)
- Plackett-Luce / Benter 較正 / Kelly が それぞれ 何 を して いる 道具 な の か
- backtest ROI が 高すぎる とき に 何 を 疑う べき か (= リーク 監査)
- 競馬 AI を 作る 上 で、 モデル より データ 基盤 と リーク 監査 が 重い 理由
⚠️ 注意: 本 記事 中 の ROI は、 評価 段階 に よって (1) odds 特徴量 なし モデル の proxy 評価、 (2) HR 払戻 ベース walk-forward、 (3) 真 odds 付き 戦略 backtest が 混在 します。 以降 では、 可能 な 限り 評価 系 を 明記 します。 さらに、 三連単 系 の ROI は 分散 が 非常 に 大きい ため、 ROI 単体 で は なく、 bets 数 ・ 的中 数 ・ 年別 ROI ・ 最大 DD ・ bootstrap 信頼 区間 を 併記 する 必要 が あります。 本 記事 は 中間 報告 として 点 推定 を 載せ、 5/25 結果 編 で 分散 込み で 評価 します。
第0章 オチ を 先に 言います 🎯
弊社 の 競馬 AI、 前回 記事 (= 2026-05 上旬 公開) から 今日 まで で だいたい こう なりました。 ROI は 評価 系 で 値 が 違う ため、 必ず 「評価 条件」 列 と 一緒 に 読んで ください。
⚠️ 以下 の 数字 は 未使用 期間 で の 利益 保証 では なく、 検証 条件 ご と の 観測 値 です。 戦略 選定 後 の 同じ データ 系列 で の 再 評価、 確定 オッズ で の backtest、 サンプル サイズ の 制約 など を 含み、 forward (= 未知 の 期間) の 結果 を 約束 する もの で は あり ません。
| Phase | モデル | 評価 条件 | ROI | 備考 |
|---|---|---|---|---|
| Phase 0 | TFJV 1954-2025 raw 抽出 (= 17.3M レコード) | — | — | データ 基盤 |
| Phase 1 | LightGBM baseline (= 25 feat、 odds 特徴量 抜き) | odds 特徴量 なし モデル / proxy 評価 | 132.5% | 後続 の 真 odds 払戻 評価 と は 別 系統 |
| Phase 2 | + 集計型 血統 (Sire / BMS / Phase 1-4) | 同上 (= proxy 評価) | 141.5% | Bayesian smoothing |
| Phase 3 | leak 監査 後 (= chaku_num leak 等 排除) | HR 払戻 ベース / 3 年 walk-forward | 77 - 81% | 現時点 の 評価 設計 で 観測 された 構造 ROI |
| Phase 4 | + LE 込み 254 feat (= label encoding 全部) | odds 特徴量 なし モデル / proxy 評価 | 単勝 約 140% / 三連単 N=1 で 134.4% | 戦略 評価 前、 振れ 大 |
| Phase 5 | + Plackett-Luce 三連単 (= N=1 LE +56pt) | 6 年 backtest / 真 odds 払戻 評価 | avg 136% (= spread 203pt、 2022 69%・2023 78%・2025 272%) | hold-out で 良く 見えた N=1 改善 が 真 odds 6 年 で 年別 に 大きく 崩れ、 単独 採用 に 耐えない overfit 候補 と して 不採用 |
| Phase 6 | + Benter 較正 (α, β) + 真 odds | 6 年 backtest / EV ≥ 1.5 N=1 戦略 | 200.3% (= 旧 MLE 部分学習 α=0.31/β=0.79、 単年 50% 含む、 spread 300 pt) | model × market blending、 旧 S6 (= 5/21 に deprecated) |
| Phase 7 | Benter MLE 全期間 再学習 | n=20,626 race / MLE | α=0.2825, β=0.8597 (= ΔLL +0.1569) | 旧 S6 で n=25 サンプル 崩壊 確定 → 戦略 切替 |
| Phase 8 | 新 MLE で re-validation (= S6 deprecated 確定) | 6 年 walk-forward / 各 戦略 | 旧 S6: mean 307% / n=25/年 / spread 969 pt → 採用 不可 | サンプル 崩壊 検出、 新 主力 候補 抽出 |
| Phase 9 | S6_v2 主力 候補 + 年別 resampling 参考 レンジ | 6 年 walk-forward / S6_v2 (= MLE EV ≥ 1.2 N=5) | mean 187.6% / 参考 レンジ [130%, 249%] / n=353/年 / spread 195 pt | レンジ 下側 2.5% 点 は 130% (= 「統計的に保証」 では なく forward に進める 相対 候補) |
| Phase 10 | 1988-2025 (= 約 38 年) 長期 backtest / 中量 cache (208 列、 +UM) | 38 年 walk-forward / S6_v2 | mean 178.1% (= 6 年 187.6% から gap -9.5 pt、 100%+率 79%、 n=531/年) | 「直近 6 年 だけ の 偶然」 説明 を 弱める 材料、 ただし 戦略 選定 後 の 再 評価 + 特徴量 セット 不一致 (= 254 列 vs 208 列) に 注意 |
つまり 「リーク を 消したら 現時点 の 評価 設計 で 観測 さ れる 構造 ROI は 80% 程度」 が ベース で、 そこ に 戦略 (= EV 閾値 / 馬券 種 選択 / 較正) を 重ねて 初めて 100% を 超えに 行く、 と いう 構造 です。 Phase 1 の 132.5% は 「odds 抜き proxy 評価」 の 数字 で、 Phase 6 の 200.3% は 「真 odds × 戦略 backtest」 の 数字、 同じ ROI と 書いて あって も 比べる もの では ない。
⚠️ Phase 5 の 重要 訂正: 前回 記事 で 触れた hold-out 三連単 N=1 ROI 134.4% (= LE +56pt) は、 5/20 真 odds 6 年 backtest で avg 136% / spread 203 pt / 2022 69%・2023 78%・2025 272% と 年別 に 大きく 崩れ、 単独 採用 に 耐えない overfit 候補 と して 不採用 と なりました。 三連単 (1,0) N=10 ev≥1.5 (= avg 105% / spread 34pt) を 留保 候補 と して 残し、 主力 は 単勝 系 に 寄せて います。 「真 odds で 評価 し なおす」 と いう 工程 を 入れた こと で、 初めて overfit を 切り 出 せた 例 です。
🧪 馬券 種 別 「100%+ 戦略」 の 数 (= 真 6 年 backtest、 EV × N × α/β grid、 計 882 戦略): 単勝 43 件 / 三連単 17 件 / 複勝 0 / 馬連 0 / ワイド 0 / 馬単 0 / 三連複 0。 今回 の 特徴量 ・ 期間 ・ grid では 中間 5 馬券 種 で 100% 超え 戦略 が 出 なかった。 これ も 真 odds 評価 を 入れ ない と 出て こない 結論 で、 「構造 不可能」 と 断定 する もの では ない 点 に 注意。
そして、 1 ヶ月 で 何度 も 「自分 で 思いついた」 と 思った アイデア が、 全部 1986 年 - 1994 年 の 論文 に 既出 だった。 これ が 今回 の 一番 の 学び。 もちろん 細部 の モデル や 実装 は 進化 して いる が、 基本 論点 は 驚く ほど 変わって いない。
📅 5/25 月曜 22 時 に 「実戦 結果 編」 を 出す 予定。 本 記事 は 実戦 直前 の 中間 報告 で、 競馬 ML を 始めて みたい 人 向け の 理論 + 実装 ツアー です。
📖 読み方 ガイド (= 長い 記事 なので):
- 理論 だけ 知り たい 人 → 第2章 ・ 第3章
- 実装 の 罠 を 知り たい 人 → 第4章 ・ 第5章
- forward 投入 前 の 検証 設計 を 知り たい 人 → 第8章
- 論文 リスト だけ 持って 帰り たい 人 → 末尾 「参考 文献」
第1章 前回 の あらすじ と 「素朴 な 疑問」 📝
前回 記事 で 自分 は 「LightGBM + 40 次元 特徴量 で 単勝 hold-out ROI 140%」 と 書きました。 それ自体 は ちょっと した 数字 です が、 開発 を 進める うち に 2 つ の 素朴 な 疑問 が 出て きました。
-
そもそも 競馬 の 確率 は どう モデリング する の が 正しい の か?
- LightGBM 二値 分類 で 「1 着 か 否か」 を 学習 して いた が、 これ 競馬 と いう 「全頭 が 1 つ の race で 競う」 構造 を 取り こぼして いる の では?
- 「3 着 の 馬」 の 情報 は 学習 に 使え ない の か?
-
モデル の 出力 確率 を、 そのまま 期待値 計算 に 使って いい の か?
- LGBM の 出力 30% は 統計 確率 30% と 違う。 そこ を どう 整合 させる の か?
- 市場 (= 確定 オッズ) に 含まれる 集合 知 を どう モデル と 合成 する の か?
調べ 始めて すぐ、 これ ら の 疑問 は 30 - 40 年前 に 既 に 整理 されて いた こと が 分かり ました。 ここから が 本題。
第2章 競馬 ML の 「世界 史」 (= 1986 - 2024) 🌐
競馬 ML の 系譜 は 思って いた より ずっと 古い。 主要 な マイルストーン を 時系列 で 並べ ます。
2.1 1973 Harville: 競馬 確率 モデル の 「原点」
Harville (1973, JASA) は 「3 頭 以上 の レース で、 1 着 から 3 着 まで の 順位 確率 を どう 計算 する か」 に 数学 的 整理 を 与えた 代表 的 な 初期 研究 の 一つ。 アイデア は シンプル で、 正規化 済み の 1 着 確率 を p_i と 書く と、
P(i が 1 着、 j が 2 着) = p_i × p_j / (1 - p_i)
と なる。 より 一般 に 各馬 の 強さ を s_i と 書け ば、
P(i, j) = s_i / Σs × s_j / (Σs - s_i)
と 表せて、 これ が 後段 の Plackett-Luce 型 逐次 選択 モデル の 形 です。 1 着 を 1 頭 引いた あと の 残り 集団 で 「次 の 1 着」 を 確率 計算 する、 と いう 構造 が ここ で 出 揃って います。
この シンプル さ が 今 でも 三連単 / 三連複 確率 計算 の ベース ライン と して よく 使われて おり、 弊社 の Phase 5 で 採用 した Plackett-Luce モデル は これ と 同型 の 逐次 選択 モデル (= Plackett 1975 と Luce 1959 が 独立 に 同じ 構造 に 到達 した) と 整理 されて います。
2.2 1986 Bolton & Chapman: MNL の 競馬 応用
Bolton & Chapman (Management Science, 1986) は McFadden の Conditional Logit (= 多項 ロジット) を 競馬 の win-betting / pari-mutuel に 適用 した 代表 的 な 初期 研究。 「馬 i の 強さ π_i を、 各馬 の 観察 特徴 ベクトル x_i の 線形 関数 で 表す」
π_i = exp( β^T x_i )
P(馬 i が 1 着) = π_i / Σ_j π_j
これ、 数式 を 見ると ほぼ softmax で す。 つまり、 競馬 の 1 着 確率 は 「馬 数 が 可変 な softmax 分類」 と 整理 できる。
これ を 言われて 自分 は ぶっ飛び ました。 自分 が ふんわり LightGBM で 「1 着 か 否か」 の 二値 分類 を やって いた の は、 馬 数 可変 を 無視 した 雑 な 近似 だった と いう こと です。
補足: 二値 分類 でも race_id ご と に 予測値 を 正規化 し、 評価 も race 単位 で 行えば 実務 上 の 近似 と して は 使え ます。 問題 は 学習 損失 が race 内 の 相対 順位 を 直接 見て いない 点 で、 LambdaRank や Plackett-Luce 最尤 損失 を 使う 方 が 構造 と は 合います。 弊社 の Phase 1 - 4 は 二値 分類 + race 内 softmax 正規化 で 走って いて、 これ で も hold-out 上 は 動く。 ただし forward で 思った 順位 が 出 ない ケース は 損失 設計 ま で 戻る べき、 と いう 整理。
2.3 1994 Benter: 競馬 ML の 古典 的 代表 作
William T. Benter は 1980 年代 後半 から 香港 競馬 で コンピュータ 賭博 を やって、 数年 で 大規模 な 利益 を 上げた と 報じられて いる 人物 (= 具体 額 は 各種 報道 で 数字 が 揺れる ため、 ここ で は 一次 文献 で 確定 した 数字 で は ない こと を 断って おきます)。 1994 年 の "Computer Based Horse Race Handicapping and Wagering Systems: A Report" は 競馬 ML の 古典 的 代表 作 と して 知られ、 30 年 たった 今 でも 後続 論文 が 広く 引用 します。
Benter の 主張:
- モデル を Bolton-Chapman 流 MNL で 構築 する
- モデル 出力 だけ を 信じて はいけない。 市場 (= 確定 オッズ に 織り込まれた 集合 知) は 強力 で、 単独 モデル で は 越えられない こと が 多い
- モデル × 市場 を α / β で blending する
P_public(i) = normalize( 1 / odds_i ) # race 内 で 正規化 した public implied probability
P_final(i) ∝ ( P_model(i) ^ α ) × ( P_public(i) ^ β )
- 簡略 化 して 「1 / odds」 と 書く こと も 多い が、 実装 上 は race 内 で 正規化 した public implied probability を 使う (= odds に は 控除率 が 含まれて おり、 そのまま では 確率 に なら ない)
- α = モデル 出力 を どれだけ 信じる か
- β = 市場 オッズ を どれだけ 信じる か
- α = 1, β = 0 → モデル のみ
- α = 0, β = 1 → 市場 のみ
- 探索 grid と して は α, β を 広め に 取り、 文献 ・ 実務 例 で は 市場 側 β が 残る ケース が 多い (= 弊社 でも β = 0.86 が 出た)
弊社 の Phase 6 で 入れた 「Benter 較正」 は ここ。 部分 学習 (= n = 483 race) で α = 0.3143, β = 0.7945、 続いて 全期間 (= n = 20,626 race) で 再 MLE して、 値 が α = 0.2825, β = 0.8597 (= ΔLL = +0.1569) に 落ち着きました。 「モデル よりも 市場 を かなり 信じる」 較正 で、 これ が 出る と いう こと は 弊社 モデル は 中堅 程度 の 強度 と いう こと です。 Benter の 議論 でも、 単独 モデル 予測 を そのまま 賭け に 使う より、 市場 オッズ に 含まれる public information と 組み 合わせる 重要 性 が 強調 されて おり、 弊社 で 観察 した 「市場 側 を 強く 信じる 較正」 と 方向 性 が 一致 して います。
注意 点: α / β が 動いた 後 で 単勝 EV ≥ 1.5 N=1 戦略 の ROI 200% が 維持 される か は 別問題。 5/22 に α=0.2825 / β=0.8597 で 戦略 ROI の re-validation を 実行 予定。 ± 10 pt 以内 で 動か なければ 「MLE 値 安定」、 ± 30 pt 超 動いたら 「戦略 が MLE 依存」 と 判定 して 見直し。
2.4 1995-2010 拡張: SVM / ベイズ / ニューラル
Lo, Bacon-Shone, Busche (1995) は Harville モデル を 三連複 ・ 三連単 に 拡張 して 大規模 検証。 Edelman (2007) は SVM で 試したが、 Bolton-Chapman 流 MNL より 強くなかった と 結論。 Davoodi & Khanteymoori (2010) は ニューラル で 試したが、 これも 当時 は MNL ベース より 強く なかった。
つまり 2010 年 頃まで は 「ベース ライン は MNL + 集計 特徴量、 そこ から 大きく 上 に 行く 手 は 無かった」 と いう のが 業界 共通 認識。
2.5 2010s 後半 - 現代: 勾配ブースティング + 深層学習
XGBoost (2016) と LightGBM (2017) が 登場 して 状況 が 変わります。 ベンチマーク 上 は 同じ 特徴量 で MNL より 2 - 5 pt 精度 が 上がる ように なった。 弊社 も Phase 1 の LightGBM 採用 は ここ の 流れ。
最近 は さらに 深層 学習 系 が 立ち上がって きて、
- TabNet (arXiv 2019 / AAAI 2021) — 表形式 データ で Entity Embedding を 学習 (= 種牡馬 ID を 16 次元 ベクトル化)
- CatBoost — 高 cardinality カテゴリ 変数 に 強い
- DeepFM / DCN — 交互 作用 を 自動 抽出
- URIN v4.7 — 北米 系 商用 サービス が AUC-ROC 0.944 を 主張。 ただし 独立 検証 された 共通 ベンチマーク で は ない ため、 SOTA と いう より 「商用 側 の 高 性能 主張」 と して 扱う のが 安全
弊社 は Phase 5 で TabNet を 試したが、 集計 型 (= sire_win_rate 等) より 弱かった ので 採用 見送り。 sire_no が 7,000 + クラス あって、 過学習 が 抑制 し きれ なかった。 Benter が 1994 年 に 「シンプル な 集計 + Bayesian smoothing は 強力」 と 書いて いた のは、 確かに そう だ と 体感 する 結果 でした。
第3章 「競馬 に 合いそう な 確率 モデル」 を 1 つ ずつ 解剖 する 🔬
ここ から が マニアック ゾーン です。 興味 ない 章 は 飛ばし て OK。
📖 章 内 ざっくり 早見 表:
- 3.1 Plackett-Luce — 「1 着 → 2 着 → 3 着 を 順番 に 引く サイコロ」 で 三連単 確率 を 計算
- 3.2 Bradley-Terry — 「馬 A と 馬 B が 1 対 1 で 走ったら どっち が 勝つ か」 の 確率
- 3.3 Bayesian smoothing — 「n=1 だけ で 勝率 100% に なる ノイズ」 を 平均 化 で 抑える
- 3.4 Wright COI — 100 年 前 の 遺伝学 公式 で 近交 度 を 数値 化
- 3.5 Nicks 指標 — 「種牡馬 × 母父」 の 相性 スコア
- 3.6 Kelly 公式 — 賭け 金 配分。 「半分 だけ 守る (Half-Kelly)」 が 実務
- 3.7 LambdaRank — race 内 の 順位 を 直接 学習 する 損失
- 3.8 Isotonic — 出力 確率 を 実 統計 に 寄せる 単調 関数 較正
3.1 Plackett-Luce (= 弊社 三連単 で 採用)
ざっくり: 「福引 の くじ 引き」 と 同じ で、 全馬 の 強さ π_i を 持つ 玉 を 袋 に 入れて、 1 着 を 引く → 残り から 2 着 を 引く → 残り から 3 着 を 引く、 を 確率 計算 で 表す モデル。 これ で 「18 頭 race の 三連単 4896 通り の 確率」 を 全部 出せる。
数式 で 書く と、 各馬 に strength パラメータ π_i を 与えて、
P(順序 = (i₁, i₂, i₃))
= (π_{i₁} / Σπ) × (π_{i₂} / (Σπ - π_{i₁})) × (π_{i₃} / (Σπ - π_{i₁} - π_{i₂}))
- 1 着 を 引く → 残り から 2 着 を 引く → 残り から 3 着 を 引く、 と いう 逐次 引き 抜き
- 1 着 確率 だけ から、 全 permutation 確率 が 計算 できる
弊社 の Phase 5 実装 は、 LightGBM の 出力 確率 p_i を race 内 で p_i / Σ_j p_j に 再 正規化 し、 これ を Plackett-Luce の strength π_i と して 使い、 18 頭 race なら 18 × 17 × 16 = 4896 通り の 三連単 確率 を 全部 計算 して、 期待値 上位 N 通り に 賭ける。 (= raw score / logit を 使う 実装 で あれば、 race 内 softmax exp(score_i) / Σ exp(score_j) に なる)
注意 点: Plackett-Luce は IIA (Independence of Irrelevant Alternatives) 仮定 を 持って いる。 「1 頭 を 除外 して も、 残り の 順位 確率 比 は 変わら ない」 という かなり 強い 仮定。 実際 の 競馬 では コース 取り の 影響 や 逃げ 馬 が 1 頭 し か 居ない とき の 展開 効果 が あって、 厳密 に は 成立 し ない。 Henery (1981) や Stern (1990) は ここ を 緩めた 正規 / ガンマ 系 モデル を 提案 して いる。
実務 的 に は Plackett-Luce が 圧倒 的 に 計算 が 軽くて 実装 容易 で、 「厳密 で は ない けど ベース ライン として 強い」 ので、 弊社 も 当面 これ で 行きます。 forward で 観測 された ROI の バイアス を 見て、 必要 なら Henery / Stern に 切り 替え る 余地 を 残して おく。
3.2 Bradley-Terry (= 弊社 採用 して いない、 が 馬同士 比較 で 強力)
「馬 i と 馬 j が 1 対 1 で 走ったら、 馬 i が 勝つ 確率」 を モデル 化 する 古典。
P( i beats j ) = π_i / (π_i + π_j)
Plackett-Luce は Bradley-Terry の N 馬 拡張 と 見る こと も できる。 1 着 確率 を 推定 する だけ なら Plackett-Luce で 十分 だ が、 「3 番 人気 が 1 番 人気 を 直接 倒す 確率」 と いう 個別 質問 を 直接 学習 し たい とき に は Bradley-Terry の 方 が 自然。 弊社 は 現状 三連単 ROI を 評価 軸 に して いる の で 採用 して いない けど、 将来 「頭 数 を 絞った 馬連 ・ 馬単」 の 戦略 を 作る とき に は 再 検討 候補。
3.3 Bayesian Smoothing (= 弊社 血統 集計 で 全面 採用)
ざっくり: 「1 戦 1 勝 の 種 牡馬 を 勝率 100% と 集計 する と モデル が 騙される」 ので、 事前 に 「とりあえず α 勝 β 敗 した と 思って 集計 する」 こと で、 サンプル の 少ない 値 を 平均 寄り に 引き戻す 処理。 機械学習 の 文脈 で は Pseudocount と か Beta-Binomial Prior と か 呼ばれる、 古典 的 だ が 強力 な 手 法。
sire_win_rate = ( 父産駒 の 1 着 数 + α ) / ( 父産駒 の 出走 数 + α + β )
α = 5, β = 15 を 採用 (= 「事前 に 5 勝 15 敗 した と 思って 集計」)。 これ で n = 1 出走 の 種 牡馬 が 「勝率 100%」 と か 「勝率 0%」 と か いう ノイズ だらけ の 値 を 出して モデル を 騙し に 来る 事態 を 防ぐ。
補足: α / β は 一例 で あり、 本来 は global base rate p₀ と 事前 強度 m に 対して α = m · p₀, β = m · (1 - p₀) の よう に 決める の が 自然 です。 弊社 の (α=5, β=15) は prior mean 25% で、 競馬 の 「父 産駒 1 着 率」 と して は やや 高め に 見える が、 集計 単位 (= 父 系 全体 / 距離 帯 別 等) で の validation 上 の 安定 性 を 見て この 値 を 採用 して います。 集計 軸 を 変える 際 に は α / β を 都度 見直す 余地 が あり。
Bayesian smoothing は、 Benter (1994) が 「集計 系 特徴量 を 入れる 時 は 必ず prior 平滑化」 と 強調 して いて、 30 年 後 の 弊社 も α = 5, β = 15 を 採用。 数式 は 100 年 前 と 同じ。
3.4 Wright COI (= 1922 年 の インブリード 係数、 弊社 9代 まで 拡張)
ざっくり: 「父 系 と 母 系 を 辿って 同じ 祖先 が 何 代 前 に 何 回 出る か」 を 1 つ の 数値 F に まとめた もの。 F が 高い ほど 近交 度 が 高く、 競走 成績 や 健全 性 に 不利 な 傾向 が ある と される 統計。
Sewall Wright が 1922 年 に 提案 した インブリード 係数 (Coefficient of Inbreeding, COI)。
F = Σ_A ( 1/2 )^(n_A + n'_A + 1) × ( 1 + F_A )
- A は 「父 系 と 母 系 の 両方 から 共通 して 辿れる 祖先」
- n_A = 父 から A まで の 世代 数
- n'_A = 母 から A まで の 世代 数
- F_A = A 自身 の COI
弊社 は TFJV UM.parquet の 3 代 血統 から スタート し、 公開 データ + 手元 DB 経由 で の 補完 で 9 代 まで 拡張 した COI を 計算 (= 211,409 馬 × 2048 列 の pedigree_9gen.parquet を 構築)。 5,993 馬 (= 約 2.8 %) が F > 0 を 持つ。
⚠️ サニティ チェック 中: F > 0 が 2.8% は 9 代 拡張 と しては 直感 的 に かなり 低い ので、 (a) 9 代 全部 が 埋まって いる 馬 の 割合、 (b) 祖先 ID の 名寄せ 率、 (c) 同一 祖先 の name / ID 表記 揺れ、 (d) Northern Dancer など 既知 クロス が 検出 できる か、 (e) F の ヒストグラム、 (f) 世代 別 重複 祖先 検出 数、 を 順に 検査 中。 数字 は 改訂 の 可能性 が ある。
インブリード と 競走 成績 の 関係 は、 学術 文献 で も 体系的 に 検証 されて います。
- Scientific Reports (2018) "Founder-specific inbreeding depression affects racing performance in Thoroughbred horses" — 豪 サラブレッド 135,572 頭 (= 2000-2011 出走) + 創始 馬 まで 遡る 257,249 頭 の 系譜 で、 近交 と 競走 成績 の 関係 を 検証
- Proceedings of the Royal Society B (2022) "Inbreeding depression and the probability of racing in the thoroughbred horse" — 6,128 頭 の 欧州 ・ 豪 サラブレッド × 297K SNP genotypes で、 F_ROH が 10% 増える と 出走 可能 性 が 7% 低下
つまり COI は 近交 に 伴う 競走 成績 ・ 健全 性 リスク を 拾う 候補 特徴量 と して 有用。 ただし 影響 は 祖先 ・ 集団 ・ 評価 指標 に 依存 する ため、 「F が 高い ほど 必ず 弱い」 と は 扱わ ず、 線形 では ない 形 で モデル に 寄与 する もの と 見て います。 弊社 で は COI を そのまま 特徴量 に 入れた だけ で、 細かい クロス (= 3 × 4 とか 4 × 5 の 系統 重ね) は 別 特徴 に 分けて いません。 ここ は 改善 余地 が ある エリア。
3.5 SII × BSII Nicks (= 種牡馬 × 母 父 相性、 弊社 採用)
TrueNicks 的 な 発想 を 参考 に、 公開 データ から 独自 の 簡易 Nicks 指標 を 構築。 商用 TrueNicks そのもの では なく、 Sire Index / Broodmare Sire Index / 組合せ 勝率 を 使った 独自 実装 です。
SII (Sire Index) = sire の 平均 産駒 勝率 を normalize
BSII (Broodmare Sire Index) = bms の 平均 産駒 勝率 を normalize
Nicks 風 Score (sire, bms) = SII × BSII × ( 組合せ 産駒 の win_rate / 期待 win_rate )
「Sunday Silence 系 種牡馬 × Northern Dancer 系 母 父」 みたい な 組合せ で、 期待 を 超える 勝率 が 出る ペア に 高い スコア が つく。 弊社 の nicks_score.parquet は 3.39 M 行 で、 LightGBM に 1 列 で 渡して います。
3.6 Kelly Criterion (= 賭金 配分、 弊社 検討中)
ざっくり: 「期待値 が プラス の とき、 資金 の 何 % を 賭ける と 長期 成長 率 が 最大 化 する か」 の 公式。 ただし 真 の 勝率 を 過大 推定 する と 即 破産 する ので、 実務 で は Half-Kelly (= 半分 だけ 賭ける) や Quarter-Kelly が 一般 的。
John Kelly (1956, Bell Labs) が 通信 理論 の 文脈 で 出した、 「資金 の 何% を 賭ける と 長期 成長 率 が 最大 化 する か」 の 公式。
f* = ( bp - q ) / b
- f* = 資金 の 賭ける 割合
- b = オッズ - 1 (= 純 利益 倍率)
- p = 真 の 勝率
- q = 1 - p
「期待値 が プラス の 馬 に だけ、 Kelly 比 で 賭ける」 と いう のが Benter の 結論 でも あり、 数値 投資 の 古典 でも あり ます。 ただ 競馬 の 場合 p (= 真 の 勝率) が 推定 値 で あって、 過大 推定 する と 即 破産 する。 そこで 実務 で は Half-Kelly (= 0.5 × f*) や Quarter-Kelly が 一般的。 弊社 は 5/23 時点 で は まだ 固定 1 点 100 円 の フラット ベット で、 Kelly は 戦略 確定 後 (= 6 月 以降) の 課題 と して 残し て あります。
3.7 LambdaRank (= 弊社 採用 候補、 未実装)
Burges (2007) Microsoft Research の ランキング 学習。 順序 関係 を 直接 学習 する 損失。 LightGBM では objective="lambdarank" で 利用 可能 で、 race ID を group_key に 渡すと 「race 内 で 1 着 馬 を 上位 に 並べる」 こと を 直接 最適化 する。
弊社 は 現状 二値 分類 + softmax 正規化 で やって いる が、 LambdaRank は race 内 で 正解 馬 を 上位 に 置く ランキング 損失 を 直接 最適化 できる ため、 二値 分類 より 競馬 の 構造 に 合いやすい。 ただし LambdaRank と Plackett-Luce 最尤 は 同じ で は ない ので、 NLL / calibration / ROI で 別途 比較 する 必要 が ある。 これ は 6 月 中 の TODO。
3.8 Isotonic Regression (= 弊社 採用、 較正)
ざっくり: 「LightGBM が 出した 30% は、 実際 の 統計 で 当たる 確率 30% と は 限ら ない」 ので、 過去 データ で 「モデル 出力 何 % → 実際 何 %」 の 対応 表 を 作って 補正 する 処理。 「単調 増加 だけ は 守る」 制約 を 入れて 過 学習 を 抑える。
LightGBM の 出力 を 「実際 の 勝率」 に 較正 する 後 処理。 Platt scaling (= sigmoid 較正) と Isotonic regression が 主流 で、 Isotonic は 単調 増加 制約 だけ 課して データ 駆動 で 細かい 補正 を 行う。
from sklearn.isotonic import IsotonicRegression
iso = IsotonicRegression(out_of_bounds="clip")
iso.fit(p_model_raw, y_true)
p_calibrated = iso.transform(p_model_raw)
これ を Benter blending の 前 に 通す と、 P_model(i) と 1 / odds_i の スケール が 揃って α / β の MLE 推定 が 安定 します。 弊社 は 024/models/isotonic_calibrator.pkl に 保存 済。
第4章 弊社 開発 フェーズ 史 (= 1 ヶ月 の 旅 を 1 章 に 圧縮) 📜
過去 の HANDOFF を 漁って、 弊社 が 通った 道 を 整理 します。 これ から 競馬 ML を 始める 人 が 「同じ 罠 を 踏ま ない」 為 の 地図 と して 置いて おきます。
Phase 0: 生 データ 抽出 (= 2026-04 中旬)
- 契約 範囲 内 の ローカル 分析 で、 サービス 提供 元 (= TFJV / TARGET frontier JV) の ローカル DB 5.58 GB から 1954 - 2025 の 17.3 M レコード 規模 を Parquet 化
- 17 種類 の record (SE / RA / UM / HR / HN / SK ...) を 全部 抽出 (= 個別 馬 / 個別 race / 個別 予測値 は 本 記事 で は 公開 し ない)
- 罠: 仕様書 が ない 独自 binary。 offset を 1 列 ずらして 数日 ハマる。 前回 記事 で 触れた 「toroku が 全部 77」 事件 が ここ
- ⚠️ データ 本体 ・ 抽出 物 ・ 再 構築 可能 な 変換 手順 は 本 記事 で は 扱い ません。 利用 可否 は 各自 の 契約 と 利用 規約 に 従って 確認 が 必要 です
Phase 1: LightGBM ベース ライン (= 2026-04 下旬 - 05 中旬)
- 25 特徴量 × LightGBM 二値 分類 で 学習
- 最初 は ROI 800% とか 出て ぬか喜び。 全部 データ リーク
- リーク 源 を 順に 潰す:
- SE.tansyo_odds → 5/19 に LEAK 確定 (= 5 着 まで しか 値 が 入って いない、 1 着 馬 だけ 系統 的 高 値)
- chaku_num (= 着順 数値 版) → 988% の ROI を 出して 発覚、
feature_pool.LEAKセット に 追加
- リーク 除去 後 の 3 年 walk-forward 推定 で 構造 ROI 77 - 81% (= 控除率 20% に 単 体 で は 勝て ない)
- ★ 教訓: 「hold-out ROI が 200% を 超え たら、 まず リーク を 疑う」 を 直感 と して 持つ (= 少なくとも 弊社 環境 で は、 200% 級 の 数字 は リーク 監査 の 赤 信号 でした)
Phase 2: 集計 型 血統 (= 2026-05-17、 1 日 で 一気 に)
- 弊社 内部 の 血統 設計 メモ に 沿って Day 1 - Day 6 を 1 日 で 完走
- Sire / BMS / PGS / MDS の 年別 集計 を Bayesian smoothing (α=5, β=15) で 平滑 化
- 距離 適性 / コース 適性 / 系統 (Keito) / Nicks / Wright COI 3 代
- 新 champion = v20260517_full_ped_lgbm_no_odds_ped_phase1 (= ROI 132.5% → 141.5%、 +15.9 pt)
- TabNet で Entity Embedding を 試す も 集計 版 より 弱かった ので 採用 見送り
教訓: 「最新 手法 が 必ずしも 強い と は 限らない」。 Benter が 30 年 前 に 「集計 + 平滑化 は 強い」 と 書いて いた 通り。
Phase 3: 5/19 大 リーク 検出 (= 半日 損失、 だが 結果 的 に 真値 確定)
- 全 ROI 評価 を
HR.parquet.TanPay_1ベース に 切替 (= 「単勝 配当」 を 直接 払戻 として 使う) - chaku_num leak を
feature_pool.LEAKに 入れて 988% leak を 完全 消滅 - 3 年 walk-forward 推定 で 構造 ROI は 80% 程度 と 確認
- 「今回 の 特徴量 ・ 評価 設計 で は、 モデル 単体 で 控除率 を 安定 に 超える の は 難しい」 と いう 現実 を 受け 入れ
- → ここから が 「Value Betting + 市場 オッズ blending + 馬券 種 戦略」 の 旅 が 始まる
Phase 4: LE 込み 254 特徴量 (= 2026-05-20)
- Label Encoding で カテゴリ 変数 を 全部 数値 化 した 254 特徴量 版
- 三連単 N=1 hold-out ROI 134.4%、 単勝 hold-out ROI 約 140%
- ただし これ が 真値 か overfit か は backtest 単体 で 判定 不能 (= odds を 使って いない eval pipeline)
- → Phase 5-6 で odds を 入れる
Phase 5: Plackett-Luce 三連単 + overfit 確定 (= 2026-05-20)
- LightGBM の 1 着 確率 を softmax 正規化 して π_i に
- 18 頭 race で 4896 通り の 三連単 確率 を 全部 計算
- 上位 N=1/10/20/50/70/100 を 評価 grid と する
- ⚠️ N=1 LE +56pt は 真 odds 6 年 backtest で 年別 に 大きく 崩れる (= avg 136% / spread 203pt / 2022 69%・2023 78%・2025 272%) → 単独 採用 に 耐えない overfit 候補 と して 不採用
- 三連単 (1,0) N=10 ev ≥ 1.5 は avg 105% / spread 34pt で 留保 候補
- N=30 grid も 後続 で 評価 (= 完了 後 に レンジ 更新)
Phase 6: Benter 較正 + 真 odds backtest + 戦略 確定 (= 2026-05-20 同日)
- 過去 6 年分 の 真 odds を 揃えて 戦略 評価 (= 全 7 馬券種 × EV 閾値 × N 通り × α/β grid、 計 882 戦略)
- 単勝 EV ≥ 1.5 N=1 戦略 の 真 6 年 ROI = 200.3% (= ただし 2021 は 50%、 spread 300 pt)
- Benter MLE 部分 学習: α = 0.3143, β = 0.7945 (= n = 483 race)
- 馬券 種 別 100% 超 戦略 数: 単勝 43 / 三連単 17 / 複勝 0 / 馬連 0 / ワイド 0 / 馬単 0 / 三連複 0
- 結論: 単勝 を 主力 と し、 中間 5 馬券 種 は 完全 不採用
- cross-bet ranking (= 馬券 種 横断 EV 上位 N) も backtest で 100%+ 戦略 ゼロ、 採用 見送り
Phase 7: Benter MLE 全期間 再 学習 (= 2026-05-21 05:54)
- 5/20 部分 学習 (= n=483) → 5/21 全期間 (= n=20,626) で 再 MLE
- α = 0.3143 → 0.2825, β = 0.7945 → 0.8597 (= ΔLL = +0.1569)
- 旧 値 は
024/models/benter_alpha_beta_history/20260521-055448.jsonに backup - → 旧 主力 (S6 = EV≥1.5 N=1) の re-validation を 続いて 実施
Phase 8: 新 MLE re-validation で S6 (旧 主力) サンプル 崩壊 確定 (= 2026-05-21 06:14)
eval_tansyo_10yr.py で 6 年 walk-forward を 新 MLE 値 で 再 backtest:
| 戦略 | 旧 MLE (5/20) | 新 MLE (5/21) | 判定 |
|---|---|---|---|
| EV≥1.5 N=1 (= 旧 S6) | avg 200.3% / n=186/年 | avg 307% / n=25/年 / spread 969 pt | サンプル 崩壊 = 採用 不可 |
| EV≥1.2 N=5 | (未 検証) | avg 187.6% / n=353/年 / spread 195 pt | 新 主力 候補 |
| (1,1) EV≥2.5 N=5 | (未 検証) | avg 184.5% / n=47/年 / spread 208 pt | サンプル 微妙 |
新 MLE で α が モデル 方向 に 下がった (= 0.3143 → 0.2825) こと で、 EV ≥ 1.5 を 通る race が 1/8 に 減って しまい、 旧 主力 S6 の 統計 力 が 崩壊。 「α を 動かす と EV 分布 が 大きく ずれる」 と いう 当然 の こと を、 現場 で 体感 する 結果 と なりました。
→ 5/23 forward 観測 では 旧 S6 を deprecated し、 S6_v2 (= EV ≥ 1.2 N=5) を 主力 候補 と して 観察。
Phase 9 (= 確定 戦略 + 年別 resampling 参考 レンジ): S6_v2 主力 候補 化
6 年 年別 ROI を 10,000 回 resample し、 年別 resampling 参考 レンジ (= 厳密 な 信頼 区間 で は ない、 stability interval 相当) を 算出。 サンプル n=6 (= 年) は 弱い が、 spread を 数値 化 する 簡易 指標 と して 採用:
| ラベル | 戦略 | mean ROI | 参考 レンジ | spread | n/年 | 役割 |
|---|---|---|---|---|---|---|
| S6_v2 (= 新 主力 候補) | 単勝 MLE EV ≥ 1.2 N=5 | 187.6% | [130%, 249%] | 195 pt | 353 | resampling 参考 レンジ 下側 2.5% 点 が 130% |
| B (= 安定 代替) | 単勝 (1,1) EV ≥ 2.0 N=10 | 157.2% | [132%, 177%] | 89 pt | 212 | レンジ 幅 最小、 暴れ 抑制 |
| C (= 最 安定) | 単勝 MLE EV ≥ 1.1 N=10 | 111.3% | (TBD) | 44 pt | 1988 | 「死なない」 戦略 |
| 307% | [77%, 620%] | 969 pt | 25 | deprecated (= n=25 崩壊、 レンジ 下限 77% で 真値 100% 下回り 可能性 排除 できず) |
⚠️ ここ で の
[130%, 249%]等 は、 利益 を 統計 的 に 保証 する 信頼 区間 では なく、 選定 後 データ に 対する 年別 resampling の 参考 レンジ (= stability interval) です。 サンプル は n=6 (= 年) と 弱く、 また 882 戦略 grid から 「最高」 を 拾った 後 の 多重 比較 ・ 選定 バイアス ・ odds timing leak を 含み ます。 「forward 検証 に 進める 候補 と して 相対 的 に 有望」 と いう 位置 づけ に 留めます。 未知 の 期間 ・ 異 なる オッズ 取得 タイミング ・ 市場 変化 に 対する 下限 を 意味 する もの で は あり ません。
forward は S6_v2 を base line と して forward 観測 で 走らせ、 1 ヶ月 観測 で 50 - 80% 級 の 暴れ 年 を 引いたら 安定 代替 B (= レンジ 下限 132%) に 切替、 と いう 設計 です。
📊 resampling レンジ 下限 が 100% を 切る 戦略 は forward で 避ける が 弊社 の 内部 ルール。 旧 S6 が 「mean 307% 出 て いる の に 採用 不可」 と なった のは、 レンジ 下限 77% で 「真値 が 100% を 下回って いる 可能 性 が この resampling 設計 で 排除 でき ない」 から。 この 判断 基準 は forward 開始 後 も 「mean だけ 見て 戦略 拡張 しない」 と いう ガード と して 機能 する はず。
Phase 10: 1988-2025 (= 約 38 年) 長期 backtest で 戦略 ロバスト 性 を 補強 (= 2026-05-21 07:12)
弊社 の 1988-2025 (= 約 38 年) 長期 backtest は 8.4 分 で 完了 しました。 40 cores (= Spark2 20 cores × 2) 並列 + 中量 cache 軽量化 で、 「半日 コース」 と 諦め かけて いた 検証 が 当日 中 に 実現 した、 と いう のが 一番 嬉しい 報告 です。 (※ 内部 で は 「40 年」 と 呼んで いる が、 実 期間 は 1988-2025 で 38 年 分)
cache 拡張 の 工夫 (= 軽量 → 中量)
完全 v9 cache (= 1614 列、 LE 込み 254 feat) を 1986 まで 拡張 する のは pipeline 6 段階 で 半日 コース。 そこで 弊社 は 段階的 cache 拡張 を 採用 しました:
軽量 cache (= SE + walk_forward_aggs) ← 130 列、 build 15 秒
↓ +UM (= 馬データ 78 列、 血統 系 含む)
中量 cache (= SE + wfa + UM) ← 208 列、 build 27 秒
↓ +KS (= 騎手 28 列) +CH (= 調教師 52 列)
重量 cache (= 288 列、 完全 v9 254 feat に 近づく) ← 将来 拡張
軽量 cache で 38 年 backtest は 全戦略 ~78% (= 控除率 と 一致)。 学習 力 が 完全 に 控除率 に 飲まれて edge を 出せ ない。 これ 自体 「LightGBM が 過学習 して 高 ROI を 出した のでは ない、 真値 は 控除率」 と いう null hypothesis を 確認 した 価値 ある 結果。
中量 cache (= UM 血統 系 78 列 追加) で 同じ 38 年 backtest を 回す と:
| 戦略 | 6 年 (cache_master_v9 254 feat) | 38 年 (中量 cache 208 列) | gap | 100%+率 | 評価 上 の 注意 |
|---|---|---|---|---|---|
| S6_v2 = MLE EV ≥ 1.2 N=5 | 187.6% | 178.1% | -9.5pt | 79% (= 38 年 中 30 年) | 戦略 探索 後 の 再 評価 / 特徴量 不一致 / 確定 オッズ |
| S10_v2 = MLE EV ≥ 1.5 N=5 | 250.9% | 288.9% | +38.0pt | 66% | 同上 |
| S8_v2 = (1,1) EV ≥ 2.5 N=5 | 184.5% | 279.9% | +95.4pt | 87% | 同上 |
| S7_v2 = (1,1) EV ≥ 3.0 N=5 | 201.5% | 377.3% | +175.8pt | 71% | 同上 + n=52/年 と 薄い |
| S9_v2 = (1,1) EV ≥ 2.0 N=10 | 157.2% | 218.6% | +61.4pt | 84% | 同上 |
⚠️ 表 の 「評価 上 の 注意」 列 は、 全 戦略 共通 で (1) 戦略 探索 後 に 同じ データ 系列 で 再 評価 して いる、 (2) 6 年 側 と 38 年 側 で 特徴量 セット が 完全 に は 一致 し ない (254 列 vs 208 列)、 (3) 確定 オッズ で backtest して おり 実 投票 時点 の odds drift は 反映 して いない の 3 点 を 指して います。
主力 候補 S6_v2 が 6 年 と 38 年 で gap -9.5 pt。 「直近 6 年 だけ の 偶然」 と いう 説明 は 弱まり、 forward 検証 に 進める 根拠 が 強く なりました。
⚠️ 重要 な 限界: 6 年 側 は cache_master_v9 (= 254 feat) を 使い、 38 年 側 は 中量 cache (= 208 列) で 完全 に 同じ 特徴量 セット で の 比較 で は ありません。 また、 戦略 探索 後 の 再 評価 で あり 「完全 未使用 期間」 で も ない。 「gap -9.5pt = ロバスト 確定」 と 断定 する より、 「直近 6 年 だけ の 偶然 で は ない 可能 性 が 補強 され た」 くらい が 正確 です。 forward は 引き 続き 別 系列 の 検証 と 位置 づけ。
5/23 から の 並列 forward 候補 (= 5 戦略)
38 年 + 6 年 の 二重 検証 を 通過 した 戦略 を 並列 で 走らせ、 1 ヶ月 後 (= 6 月 下旬) に 戦略 別 forward ROI を 比較 する 設計 です:
| ラベル | 較正 | EV | N | 38 年 avg | 6 年 avg | 100%+率 | 役割 |
|---|---|---|---|---|---|---|---|
| S6_v2 (= 主力 候補) | MLE | 1.2 | 5 | 178% | 188% | 79% | ★ 1 ヶ月 観測 base line |
| S7_v2 (= 最高 mean) | (1,1) | 3.0 | 5 | 377% | 201% | 71% | n=52/年 と 薄い、 暴れ 注意 |
| S8_v2 (= 100%+率 最高) | (1,1) | 2.5 | 5 | 280% | 184% | 87% | n=89/年 |
| S9_v2 (= 安定) | (1,1) | 2.0 | 10 | 219% | 157% | 84% | n=213/年 |
| S10_v2 (= 高 ROI 安定) | MLE | 1.5 | 5 | 289% | 251% | 66% | n=132/年 |
⚠️ S7_v2 の avg 377% は n=52/年 = サンプル 薄 で あり、 「mean だけ で 判断 しない」 ガード 対象。 主力 観測 base は あくまで S6_v2、 S7-S10 は 並列 観察 用。
なぜ MLE と (1,1) を 並列 で 走らせる の か (= 較正 path の 二刀流)
5 戦略 の 較正 は 「MLE Benter (= S6_v2 / S10_v2)」 と 「α=β=1.0 baseline (= S7_v2 / S8_v2 / S9_v2)」 の 2 系統 に 分かれて います。 これ は backtest で 観察 された 次 の 性質 を 拾い に 行く 設計 です。
- MLE Benter (= α=0.2825, β=0.8597) = モデル を やや 弱める 較正 → 「市場 オッズ 重視」 → 高 EV (= 1.5+) を 通る race 数 は 少 (= n=132/年)、 だが 集中 した picks で 平均 ROI 高
- α=β=1 baseline = モデル と 市場 を 等価 に 扱う → 「モデル 単独 確率」 が 効く → EV ≥ 2.0+ で n=213/年 と 多 サンプル + 高 ROI
これ は 「モデル が odds に 反映 されて いない edge を 持って いる」 こと の 別 角度 から の 観察 で、 較正 を 1 つ に 固定 する と どちら か を 取り 逃がす。 forward で どちら の 較正 が 真値 に 近い か を 1 ヶ月 で 戦略 別 比較 する の が、 並列 並走 の メリット です。
⚠️ ただし、 これ も 戦略 探索 後 の 観察 で あり、 「(1,1) が 構造 的 に 強い」 と 一般 化 する もの で は ない。 「今回 の 弊社 モデル の 較正 不足 を、 (1,1) baseline が 偶然 拾った」 可能 性 を 否定 でき ない。 forward 観測 の 主目的 の 一つ は、 ここ の 切り 分け でも あります。
撤退 ・ 切替 ルール (= 1 ヶ月 観測 = 6 月 下旬 判定)
forward 観測 中 に 「mean だけ 見て 続行」 や 「単月 -30% で 慌て て 全 撤退」 を 避ける ため、 事前 に 紙 に 書いて あり ます。
| forward ROI (1 ヶ月) | 判定 | アクション |
|---|---|---|
| ≥ 100% 維持 | 採用 継続 | 投資 額 拡大 検討 (= 6 月 から、 Kelly 検討) |
| 50 - 100% | 採用 継続 | 参考 レンジ + 年別 分布 観察 + 結果 編 で 追加 評価 |
| < 50% (= 2021 級 暴れ 年) | 即 全 戦略 撤退 | 安定 代替 単独 (= S6_v2 のみ) に 切替、 S7-S10 停止 |
これ、 投資 系 ML を 本番 デプロイ する とき に 「事前 に 撤退 基準 を 紙 に 書く」 と いう のは 業務 系 と 全く 同じ。 後 で 「想定 外 で 撤退 した」 と 言わ ない 為 の、 自尊心 救済 装置 でも あります。
「軽量 vs 中量 cache」 の 教訓
軽量 cache (130 列) で 全戦略 78% 控除率 一致 → 中量 cache (208 列、 + UM 血統 系) で 100%+ 多数 と いう 結果 は、 競馬 ML に おいて 特徴量 設計 が ROI に 直結 する こと の 教科書 的 な 例 で した。 LightGBM の 学習 力 自体 で は なく、 入力 feature の 質 と 量 が 「edge を 出せる か 否か」 を 決定 して います。
これ は Bolton & Chapman (1986) の 「ハンディキャップ 系 特徴量 設計 が 重要」 と いう 結論 と 方向 性 が 一致 して おり、 競馬 ML で は 馬 ・ 騎手 ・ 調教師 ・ 血統 ・ 過去 成績 など の 集計 特徴量 が 効く、 と いう 古典 的 観察 を 弊社 でも 再確認 した、 と いう のが 業界 の 「先人 に 学べ」 教訓 の 典型 例 です。
詳細 結果 は 弊社 内部 レポート (REPORTS/compare_6yr_vs_38yr_*.md) に 全 76 ロバスト 戦略 を 並べて ありますが、 個別 戦略 / 個別 race / 個別 馬 に 紐づく 数値 は 本 記事 では 公開 しません。
第5章 「自分 が 選ば なかった 道」 と 「選ば な かった 理由」 🛤
これ、 競馬 ML を 始める 人 が 一番 知り たい 部分 だ と 思う ので 包み 隠さず 書きます。 「選ば なかった 理由 を 残す と、 半年 後 に 「あれ 試して 無いの?」 と 自問 した とき に 「試して 採用 し なかった」 と 即答 できる」 と いう 利点 が ある。
| 手法 | 選ばなかった or 採用 見送り | 理由 |
|---|---|---|
| Neural Network 単独 | 採用 見送り | LightGBM より 弱い + 解釈 性 低い (= Benter 1994 と 同じ 結論) |
| TabNet Entity Embedding | 採用 見送り | sire_no 7,000 + クラス で 過学習。 prior 集計 版 が 強い |
| Bradley-Terry 学習 | 未実装 | 1 着 確率 推定 で 十分。 馬連 戦略 を 本気 で やる 時 に 再検討 |
| Henery / Stern モデル | 未実装 | Plackett-Luce で 充分 強い + 計算 が 楽 (= IIA 仮定 の 妥当性 は forward で 観測) |
| 三連単 N=1 単独 | 不採用 | LE +56pt が 真 odds 6 年 backtest で overfit 確定 (= spread 203pt、 2022 69%) |
| 中間 5 馬券 種 (複勝/馬連/ワイド/馬単/三連複) | 現時点 で は 採用 しない | 今回 の 特徴量 ・ 期間 ・ grid (= 882 戦略 / 6 年) で 100%+ 戦略 が 1 件 も 出 なかった。 控除率 22.5-27.5% の 壁 が 厚く、 再 検証 まで 保留 |
| cross-bet ranking (= 馬券種 横断 EV) | 採用 見送り | 今回 の backtest で 100%+ 戦略 0 件、 単純 単勝 単独 戦略 の 方 が 上 |
| Kelly (Full) | 採用 見送り | 真 p の 過大 推定 で 損失 急拡大 リスク。 当面 フラット ベット、 慣れたら Half-Kelly |
| CatBoost | 試行 中 | LightGBM と 比較 中、 差 が 出れば 切替 |
| DeepFM / DCN | 検討 留保 | 競馬 で 効く 実装 例 が 業界 で まだ 確立 して いない |
| 追加 課金 データ / 外部 有料 指数 | 現時点 で は 採用 しない | TARGET / TFJV 由来 の 手元 DB を 基盤 と し、 それ 以外 の JRDB ・ 有料 予想 指数 ・ 商用 特徴量 は 使わない (= TFJV ローカル DB 自体 は DataLab 会員 範囲 で の 個人 利用) |
| 外部 タイム 指数 系 | スタブ | 会員 プレミアム 領域 / 利用 規約 上 慎重 を 要し、 手間 に 見合わない と 判断 |
「選ば な かった 道」 を 並べ た こと が、 「選んだ 道 が 弱かった とき に 戻れる 道」 で も ある。 ML 開発 の 副 産物 と して これ は そこそこ 価値 が ある と 思って ます。
第6章 結局 「競馬 ML」 は 何 を やる 仕事 な の か 🧩
過去 1 ヶ月 で 自分 が 体感 した 「競馬 ML と は こう いう 仕事 で ある」 の 整理 を 1 枚 に 書き出します。 これ から 始める 人 の 期待 値 調整 の 参考 に。
- 「モデル 学習」 そのもの は 10%。 LightGBM を fit する だけ なら 1 行。
- 「特徴量 設計」 が 40%。 ここ で 血統 / Bayesian smoothing / 集計 窓 / リーク 監査 に 時間 を 溶か す。
- 「データ 基盤」 が 30%。 binary 仕様書 が ない、 名前 表記 揺れ が ある、 race_id 形式 が 経路 で 違う、 等 の 泥 作業。
- 「戦略 設計」 が 10%。 EV 閾値、 N 数、 馬券 種 配分、 撤退 ルール。
- 「実戦 + 監視」 は 一生 続く。 backtest と forward の ギャップ は 必ず ある。
ここ、 業務 系 ML を 実 デプロイ して 監視 する とき と 完全 に 同じ 配分 で す。 自分 が 弊社 で やって いる JWW 図面 AI と 比べて も、 工程 配分 は ほぼ 同じ。 競馬 が 業務 系 ML の 練習 台 に なる 理由 が ここ。
第7章 「日本語 文献 が 薄い」 問題 と オープン 化 📚
最後 に、 1 ヶ月 通じて 強く 感じた こと を 書きます。
競馬 ML、 日本語 文献 が 異常 に 薄い。
理由 は 想像 つきます。
- 商用 で 成功 した 人 (= 大阪 / 札幌 馬券 裁判 の 当人 や、 機関 投資 家 系) は 手 の 内 を 公開 し ない。 それ は 競争 優位 の 直接 損失
- 個人 で やって いる 人 は note 有料 記事 や Discord で 細々 と やって いて、 検索 可能 な 場所 に 論文 - 実装 を 紐 付け た 解説 が 殆ど 無い
- 海外 (= 北米 / 香港 / 豪) は 学術 系 が 強く て、 上記 の 1973 Harville から 連綿 と JASA / Management Science / Royal Society に 論文 が 残って いる が、 日本語 で 紹介 する 動機 が 誰 に も 無い
結果 と して、 「日本 競馬 で やる 競馬 ML」 を 始めた 人 は、 日本語 で 検索 し ても 「血統 重視 AI で 回収率 2,870 %」 と か 「単勝 万馬 券 攻略 法」 と か 半分 オカルト 半分 商売 の 記事 ばかり が 出てきて、 学術 系 を 読みに 行く と 一気に 海外 論文 の 山 に 投げ込まれ ます。 これ、 入り口 として かなり 急 な 階段 です。
弊社 が この シリーズ を 出して いる 動機 の 一つ が ここ で、 「日本語 で、 学術 系 と 実装 を 紐付ける 入り口」 が 1 個 でも あれば 後続 が 入って くる、 と いう 期待 です。 競馬 ML に 限らず、 マイナー 領域 の 日本語 文献 の 薄さ は 業務 系 で も よく 出会う 課題 で、 弊社 の 建築 × AI シリーズ 本編 も 「JWW 自動 生成 を 日本語 で 紐解いた 例 が 無い」 か ら 書き 始めて います。
📌 本 記事 末尾 の 「参考 文献」 に、 弊社 が 1 ヶ月 で 読んだ 論文 リスト を 全部 並べ ました。 リンク は 全部 一次 ソース。 これ から 始める 人 は ここ から 入ると 急 階段 が ちょっと だけ 緩く なる はず。
第8章 forward 観測 開始 予定 と 結果 編 予告 ⏰
⚠️ forward 観測 の 主目的 は 「検証 ログ の 取得」 で あって、 自動 購入 ・ 営利 運用 で は ありません。 backtest と forward の 差分 を 数値 化 し、 odds drift / 戦略 選定 バイアス / サンプル 不足 を 後 から 検証 する ため の 記録 取り です。 購入 判断 ・ 投票 連携 手順 ・ 自動 化 の 実装 詳細 は 本 記事 で は 扱い ません。
本 記事 は 投稿 時点 で 一部 検証 / 起動 確認 が 進行中・予定 の 状態 を 含む 中間 報告 です。 backtest 系 タスク (= Benter MLE 再 学習 / 三連単 N=30 / S6_v2 年別 resampling レンジ / 1988-2025 長期 / S7-S10 設計) は 完了 済。 候補 抽出 系 (= MLE と (1,1) の 両 較正 path、 5 戦略 並列 出力、 検証 上限 額 固定、 smoke test 拡張) は 整備 中。 続いて 全 コード bug hunt + 始動 テスト 5 件 + GO / NO-GO 最終 判定 を 経て、 forward 観測 を 開始 する 設計 です。 NO-GO 判定 の 場合 は 起動 を 止めて 延期、 と いう 設計 を 事前 に 紙 に 書いて あり、 結果 編 で その 旨 を 報告 します。
📝 状況 注記 (= 投稿 時点 で 進行中 / 予定 の 項目 を 含み ます): モデル 側 (= MLE 再 学習、 三連単 N=30 backtest、 S6_v2 年別 resampling レンジ、 1988-2025 長期 backtest、 並列 戦略 設計) は backtest 完了 済。 続く 検証 段階 と して、 候補 抽出 ロジック (= MLE / (1,1) の 両 較正 path、 5 戦略 候補 出力、 検証 上限 額 の 固定、 smoke test 拡張) を 整え、 その後 「全 コード bug hunt + 始動 テスト + 観測 開始 の GO / NO-GO 判定」 と いう 流れ で 進め ます。 NO-GO 判定 が 出た 場合 は 観測 開始 を 延期 し、 結果 編 で その 旨 と 原因 を 報告 します。
検証 進捗 (= ✅ 完了 / 🛠 整備 中 / ⏳ 予定)
| STEP | 内容 | 状態 |
|---|---|---|
| ✅ | 三連単 N=30 backtest 結果 確認 (= N grid 完全版) | 完了 |
| ✅ | 単勝 10 年 backtest + 6 年 比較 | 完了 |
| ✅ | 全期間 MLE 値 で 戦略 re-validation | 完了 → 旧 S6 deprecated、 S6_v2 主力 候補 |
| ✅ | S6_v2 年別 resampling 参考 レンジ [130%, 249%] | 完了 |
| ✅ | 1988-2025 (= 38 年) 長期 backtest | 完了、 S6_v2 178% / 100%+率 79% |
| ✅ | 並列 戦略 S7-S10 設計 | 完了 |
| 🛠 | MLE / (1,1) 両 較正 path の 候補 抽出 ロジック | 整備 中 |
| 🛠 | 5 戦略 並列 候補 出力 + 検証 上限 額 固定 | 整備 中 |
| 🛠 | smoke test Part 1 (retention) / Part 2 (S7-S10) / Part 3 (MLE π ≠ (1,1) π) | 整備 中 |
| ⏳ | 全 コード bug hunt (= 3 環境) | 予定 |
| ⏳ | 始動 テスト 1-5 (= smoke / 抽象 設定 / 過去 race dry-run / 定時 経路 / 3 環境 同期) | 予定 |
| ⏳ | GO / NO-GO 最終 判定 | 予定 |
| ⏳ | forward 観測 開始 (= GO 判定 時 のみ) | 5/23 |
| ⏳ | 5/23 + 5/24 forward 観測 | 5/23-24 |
| ⏳ | 5/25 22:00 結果編 公開 | 5/25 |
5/25 月 22:00 の 「実戦 結果 編」 で 出す もの:
- 5/23 (土) と 5/24 (日) の 的中 率 ・ 回収 率 の 生 数字 (= 隠さず)
- モデル 出力 シグナル の 全 一覧 と 結果 (= 紙 で 並べる)
- Plackett-Luce 上位 N 通り の 命中 率 分布
- Benter blending の 効果 (= α / β を 動かして 仮想 ROI を 並べる)
- 購入 時 オッズ vs 確定 オッズ の 散布図 (= odds drift 検証)
- median ROI / trimmed mean ROI / 2025 除外 ROI / 最大 連敗 数 / 最大 DD / 1 日 あたり 損益 分布 / EV bucket 別 実績
- backtest と forward の ギャップ を 1 つ ずつ 見る
- 「2021 級 の 暴れ 年 が forward で どこ で 顔 を 出 す か」 の 観察
- (おまけ) 全 211,000 頭 血統 補完 の 進捗
- (おまけ) 「税金 を 半日 調べた 件」 の 後日 談 ← 万 が 一 黒字 が 出 て しまった 場合 のみ
📊 分散 込み 評価 の 予告: 三連単 系 の ROI は bets 数 が 少ない と 一発 の 高 配当 で 一気 に 動く ため、 結果 編 で は ROI 単体 で は なく、 (a) bets 数 ・ 的中 数 ・ 総 購入 額、 (b) 年別 ROI (= 2021 だけ 突出 して ない か)、 (c) 最大 ドローダウン、 (d) 年別 resampling 参考 レンジ、 (e) calibration curve、 (f) Brier score / log loss、 を 併記 します。 「ROI だけ 出して くる ML 系 記事」 に なら ない よう、 ここ は ちゃんと やります。
⚠️ backtest 自体 の 統計 的 リスク 4 点 (= 後続 で 検証 予定):
- 多重 比較 + 戦略 選定 バイアス: 882 戦略 の grid から 「最高 ROI」 を 拾った → 同じ 期間 で 「S6 が 200.3%」 と 言う と 戦略 選定 バイアス を 含む。 Bonferroni / FDR 補正 だけ で なく、 最終 的 に は train (モデル 学習) / calibration (α/β・isotonic) / validation (EV 閾値・N・馬券 種 選定) / final test (完全 未使用 期間) を 時系列 で 分離 した nested walk-forward で 再 評価 する 必要 が ある
- サンプル サイズ 不足: 単勝 EV ≥ 1.5 N=1 は 6 年 で 1,116 race / 当たり 265 件 → σ ≈ 40-50 pt は 不可避
- 2025 単年 上振れ: avg 200% は 2025 単年 350% に 引き上げ られ、 2020-2024 中央 値 は 170% 付近
- odds timing leak リスク: backtest は 確定 オッズ (= 締切後 確定 値) で EV 判定 して いる が、 実 投票 時点 では オッズ は 未 確定。 発走 直前 の odds drift で EV ≥ 1.5 が 崩れる 可能性 が ある (= 下記 補足)
後続 検証 では、 新 MLE 値 で 戦略 ROI を 再評価 + resampling 参考 レンジ (= bet 単位 だけ で なく race-day / 開催日 単位 の block resampling も 併用) + 2025 除外 5 年 avg + 2025 除外 trimmed mean / median ROI で 数値 化 します。 forward 1 ヶ月 で は 100 - 170% に 収束 する シナリオ を 想定 し つつ、 サンプル 数 次第 では 100% 未満 も 十分 あり得る もの と して 扱います。
⚠️ odds timing leak と は (= 一行 で): 「backtest は ゴール 後 に 確定 した オッズ を 知って いる が、 実 投票 時 は まだ オッズ が 動いて いる」 と いう ズレ の こと。 backtest で 「EV = 1.5 だから 賭ける」 と 判定 して も、 実 締切 直前 で オッズ が 動いて EV が 1.0 に 落ちて いる、 と いう こと が 起こり 得ます。 特に EV 閾値 戦略 で は odds drift が ROI に 直撃 し ます。 forward で は 購入 時 / 締切 直前 / 確定 の 3 時点 を 記録 し、 結果 編 で (購入 時 EV) vs (確定 EV) の 散布図 を 出す 予定。
正直 怖い。 backtest と forward が 一致 する とは 思って ない の で、 ズレた とき に どこ が 原因 か を 1 つ ずつ 潰す ライブ レポート に なる はず。 楽しみ で あり 恐怖 でも あります。
第9章 おわりに (= 中間 報告) 🌳
前回 記事 公開 後 の 1 ヶ月 で、 自分 は 「機械 学習 で 競馬 を 予想 する」 と いう 個人 プロジェクト を 想像 の 10 倍 真面目 に やる 羽目 に なって います。 そして そ の 過程 で、
「自分 が 思いついた」 と 思った アイデア は、 大抵 1986 - 1994 年 の 論文 に 既出 だった
と いう 事実 を 何度 も 思い知らされ、 そ の 度 に 「先人 すごい」 と なって います。 これ、 自分 の 本業 (= 建築 × AI、 JWW 図面 自動 生成) でも 全く 同じ こと が 起きて いて、 「自分 が JWW で 思いついた 構造化 手法、 1970 年代 の AutoCAD 系 論文 に 既出 だった」 が 何度 か あった。 マイナー 領域 の 個人 開発 は、 「先人 を 見つける 速度」 が ほぼ 開発 速度 に なる、 と 最近 信じ つつ あります。
GO / NO-GO 判定 を 経て、 弊社 の 競馬 AI は 検証 用 の 最小額 で、 実 運用 に 近い 条件 の forward 観測 を 開始 する 設計 です。 backtest 値 が forward で どこ まで 持つ か、 持た ない か。 持た ない とき に どこ が ズレ の 原因 か を、 Phase 1 - 10 の 学び を 1 つ ずつ 潰し ながら 検証 します。 NO-GO で 延期 に なった 場合 は 結果 編 で その 旨 と 原因 を 出す 予定 です (= 「forward の 失敗 を 報告 する」 章 が 増える だけ、 と いう 整理)。
これ、 業務 系 ML を 本番 デプロイ する 全 ケース と 同じ で、 「backtest と 本番 の ギャップ を 1 つ ずつ 詰める」 こと が 結局 一番 学び が 多い。 競馬 は 結果 が 3 - 30 分 で 出る ので、 業務 系 で 1 ヶ月 かかる 学習 ループ が 1 日 で 回る。 やっぱり 練習台 と して は 異常 に 優秀。
5/25 月 22:00、 また 会い ましょう。 (おそらく 意気消沈 した 顔 で)
🔁 最後 に もう 一度:
- 本 記事 は ML 検証 の 読み物 で あり、 馬券 購入 を 推奨 する もの で は あり ません。
- 数値 は 全部 hold-out / バックテスト 等 の 検証 結果。 実 購入 が ある 場合 も 検証 用 の 最小額 です。
- 20 歳 未満 の 方 は、 競馬 法 第 28 条 に より 勝馬 投票券 を 購入 ・ 譲り 受け する こと は できません。
- 投票 連携 ・ 自動 購入 ・ 外部 サービス 連携 の 実装 手順 は 本 記事 で は 扱い ません。 利用 する 場合 は、 JRA / IPAT 等 の 利用 条件、 通信 失敗、 締切 直前 の 混雑、 投票 成立 確認 を 含めて 自己 責任 で 管理 する 必要 が あり ます。
- データ 利用、 馬券 購入、 税務 処理、 依存症 リスク へ の 対応 は、 各自 の 責任 で 確認 して ください。 馬券 は 余剰 資金 で 適度 に。
困ったら → 厚労省 依存症 対策
関連 記事
- 前回: 番外編 「ROI 140% より 先 に 税金 が 気 に なった 話」
- (本編 「建築 × AI」 シリーズ 各 記事 は 公開 時 に リンク 追加)
主要 参考 文献 (= 弊社 が 1 ヶ月 で 読んだ もの、 可能 な 限り 一次 ソース ・ 出版社 ページ ・ 公式 ドキュメント を 優先)
確率 モデル の 古典
- Harville (1973) "Assigning Probabilities to the Outcomes of Multi-Entry Competitions" Journal of the American Statistical Association — 競馬 確率 モデル の 代表 的 な 初期 研究
- Plackett (1975) "The Analysis of Permutations" Journal of the Royal Statistical Society Series C — Plackett-Luce 元 論文
- Luce (1959) Individual Choice Behavior: A Theoretical Analysis (Wiley) — IIA 仮定 の 元
- Bradley & Terry (1952) "Rank Analysis of Incomplete Block Designs" Biometrika — pairwise 比較
- Henery (1981) "Permutation Probabilities as Models for Horse Races" Journal of the Royal Statistical Society B — 正規 分布 仮定 版
- Stern (1990) "Models for Distributions on Permutations" Journal of the American Statistical Association — ガンマ 分布 仮定 版
競馬 ML の 古典
- Bolton & Chapman (1986) "Searching for Positive Returns at the Track: A Multinomial Logit Model for Handicapping Horse Races" Management Science 32(8) — MNL の 競馬 応用 代表 研究
- Benter (1994) "Computer Based Horse Race Handicapping and Wagering Systems: A Report" Efficiency of Racetrack Betting Markets (Hausch, Lo & Ziemba 編、 Academic Press / 1994; 2008 再録 World Scientific) — 競馬 ML の 古典 的 代表 作
- Lo, Bacon-Shone & Busche (1995) "The Application of Ranking Probability Models to Racetrack Betting" Management Science 41(6) — 三連単 拡張
- Edelman (2007) "Adapting Support Vector Machine Methods for Horse Race Odds Prediction" Annals of Operations Research
インブリード ・ 血統
- Wright (1922) "Coefficients of Inbreeding and Relationship" American Naturalist — Wright COI 元 論文
- Todd et al. (2018) "Founder-specific inbreeding depression affects racing performance in Thoroughbred horses" Scientific Reports — 豪 サラブレッド 135,572 頭 + 創始 馬 257,249 頭 の 系譜 で、 近交 と 競走 成績 の 関係 を 検証
- McGivney et al. (2022) "Inbreeding depression and the probability of racing in the thoroughbred horse" Proceedings of the Royal Society B — 6,128 頭 × 297K SNP genotypes で F_ROH と 出走 可能 性 の 関係 (= F_ROH +10% → ever racing -7%)
ベット 配分
- Kelly (1956) "A New Interpretation of Information Rate" Bell System Technical Journal
- MacLean, Thorp & Ziemba (2010) The Kelly Capital Growth Investment Criterion (World Scientific)
較正
- Platt (1999) "Probabilistic Outputs for Support Vector Machines and Comparisons to Regularized Likelihood Methods" Advances in Large Margin Classifiers (MIT Press)
- Zadrozny & Elkan (2002) "Transforming Classifier Scores into Accurate Multiclass Probability Estimates" KDD 2002 — Isotonic 較正
機械学習 (= 弊社 が 採用 した 道具)
- Ke et al. (2017) "LightGBM: A Highly Efficient Gradient Boosting Decision Tree" NeurIPS
- Akiba et al. (2019) "Optuna: A Next-generation Hyperparameter Optimization Framework" KDD 2019
- Burges (2010) "From RankNet to LambdaRank to LambdaMART: An Overview" Microsoft Research Technical Report — ランキング 学習
- Arik & Pfister "TabNet: Attentive Interpretable Tabular Learning" (= arXiv 2019 / AAAI 2021)
使用 ツール
-
Claude Opus 4.7 (1M context) — 論文 整理、 設計 レビュー、 実装 補助 に 使用
- モデル 概要 ・ 性能 / 1M トークン context: Anthropic 公式 モデル 一覧 (ja)
- Claude Code 上 で の モデル 設定 (1M context 含む): Model configuration (en)
- LightGBM / Optuna — 学習 ・ ハイパラ 最適化
- Python (paramiko / pandas / pyarrow / scikit-learn) — 全 工程
- scikit-learn IsotonicRegression — 確率 較正
- TabNet (pytorch-tabnet) — Entity Embedding (= 試行 後 採用 見送り)
- 競馬 の 払戻 金 と 所得 税 の 一般 整理: 国税庁 タックスアンサー No.1490 / 最高裁 判決 (平成27年3月10日 / 平成29年12月15日)
- 私 の 睡眠 時間 — 1 ヶ月 で 平均 5 時間 (= 論文 と コード を 行き来 した 結果、 返却 不可)