まえがき
趣味で競馬AIの開発をしている冷や飯というものです。
今回の記事では、競馬AIの出した勝率を元にして買い方を工夫しているうちに、シュミレーション上でですが回収率が100%を超えた買い方を見つけた話をしようと思います。
この記事では、実際に私が買い方を試行錯誤した様を追っていこうと思います。
前提
- 私の作成した競馬AIはLightGBMを使用しています。
- 1位、2-3位、中位、下位の4グループに分ける多クラス分類を行う方法を使っています。
- データはJRA-VAN DataLabから取得しています。
- 本記事内では、私が開発した競馬AIのことを冷や飯競馬AIと呼ぶことにします。
- 買い方は全て単勝式です。理由としては、還元率が高いからです。
- シュミレーションの学習データは2017~2020、検証データは2021~2024のデータで行います。
目標
競馬AIを作る上で、最低限回収率100%を超える必要があると思っています。
お金が減ると分かっている競馬AIの予想に乗っかるくらいなら、自分で予想した方が楽しいからです。
AIの予測結果
冷や飯競馬AIはレース情報を渡すと以下のようなデータを返してくれます。
例として、先日行われたジャパンカップ2025の予想を見てみましょう。

画像1列目が1位率、2列目が2,3位率です。
この予想では、マスカレードボールは1位率が65%、2,3位率が16%ほどであることがわかります。他の馬の1位率と比べると、圧倒的な勝率であることがわかります。実際、2着入選でしたのでこの予想はいい感じですね。
※ちなみに、1着だったカランダガンは海外馬であり、冷や飯競馬AIでは日本のデータしか渡していません。よって、過去の出走データがないのでめちゃくちゃ弱い予想をされています。
1. 単純に一番強い馬を買ってみる
まずは単に各レースで一番強い馬を買ってみようと思います。
それぞれのレースで、1位率が1番の馬の単勝を買ってみようと思います。
ジャパンカップ2025の場合、マスカレードボールを買うことになります。
結果
見方としては、
money : 払い戻し総額 / 購入総額
get_persent : 回収率
count : 的中件数 / 購入件数
hit_rate : 的中率
となっています。
的中率は27%ほどで、4回に1回ほど的中しているようです。
しかし、回収率としては81%ほどであり、買えば買うほど損してしまいます。
冷や飯競馬AIは集合知というオッズを超えることはできてないみたいです。
2. 他と差がある強い馬を買ってみる
的中率が上がれば、もしかして回収率が上がるかもしれない。
というわけで、勝率の1番手と2番手の差が離れているレースを買ってみたいと思います。
とりあえず、ジャパンカップ2025のマスカレードボールを買える0.25差で見てみましょう。
結果
的中率は45%に上昇、回収率は84%に上昇しました。
狙い通り的中率は上昇しましたが、結局堅い馬を買うだけになってます。
買うレースも、ざっと20分の1になっており、1日1レースしか買えないですね。
堅い馬を買うなら、もっと買うレースを増やしたい気持ちです。
3. 期待値を計算して買ってみる
単純な計算ですが、40%で勝つオッズ2倍の馬と20%で勝つオッズ10倍の馬では、どちらを買うべきでしょうか?期待値を計算すると、20%で勝つオッズ10倍の馬になります(詳細は期待値、とかで検索してください)。
冷や飯競馬AIでも、オッズと勝率から期待値を計算して、期待値が1番高い馬を買ってみようと思います。
ジャパンカップ2025の場合、アドマイヤテラを買うことになります。当たってるじゃん。
結果
回収率が65%に、的中率が0.7%に下がりました。
当たっている馬の平均オッズは90倍。
どうやら万馬券を狙いまくって外しまくる買い方になってしまったようです。
4. 期待値の差がある馬を買う
2番と3番のハイブリットをやってみましょう。
とりあえず、期待値として2の差があるものを出してみました。
結果
回収率が69%、的中率は0.6%でほぼ差がないですね。
やっぱり万馬券を狙いまくって外しまくる買い方です。
精査. 勝率がどうなってるか見てみる
冷や飯競馬AIが出した勝率ではそのまま使いにくそうですね。
どうなってるか見てみようと思います。
詳細確認
平均は0.2ほどで標準偏差も高いですね。
予想ですが、単勝100倍になるような馬で、勝率10%くらいある馬ばかりを買ってそうです。
勝率がちょっと高めな万馬券を買わないように工夫してみたいです。
というか色々やる前に確認すべきですね。
5. 勝率を工夫して買ってみる
上で言っている通り、勝率がちょっと高めな万馬券を買わないように工夫したいです。
もちろん、勝率がある程度高ければ買いたいので、色々考えた結果、勝率を累乗してみようと思いました。勝率10%は累乗すると勝率1%になります(0.1×0.1=0.01)ので、ある程度低い勝率を排除するのが目的です。
n乗した勝率とオッズを掛け合わせて期待値を求めたうえで、期待値の1番と2番の差がm以上のレースを買います。ここでのnとmは大量に計算することでちょうどいいところを探していきたいです。
結果
回収率124%!?!?(゚∀゚)キタコレ!!
何回も計算してみましたが、4乗して期待値の差が0.4以上というラインがよかったです。
ある程度安定して回収率100%を超えつつ、購入できるレースが多いです。
大体10レースに1レース買えて、的中率は7%ほどありますね。
1日に2~3レース買いつつ、2週間に1レース当てるくらいな感覚です。
個人的にはもっと買いたいですね......
平均するとオッズが18倍くらいの馬を当てているようです!
そう考えると、激熱で楽しそうですね。
改良点
- このシュミレーションでは確定オッズを使って期待値を計算しているため、厳密にはこの買い方をすることはできない
- もっと購入レースを増やしたい
- 理想としてはAIの勝率予想だけで購入したい
おわりに
今回、AIが出した勝率を累乗することで期待値を計算してみました。
厳密には期待値と呼んでいいかは微妙な感じがしますが。
AIの特徴量エンジニアリングを頑張っても成果が出ない人などいましたら、買い方の工夫も一つの選択肢として色々試してみるのはいかがでしょうか。
おまけ
以下のXアカウントで時々買目をつぶやくかもしれません。
もしよかったらフォローしてやってください。
https://x.com/hiyameshi_keiba





