AIで競馬市場に勝てるか、3日間かけて確かめた話
結論から書くと、勝てませんでした。
ただ、なぜ勝てないのかを自分のデータで確かめられたので、その過程を残しておきます。
馬券の買い方の話ではなく、AIの出力をどう検証するかの話です。
やろうとしたこと
「AIで競馬を予測して儲かる」という話は昔からあります。本当かどうか、自分で確かめたくなりました。 やりたかったのは予想を当てることではなく、市場のオッズより正確な確率をAIが作れるか、 作れたとしてそれが控除率(JRAの単勝で20%)を越えて利益になるか、を数字で見ることです。
データはJRA-VAN Data Lab(月2,090円)から取り、自宅PCのPostgreSQLに貯めました。 2021〜2024年のJRA平地レース13,316本、時系列オッズは前日夕方から発走直後まで5分刻みで約2,500万行、合わせて23GBです。 予測モデルは勾配ブースティングで、過去5走の成績・騎手と厩舎の直近成績・頭数やクラスなど147項目を使い、 当日のオッズや人気は一切入れていません。実装はClaude Codeに任せ、GPTに設計のレビューをさせ、私は仕様を書いて結果を読んで次を決める役でした。
自分に課したルール
AIは「勝てそうな結果」をいくらでも出せます。条件を少し変えれば回収率100%超えの表はすぐ作れる。 だから、データを見る前に4つのことを決めました。
- 仕様書を先に書く。何を測り、何が出たら終了とするかを文章にしてから始める。途中で変えるときは必ず理由を記録する。
- 未来の情報を混ぜない。学習は2021〜2023年、検証は2024年。締切後にしか分からない値が混ざっていないかを、自動テストで毎回確認する。
- 2025年以降は開けない。最終テスト用に封印し、プログラムが読み込みを拒否する仕組みにした。結局、最後まで一度も開けませんでした。
- 判定基準は結果を見る前に固定する。「回収率のいい条件」を後から探さない。閾値や帯を先に決め、通らなければその枝は終了。
この4つを守ると、「勝てた」という報告はほとんど出なくなります。裏返すと、守っていない報告は信じない方がいい、ということでもあります。
試したこと
単勝から始めて、複勝、馬連、予想を使わない裁定、レースの事前選別、と10本の検証を順に行いました。 どれも、始める前に「これが出たら終了」を決めてから走らせています。回収率は払戻÷投資で、1.0が損益分岐です。
| # | 仮説 | 結果 | 判定 |
|---|---|---|---|
| 1 | 市場より正確な勝率を作れるか | AI単体は市場に劣る。市場と混ぜると僅かに上回る。同じオッズ帯の中で勝つ馬を並べ替えられる | 部分的に可 |
| 2 | 朝9:15の単勝で期待値1以上を買う | 回収率 0.77 / 0.70 / 1.11(年でぶれ、再現しない) | 終了 |
| 3 | 発走10分前の単勝で買う | 回収率 0.10〜0.39。情報は締切までに価格へ吸収される | 終了 |
| 4 | 複勝なら残るか | 単勝と同じ吸収。差なし | 終了 |
| 5 | 複勝の本命側を価格だけで買う | 全帯・4年とも1未満(最高0.99) | 終了 |
| 6 | 馬連で「AIが嫌う馬」を外す | 仮説と逆。市場の方が先に割り引いていた | 終了 |
| 7 | 馬連で確率の掛け算を効かせる | 確率は校正できたが、期待値1以上の帯で回収率 0.46〜0.58 | 終了 |
| 8 | 券種間の価格矛盾を取る(予想なし) | 13,316レースで無リスクの組み合わせ0件 | 終了 |
| 9 | 頭数・クラス・場などでレースを事前に選ぶ | 2年連続で改善する属性なし | 終了 |
| 10 | AIの1位馬を毎レース機械的に買う | 単勝0.78・複勝0.81。最終1番人気(0.80・0.85)に劣る | 終了 |
一番わかりやすい結果
最後の検証が、いちばん腑に落ちました。2022〜2024年の9,082レースで、AIが1位と予測した馬を、閾値も選別もなしに毎レース100円ずつ買う。 同じレースで最終1番人気を買った場合と比べます。
| 買い方 | AIの1位馬 | 最終1番人気 |
|---|---|---|
| 単勝100円 | 回収率 0.777(勝率 28.6%) | 回収率 0.798(勝率 33.8%) |
| 複勝100円 | 回収率 0.809(複勝率 57.9%) | 回収率 0.849(複勝率 64.8%) |
| 単複100円ずつ | 回収率 0.793(年間で約12〜14万円の損失) | 回収率 0.824 |
AIの1位馬は当たったときの払戻が高いのですが、的中率の差を埋められません。3つの買い方×3年の9通りすべてで1番人気に負けました。 AIと1番人気が同じ馬を指すのは59%で、違うときのAIの1位馬は中央値で2番人気。つまりAIは「市場が最終的に上位にする馬」をだいたい当てているのに、市場の方が少し正確でした。
わかったこと
AIは市場と違うものを見ていました。同じオッズ帯の馬をAIの評価順に7段階に分けると、40倍以上の馬で最低群と最高群の実勝率が8.6倍違います。 市場が同じ値段を付けている中に、当たりやすい馬と当たりにくい馬が混ざっていた、ということです。
ただ、その情報は締切までに価格へ吸収されます。朝9:15の時点でAIの情報が持つ重みは0.31でしたが、発走10分前には0.13まで下がり、 AIが好む馬ほど締切までに買われて払戻が縮みます。複勝でも馬連でも同じことが起きました。 「自分の確率と市場の確率の差」が大きい順に買うと、選ばれるのは推定誤差が上振れした馬になる。この構造がある限り、控除率の壁は越えられません。
予想を使わない道も試しました。単勝・複勝・馬連の最終価格で、どの着順になっても払戻が投資を上回る組み合わせがあるかを全レース走査しましたが、0件。 JRAの3つの券種は互いにきれいに整合していました。レースを属性で事前に選ぶ案も、2年連続で改善する属性は1つもありませんでした。
残っているのは、調教やパドック評価のような外部データと、馬単・三連単のような薄い市場です。 どちらも費用と手間に見合う見込みが立たず、ここで止めました。
本業に持ち帰るもの
競馬は題材にすぎません。「AIが良さそうなことを言う」場面は、仕訳の自動化でも面談メモの要約でも同じです。 今回いちばん役に立ったのは、予測モデルそのものではなく、先に基準を書く・時間の向きを守る・最後の検証用データを封印する・止める基準を持つ、という検証の型でした。 AIに「勝てましたか」と聞くと、勝てた気になる答えが返ってきます。「勝てないことをどう確かめるか」を聞く方が、実務では役に立ちます。
費用と時間
仕様書から最終報告まで3日間(2026年9月6日〜8日、データ取得の待ち時間を含む)。費用はJRA-VAN Data Labの1か月分2,090円だけで、 PostgreSQLやPython、LightGBMは無料、AIは普段の契約の範囲内です。馬券は1円も買っていません。 成果物は仕様書1本、設計文書15本、報告書31本、プログラム29本。データ23GBは、検証が終わったので削除します。
資料
検証の一覧と主要な数字をスライドにまとめています。
まとめスライド: deck を開く