税理士法人GrowUp / 実践共有
AIで競馬市場に勝てるか、
確かめた記録
結論は「勝てなかった」。
ただし、なぜ勝てないかを自分のデータで確かめられた。
2026.09 / takamichi ochi
CONCLUSION
先に結論
AIは市場と違うものを見ていた。 でも、それは締切までに価格に織り込まれ、控除率の壁を越えられなかった。
SETUP
用意したもの
「勝てる」と言うより「勝てない」と言う方が、ずっと多くのデータが要る。
データ取得はJRA-VAN Data Lab(月2,090円)→ mykeibadb → PostgreSQL。予測モデルは勾配ブースティング(LightGBM)。すべて自宅PC。
RULES
自分に課した4つのルール
AIは「勝てそうな結果」をいくらでも出せる。だから、結果を見る前に縛った。
この4つを守ると、「勝てた」報告はほとんど出なくなる。逆に言えば、守らない報告は信じない方がいい。
METHOD
進め方:市場の確率に、AIの情報を「足す」
市場(オッズ)を捨ててAIで当てるのではなく、市場を土台にAIで補正する。プロの勝者が使ってきた型。
(朝9:15のオッズ)
(過去走・騎手・厩舎など147項目)
(市場に AI の差分を足す)
(朝→締切の値動きを補正)
買う
回収率を確認
10 TESTS
試したこと(10本)と結果
| # | 仮説 | 結果(回収率=払戻÷投資) | 判定 |
|---|---|---|---|
| 1 | 市場より正確な勝率を作れるか | AI単体は市場に劣る。混ぜると僅かに上回る。同一オッズ帯で勝馬を並べ替えられる | △ 部分的に可 |
| 2 | 朝9:15の単勝で期待値1以上を買う | 0.77 / 0.70 / 1.11(年でぶれ、再現しない) | × 終了 |
| 3 | 発走10分前の単勝で買う | 0.10〜0.39。AIの情報は締切までに価格へ吸収 | × 終了 |
| 4 | 複勝なら残るか | 単勝と同じ吸収。差なし | × 終了 |
| 5 | 複勝の本命側は価格だけで勝てるか | 全帯・4年とも 1 未満(最高 0.99) | × 終了 |
| 6 | 馬連で「AIが嫌う馬」を外す | 仮説と逆。市場の方が先に割り引いていた | × 終了 |
| 7 | 馬連で確率の掛け算を効かせる(Benter型) | 確率は校正できたが、期待値1以上の帯で 0.46〜0.58 | × 終了 |
| 8 | 券種間の価格矛盾を取る(予想なし) | 13,316レースで無リスクの組み合わせ 0 件 | × 終了 |
| 9 | 頭数・クラス・場などでレースを事前に選ぶ | 2年連続で改善する属性なし | × 終了 |
| 10 | AIの1位馬を毎レース機械的に買う | 単勝 0.78・複勝 0.81。最終1番人気(0.80・0.85)に劣る | × 終了 |
FINDING 1
AIは、市場と違うものを見ていた
同じオッズ帯の馬を、AIの評価順に7段階へ分けると、実際の勝率がはっきり並ぶ。
| 何を入れたか | 何を入れなかったか |
|---|---|
| 過去5走の着順・タイム・上がり・斤量・距離 | 当日のオッズ・人気(一切なし) |
| 騎手・厩舎の直近1年の成績(縮約済み) | 馬・騎手の ID そのもの(丸暗記の防止) |
| 頭数・クラス・距離・コース・年齢・性別 | 当日の馬体重・天候・馬場(時点保証がない) |
| 過去走の当時のオッズ(履歴としてのみ) | 締切後にしか分からない値(自動テストで排除) |
FINDING 2
でも、その情報は締切までに価格へ吸収される
朝に見えた「AIと市場の差」は、発走10分前には半分以下になり、最終オッズでは消えている。
朝 9:15 に判断する
- AIの情報の重み(β)は 0.31。市場に無いものを持っている
- ただし朝→最終で価格が動く。中央値で +32%、20倍以上の馬は +41%
- AIが好む馬ほど締切までに買われ、払戻が縮む
- 期待値1以上を買った回収率:0.77 / 0.70 / 1.11(再現せず)
発走 10 分前に判断する
- AIの情報の重みは 0.13 まで低下。市場が同じことを知っている
- 価格の動きは小さいが、残った差も締切前10分で埋まる
- 期待値1以上と出た馬の回収率:0.10 / 0.39 / 0.30
- 複勝・馬連でも同じ現象を確認
「自分の確率 − 市場の確率」が大きい順に買うと、選ばれるのは推定誤差が上振れした馬になる(勝者の呪い)。これが控除率 20〜22.5% の壁を越えられない構造。
FINDING 3
一番わかりやすい比較:AIの1位馬 対 最終1番人気
2022〜2024年の9,082レース。閾値も選別も一切なし、毎レース100円ずつ機械的に買った場合。
| 買い方 | AIの1位馬(前情報のみ) | 最終1番人気(市場) | 差 |
|---|---|---|---|
| 単勝 100円 | 回収率 0.777(勝率 28.6%) | 回収率 0.798(勝率 33.8%) | −0.021 |
| 複勝 100円 | 回収率 0.809(複勝率 57.9%) | 回収率 0.849(複勝率 64.8%) | −0.040 |
| 単複 100円ずつ | 回収率 0.793(年 −11.5〜−13.7万円) | 回収率 0.824 | −0.031 |
| 一致率 | AIの1位馬と1番人気が同じ馬:59%。違うときのAIの1位馬は中央値で2番人気、回収率 0.75 前後 | ||
FINDING 4
予想を使わない道も、閉じていた
「モデルの誤差で選ぶから負ける」なら、モデルを使わなければいい。それも確かめた。
券種間の価格矛盾(裁定)
- 単勝・複勝・馬連の最終価格で、どの着順でも払戻が投資を上回る組み合わせを全レース走査
- 13,316レースで 0 件。最も近いレースでも投資の 3.4% 不足
- 先行研究(地方競馬で 175 レース中 2 件)と違い、JRA の3券種は互いに整合していた
レースの事前選別
- 頭数・クラス・競馬場・レース番号・芝ダ・距離を、結果を見る前に固定して層別
- 2022〜23 で良かった属性が 2024 でも良い、という再現は 1 つもなし
- 唯一残ったダートも、上位3件の大穴に払戻の 77% を依存。偶然の範囲
残っているのは外部データ(調教・パドック評価など)と、馬単・三連単の薄い市場。どちらも費用と手間に見合う見込みが立たず、ここで止めた。
TAKEAWAY
本業に持ち帰るもの:AIの出力を検証する型
競馬は題材にすぎない。「AIが良さそうなことを言う」場面は、仕訳の自動化でも面談メモでも同じ。
AIに「勝てましたか」と聞くと、勝てた気になる答えが返ってくる。「勝てないことを、どう確かめるか」を聞く方が、実務では役に立つ。
COST
費用と時間
| 項目 | 内容 | 金額 |
|---|---|---|
| JRA-VAN Data Lab | 公式データ配信。1か月で解約 | 2,090円 |
| PostgreSQL・Python・LightGBM | すべて無料。自宅PCで動く | 0円 |
| AI(Claude Code・GPT) | 普段の契約の範囲内 | 追加なし |
| 馬券 | 1円も買っていない(すべて過去データの検証) | 0円 |
その理由を、自分のデータで確かめられた。