競馬AI開発記録・第2話|バックテスト(過去データでの検証)
競馬AIを作り始めた、と前回書いた。
で、今どこまでできているのか。
開発記録を整理したら、過去のレースで予想を試し、いくつかの方式を比べるところまでは進んでいた。今回は、その数字を見ていく。
先に結果を書くと、基準にしている方式は回収率98.24%。計算上は610円のマイナスだった。
億の前に、まず100%が遠い。
これは過去データでの検証。実際に馬券を買った成績でも、1万円のAI財布を運用した結果でもない。
AIは何を見て予想しているのか
ボクが全部のコードを書いたわけではない。ChatGPTやCodexに手伝ってもらいながら作っている。
今回の基準は、オッズから計算した勝ちそうな度合いを出発点にして、過去の競走データで補正する方式だ。開発上は「市場残差モデル」と呼んでいる。
名前は難しいけど、オッズを見たうえで、過去の材料から予想を少し動かす、と考えると分かりやすい。
比較した別の方式では、過去の情報96項目に、オッズ由来の情報と出走頭数を加えている。条件を分けながら学ぶ「木モデル」というものも試した。
新しい方式なら強くなるのか。それを同じレースで比べた。
バックテストの条件|全レースを買う設定ではない
対象は2022年1月1日から2026年8月30日までの14,525レース。条件に合うデータがそろったレースだけなので、この期間の全レースという意味ではない。
学習には各年より前のデータを使う。2022年を調べるときは2021年、2023年を調べるときは2021〜2022年、という順番だ。
仮想購入の条件は共通にした。
- 券種は単勝で、各方式が最も高く評価した1頭を候補にする。
- 予想した勝率とオッズを掛けた値が1.10以上なら、100円買ったものとして計算する。
- 条件に届かなければ見送る。
この1.10は、AIの見積もりを使った選別条件だ。実際に10%儲かるという約束ではない。
オッズを読む処理は、発走予定10分前を判断時点にして、それ以前の途中オッズを選ぶ設計になっている。ただし、今回は保存済みの過去データを使った探索なので、実際の購入を再現できたとまでは言えない。
基準の方式は、346件買った計算で610円負け
14,525レースのうち、購入条件を満たしたのは346件。的中は86件だった。
| 項目 | 過去データでの仮想計算 |
|---|---|
| 購入件数 | 346件 |
| 的中件数 | 86件 |
| 購入した候補の的中率 | 24.86% |
| 仮想購入額 | 34,600円 |
| 仮想払戻額 | 33,990円 |
| 仮想損益 | −610円 |
| 回収率 | 98.24% |
回収率は、33,990円÷34,600円×100で計算している。
4回に1回くらい当たっていても、戻ってくる金額が足りなければ負ける。年1回当たればいい方のボクとはずいぶん違う数字だけど、買うレースも期間も違うので、そのまま勝負にはできない。
別の方式なら、100%を超える?
ここで方式を変えてみた結果も並べる。金額はすべて、各方式を別々に動かした仮想計算だ。
| 方式 | 購入件数 | 仮想購入額 | 仮想払戻額 | 仮想損益 | 回収率 |
|---|---|---|---|---|---|
| 基準の方式 | 346 | 34,600円 | 33,990円 | −610円 | 98.24% |
| オッズだけを基準にする方式 | 0 | 0円 | 0円 | 0円 | 算出なし |
| 基準とオッズの予想を半分ずつ混ぜる | 6 | 600円 | 0円 | −600円 | 0% |
| 木モデル | 58 | 5,800円 | 4,460円 | −1,340円 | 76.90% |
| 基準と木モデルを半分ずつ混ぜる | 41 | 4,100円 | 4,480円 | +380円 | 109.27% |
最後の方式だけ、100%を超えた。
ただ、買ったのは41件。2026年の対象分では購入条件を満たした候補が1件もない。これを見て、すぐに「勝てるAIができた」とは言いにくい。
それから、オッズだけの方式は今回の条件では購入がゼロだった。これは「1番人気を全部買ったらどうなるか」の実験ではない。購入していないので回収率も出していない。
この結果だけでは実戦に進めない
今回の数字には、まだ気になる点がある。
同じ過去の期間を、方式を変えながら何度も見ている。年ごとの学習を分けていても、何度も試すうちに、その期間に都合のいい方法を選んでしまう可能性は残る。
また、確定後の出走情報や、正常に競走を終えた馬を対象とする条件が含まれている。レース前には分からない事情まで、検証対象を選ぶ段階で使っている。そのため、当時の現場を完全に再現した検証ではない。
新しく試した木モデルも、予想勝率の数字が実際の勝ちやすさと合っているかを調整する工程は未実施だ。
なので、今回分かったのは、この条件で計算するとこうなった、というところまで。比較した方式への本番切り替えも行っていない。
とりあえず、負けた数字から残しておく
基準は98.24%。木モデルだけなら76.90%。混ぜたら109.27%だけど、購入は41件。
都合のいいところだけ使えば、ずいぶん違う話になりそうだ。でも、それをやるとボク自身が何を信じていいのか分からなくなる。
まずはこの結果を残す。
次は、過去の走る速さや対戦相手の情報を足した実験。材料を増やせば、少しはよくなるんだろうか。
記録:EXP0004/EXP0001。2026年9月15日時点の保存ログを使用。過去の実験結果を後日まとめた記録で、ログの作成日時は当時の予想確定日時ではない。