本記事は、AIによる馬券戦略の開発・検証を記録する実験ログの第3回です。第1回・第2回で市場のオッズを利用する道が閉じたため、今回は予測モデルそのものを作り込みました。結果は否定的です。そして今回は、検証を始める前に「どこで手を止めるか」を決めています。
実験の目的
第1回では、オッズを加工して割安な馬券を探す手法がいずれも控除率の水準にとどまりました。第2回では、締切直前の資金移動に情報があることは確認できたものの、期待値をプラスに転じさせるには足りませんでした。
残された道は、市場より正確に着順を予測することだけです。
これまでのモデルが使っていたのは、過去成績・馬齢・斤量・馬体重・枠・距離・馬場という粗い変数でした。海外で成果を上げた先行研究は、いずれも20以上の作り込んだ変数を用いています。その意味で、まだ本気で試したとは言えない段階でした。
今回はそこを埋めます。
検証環境
| 項目 | 内容 |
|---|---|
| 対象 | 中央競馬、2023〜2026年 |
| 規模 | 165,666 出走馬 / 12,086 レース |
| 特徴量 | 41個(うち調教関連8個) |
| 検証法 | ウォークフォワード(2026年以降を検証期に使用) |
| 調教データ | データベース全体で1,183万本、うち検証期間で使用したのは214万本 |
設計上の判断:使えなかったデータ
作り込みを始めてすぐ、使えないデータがあることが分かりました。馬マスタに記録されている生涯成績です。
このテーブルには、馬ごとの成績が芝・ダート別、馬場状態別、距離帯別に集計済みで入っています。一見すると理想的な特徴量です。
しかしこれは「現在時点の累積成績」です。3年前のレースにこれを紐付ければ、そのレース以降の結果を含んだ情報を使うことになります。過去に戻って未来の成績を見ながら予想するのと同じで、バックテストの数字は実力以上に良く出ます。
そこで、集計済みのデータは使わず、レース結果の履歴から「そのレース時点まで」の成績を自前で積み上げる方式に切り替えました。手間はかかりますが、これ以外に正しいやり方はありません。
作った特徴量は次のとおりです。すべて当該レースより前の情報のみで構成しています。
- 芝ダート別・距離帯別・馬場状態別・競馬場別の過去複勝率
- 騎手・厩舎それぞれの過去複勝率
- 過去の平均着順、上がり3ハロン最速、休養明け日数、賞金累計
判定の設計
いきなり回収率を見ません。第2回で、107点の回収率98.2%に危うく騙されかけたためです。
最初に見るのはブレンド重みという指標です。モデルの予測と市場のオッズを統合する際、どちらをどれだけ信頼するかを機械に決めさせます。モデルに配分される重みが、モデルが市場に足せた情報の量を表します。
第1回の時点では、この値は −0.040 でした。「モデルは不要、市場だけ見ればよい」という判定です。
一度目の誤り
特徴量を投入した結果、重みは +0.371 に上昇しました。市場の重みが0.663ですから、モデルに36%程度の影響力が配分されたことになります。初めてモデルが仕事をしたように見えました。
しかし、この測り方には欠陥がありました。
重みを決める際に使ったモデルの予測が、モデル自身が学習に使ったデータ上の予測だったのです。機械学習の手法は学習データを部分的に記憶するため、そこでの予測は実力以上に良く見えます。その予測を材料に重みを決めれば、モデルの重みは構造的に過大評価されます。
学習期間を時系列で4分割し、モデルが一度も見ていないデータでの予測だけを使って測り直しました。
| 条件 | モデルの重み |
|---|---|
| 第1回(粗い特徴量) | −0.040 |
| 今回・誤った測り方 | +0.371 |
| 今回・正しい測り方 | +0.042 |
ほぼ元の水準に戻りました。 条件別の適性も、騎手や厩舎の成績も、市場が既に織り込んでいたということです。
第2回に続いて、これで2回目です。有望に見えた数値が、正しく測ると消えました。
停止条件の事前決定
ここで問題になるのは、どこで諦めるかです。
特徴量はいくらでも追加できます。モデルも複雑にできます。期間の区切り方も変えられます。試行を続ければ、いつかは良く見える数値が出ます。しかしそれは、2度騙された道をもう一度歩くだけです。
未使用のデータとして残っていたのは調教データでした。そこで、投入する前に停止条件を決めて記録しました。
調教データを投入し、正しい測り方でのブレンド重みが +0.15 に届かなければ、技術的な追求を終了する。
+0.15という数字は、直前の値である+0.042の3倍以上であり、実質的な改善と呼べる最低ラインとして設定しました。重要なのは、この基準を結果を見る前に決めたことです。
調教データの投入
坂路調教のデータは、4ハロンの総合タイムと各ハロンのラップが記録されています。実データで確認したところ、すべて10分の1秒単位で、ラップの積み上げも完全に整合していました。
ここで工夫が必要になります。坂路のタイムは、施設や馬場状態、その日の調教強度によって水準が大きく変わるため、絶対値では比較になりません。
そこで「その馬にしては速いか」を測る形にしました。
- 最終追い切りの4ハロンタイムと、終い1ハロンのラップ
- 直近5本の最速タイムと平均
- その馬のキャリア平均との差(負であれば普段より速い)
- 調教間隔、キャリアの調教本数
終い1ハロンは、追い切りでどれだけ伸びたかを示す指標です。競馬専門紙が載せる調教評価が拾おうとしている情報でもあります。それを生のラップから直接抽出したときに、市場が織り込んでいる以上のものが残るか。 これが最後の争点でした。
調教データが紐付いた出走馬は72.5%です。データ不足で判定できない状況ではありません。
結果
| 段階 | モデルの重み |
|---|---|
| 第1回(粗い特徴量) | −0.040 |
| 条件別適性・騎手厩舎・調子 | +0.042 |
| 調教データ追加 | +0.046 |
| 事前に決めた基準 | +0.150 |
動いたのは0.004でした。
予測精度でも同じです。
| log-loss(低いほど良い) | |
|---|---|
| 市場(オッズ由来) | 0.3920 |
| 自作モデル | 0.4415 |
| 統合 | 0.3904 |
調教データを入れる前が0.4418でしたから、改善は0.0003です。誤差の範囲と言うほかありません。
期待値によるバックテストも示しておきます。
| 手法 | EV閾値 | 点数 | 的中率 | 回収率 | 95%信頼区間 |
|---|---|---|---|---|---|
| 市場のみ | 1.00 | 2,398 | 29.3% | 82.4% | 72〜93% |
| 市場のみ | 1.10 | 1,657 | 24.9% | 75.2% | 63〜88% |
| 統合 | 1.00 | 4,558 | 12.4% | 65.9% | 55〜77% |
| 統合 | 1.10 | 3,237 | 11.7% | 60.8% | 47〜74% |
モデルを統合すると成績が悪化します。 わずかな重みが、モデルの苦手な人気薄の側へ選択を歪めるためです。最良は市場のオッズだけを使った82.4%ですが、その信頼区間の上限すら100%に届いていません。
基準は+0.15、結果は+0.046。決めたとおり、ここで技術的な追求を終了します。
「+0.046も一応プラスなのだから続けてよいのではないか」と考えることはできます。しかし、その判断を許さないために事前に数字を決めました。基準を後から動かすのであれば、最初から基準を設ける意味がありません。
3回の検証を通じた結論
| 検証した系統 | 結果 |
|---|---|
| 複勝の市場内アービトラージ | 控除率の水準 |
| ワイドの市場内アービトラージ | 控除率の水準 |
| 締切直前の資金移動 | 相関はあるが不足 |
| 条件別適性・騎手厩舎・調子 | 重み +0.042 |
| 調教データ | 重み +0.046 |
JRA-VANの公開データでJRAの市場を上回ることは、できませんでした。
ただし結論の範囲は正確に述べておきます。これは「この公開データと、これらの手法では見つけられなかった」ということであって、「エッジが存在しない」という証明ではありません。専門的に取り組む集団は、より良いデータと人員を持っている可能性があります。
実際の資金について
3回の検証を通じて、実際の馬券は1円も購入していません。
これは最初に決めた設計です。エッジが確立するまでは検証段階にとどめる、という方針を守りました。
もし第2回の途中で見えた「回収率98.2%」の時点で実際に資金を投じていれば、あるいは今回の「重み+0.371」を信じて進んでいれば、現在は損失を抱えていたはずです。どちらも後に消えた数値でした。
2度の誤検出で止まれたのは、事前に判定の基準を決めていたからです。回収率を追う実験でありながら、得られた最大の成果は、負ける前に止まる仕組みだったというのが正直なところです。
今後について
技術的な追求は終了しますが、記録は続けます。次回以降、この実験の問いをどう立て直すかを検討します。
本記事はAIが下書きを生成し、人間が公開可否を判断しています。掲載した数値はすべて実データによるバックテストの結果であり、恣意的な抽出は行っていません。本記事は情報提供を目的としたものであり、馬券の購入を勧誘するものではありません。

コメント