世の中の変数をすべて集めれば、サッカーの勝敗くらい計算できるはずだ。
本気でそう考えて、Claude CodeでJリーグの勝敗を予測するAIを作りました。
集めた試合は約1.7万、特徴量は20種類以上、モデルはLightGBM。
そのAIの予想でtotoを買った結果は、全然当たりませんでした。
外れた理由は、AIの精度不足だけではありません。
1試合45.7%の的中率と、13試合すべてを当てるくじの構造の間には、想像以上の距離がありました。
この記事でわかること
- toto予想AIを自作したときの的中率(2024〜2025年の2,280試合で45.7%)
- AIの予想でも13試合全的中が約2.6万分の1にとどまる理由
- Claude Codeで作った予測システムのデータ・特徴量・モデルの中身
- 「ラプラスの悪魔」の発想で作って分かった、AIに足りない変数
2026年10月27日時点の、自作システムのバックテスト結果とtotoの公表条件をもとに書いています。
PARTS LIST /目次
toto予想AIの結論:的中率45.7%、13試合全的中は約2.6万分の1
toto予想AIを自作した結論は、「1試合ごとの予想はそこそこ当たるが、13試合全的中にはまず届かない」です。
私のAIは、2024〜2025年のJリーグ2,280試合で的中率45.7%を出しました。
ホーム勝ち・引き分け・アウェイ勝ちの3択なので、でたらめに選ぶ33.3%よりは12ポイント以上高い数字です。
それでも、totoの1等は13試合をすべて当てる必要があります。
45.7%を13回掛け合わせると約0.0038%、つまり約2.6万回に1回です。
AIはでたらめより約60倍有利です。
ただ、60倍有利になっても、2.6万分の1は「ほぼ当たらない」の範囲から出ていません。
(13試合の結果が互いに独立で、どの試合も的中率45.7%と仮定した概算です。)
作ったのはJリーグの勝敗を確率で出すシステム
作ったのは、Jリーグの対戦カードを入れると、ホーム勝ち・引き分け・アウェイ勝ちの確率を返すシステムです。
totoの対戦表をCSVにしてコマンドを1回流すと、13試合ぶんの予想が並びます。
出力はこんな形です。
match_no home_team away_team prob_home prob_draw prob_away predicted_result
1 福岡 神戸 36.7% 24.5% 38.8% A
2 鹿島 FC東京 63.3% 18.6% 18.1% H
確率で出すのは、totoで「この試合は自信がない」を判断したかったからです。
1試合目のように3つの確率が近い試合は、AIにとっても五分五分に近い試合でした。
外れた原因は精度よりくじの構造
外れたことの大半は、AIの精度ではなく、totoが「13試合の全的中」を求める構造で説明できます。
1試合ごとの的中率を45%から50%に上げても、13試合全的中は約8,200分の1にしか縮みません。
13乗の壁
的中率45%→約3.2万分の1、50%→約8,200分の1、60%→約770分の1。1試合の精度を数ポイント上げる努力は、13乗されるとほとんど消えてしまいます。
作る前の私は、この掛け算をまったく意識していませんでした。
ラプラスの悪魔を信じて作り始めた
作り始めた動機は、精度の見積もりではなく、ほとんど信仰に近い発想でした。
サッカーの勝敗はランダムに見えるけれど、本当は原因の積み重ねで決まっているはずです。
選手の調子、移動の疲れ、天気、過去の対戦成績。
原因になる変数を全部集めれば、結果は計算で出せる。
そう考えていた時点で、私はラプラスの悪魔の側に立っていました。
すべての変数が分かれば未来は計算できる、はず
ラプラスの悪魔とは、「ある瞬間のすべての物体の位置と力を知る知性がいれば、未来も過去も完全に計算できる」という思考実験です。
フランスの数学者ラプラスが、1814年の『確率の哲学的試論』の序文で書いた考えが元になっています。
皮肉なことに、ラプラス本人は同じ本で、人間の知性はその知性に遠く及ばないと書き、だから確率が要るのだと論を進めています。
私はその前半だけを都合よく受け取って、「変数を集めれば集めるほど悪魔に近づける」と考えていました。
量子力学はいったん見なかったことにする
物理学の世界では、量子力学の登場でラプラスの悪魔は成り立たないとされています。
ただ、サッカーの勝敗に量子のゆらぎが効いているとは考えにくい。
そこで量子力学はいったん脇に置き、「ボールと選手のレベルでは世界は決定論で動いている」と割り切りました。
逃げ道をふさいだうえで、それでも当たらないなら、足りないのは変数のほう。
この前提が、後で自分の首を絞めます。
Claude Codeで作ったtoto予測システムの中身
toto予測システムは、設計から実装、検証までの大半をClaude Codeに任せて作りました。
私が決めたのは「何を予測したいか」と「どのデータを使うか」で、スクレイピングや学習のコードはほぼClaude Codeが書いています。
全体の流れは、データを集めて特徴量にし、モデルで確率を出す3段階です。
flowchart LR
A["試合結果・オッズ<br>(J1〜J3 約1.7万試合)"] --> B["特徴量の生成<br>Elo・順位差・観客数など"]
B --> C["LightGBMで学習<br>Optunaで調整"]
C --> D["勝ち・分け・負けの確率"]
D --> E["totoの13試合の予想"]
環境はPython 3.13、データベースはDockerのPostgreSQLです。
動作を確認したライブラリの版は、LightGBM 4.7.0、Optuna 4.9.0、pandas 3.0.5でした。
データ:J1〜J3の約1.7万試合
試合データは、Jリーグ公式データサイトのJ1・J2・J3全試合と、Football-Data.co.ukのJ1の試合結果とオッズを使いました。
期間は2012年からで、学習に使った試合は約1.7万試合です。
2026年2〜6月の特別大会「百年構想リーグ」も学習に入れ、PK戦の決着は90分のスコアで引き分けとして扱いました。
データを集める段階で、変数を全部集める計画は早くも崩れています。
選手ごとの出場記録や怪我の情報は、試合ごとにページを読みにいく必要があり、手が出ませんでした。
特徴量:Elo・順位差・観客数・Dixon-Coles
特徴量は、その試合が始まる前に分かっている情報だけで作りました。
- Eloレーティング:勝敗でチームの強さを更新し続ける指標
- 順位差・直近5試合と10試合の成績・ホームとアウェイ別の勝率
- 得点と失点の平均・直接対決の成績・休養日数
- ホームの観客動員数(クラブの規模の代わり)・降格圏との勝点差
- Dixon-Colesモデル:得点から攻撃力と守備力を推定した勝敗確率
効いたのは、Eloの差とDixon-Colesの確率でした。
試合の勝敗を一番よく説明するのは、結局「どちらが強いか」です。
変数を増やすほど悪魔に近づくはずが、上位はチームの強さを別の角度から測った指標ばかりでした。
モデル:LightGBMをOptunaで調整
予測モデルはLightGBMで、ハイパーパラメータはOptunaで50回試して選びました。
選び方は、2021・2022・2023年の各年を「それより前の年で学習して、その年で検証する」時系列の交差検証です。
最後は2024〜2025年の試合で、学習に一度も使っていない成績を測りました。
同じ日に行われた試合を1試合ずつ処理していたため、後から処理した試合の順位差に、同じ日の他の試合の結果が混ざっていました。試合前には分からないはずの情報です。日単位でまとめて処理するように直し、あわせて降格枠を年度ごとの規定どおりに直して学習し直しました。Claude Codeが書いたコードでも、こうした「未来の情報のもれ」は自分で疑わないと見つかりません。
バックテストで見えたAIの限界
テスト期間の2,280試合での成績は、的中率45.7%でした。
数字だけ見ると悪くありません。
ところが、比べる相手を変えると、AIの立ち位置がはっきりしました。
「何も考えない予想」との差は小さく、「市場の予想」にはわずかに届かず、引き分けはほとんど当てられない。
この3つが、AIの限界の正体です。
いつもホーム勝ちでも41%当たる
検証データの結果の内訳は、ホーム勝ち41.0%、アウェイ勝ち34.2%、引き分け24.9%でした。
つまり、全試合「ホーム勝ち」と答えるだけで約41%当たります。
約1.7万試合を集めて20種類以上の特徴量を作ったAIは、そこから約5ポイント上積みしただけでした。
5ポイントは確かな差ですが、ラプラスの悪魔を名乗るには心細い数字です。
ブックメーカーのオッズに勝てない
ブックメーカーPinnacleのオッズから逆算した確率と比べると、AIの予測は確率の精度でわずかに負けていました。
J1のオッズがある750試合で、確率のずれを測るLog Lossは、AIが1.0636、Pinnacleが1.0511です(小さいほうが正確)。
的中率だけならAIが45.6%、市場が45.2%と並んでいます。
ただ、AIが選んだ結果にオッズどおり賭けたバックテストでは、889件で回収率がマイナス0.8%でした。
市場は、私が集めていない情報までオッズに織り込んでいます。
引き分けはほぼ当てられない
一番手こずったのが引き分けです。
3つの確率のうち一番高いものを選ぶ方法では、AIが引き分けを予想する割合は1%未満でした。
引き分けの確率が、ホーム勝ちかアウェイ勝ちの確率を上回ることがほとんどないからです。
そこで、引き分けの確率が最大の確率に6ポイント以内まで迫ったら「引き分け」と答えるルールを足しました。
DRAW_MARGIN = 0.06
def _decide_result(proba):
"""予測確率(A,D,Hの順)からH/D/Aを決める"""
prob_away, prob_draw, prob_home = proba[0], proba[1], proba[2]
top_non_draw = max(prob_away, prob_home)
if prob_draw + DRAW_MARGIN >= top_non_draw:
return "D"
return "H" if prob_home >= prob_away else "A"
このルールで、実際の引き分けを当てた割合は1.0%から9.8%に上がりました。
全体の的中率は45.7%から45.6%と、ほぼ変わっていません。
それでも、引き分けの9割は外します。
引き分けの割合が約25%なら、totoの13試合には平均3試合ほど引き分けが混ざるので、ここで取りこぼすと全的中は遠のきます。
実際にtotoを買ったら全然当たらなかった
バックテストの数字を手に、実際にtotoを買いました。
結果は全然当たりませんでした。
AIが出した確率を信じて買っても、くじの結果は容赦がありません。
冷静に計算し直すと、これは「AIが壊れていた」のではなく「くじの確率どおり」の結果でした。
45.7%を13回掛けると0.004%
1試合の的中率45.7%のAIでtotoを13試合予想すると、当たる試合数の期待値は約5.9試合です。
13試合中6試合前後が当たり、半分以上は外れるのが平均的な結果になります。
3等ですら、およそ240回買って1回の計算です。
「AIなら3等くらいは当たるだろう」という期待は、この表を作った時点で消えました。
払戻率50%のくじで期待値は勝てない
totoは1口100円で、売上の50%が当せん金に回ります(1等が当せん金の70%、2等と3等が15%ずつ)。
平均すると、100円で買ったくじから戻ってくるのは50円です。
ブックメーカーのオッズにすら勝てなかったAIが、50%を差し引かれるくじで長期的にプラスを出すのは難しい。
勝てる可能性があるとすれば、キャリーオーバーで1等の当せん金が積み上がっている回だけです。
的中率45%は「13試合中6試合くらい当たる」という意味で、「45%の確率で当たる」ではありません。13試合すべてを当てるtotoでは、1試合の的中率を13乗した数字が当せん確率の目安になります。AI予想サービスの的中率を見るときも、何に対する的中率なのかを確かめてください。
ラプラスの悪魔に足りなかった変数
量子力学を脇に置いても、私のAIは悪魔になれませんでした。
足りなかったのは、計算の力ではなく変数です。
しかも、足りない変数の多くは「データとして存在しない」か「集めるのが現実的でない」ものでした。
悪魔の前提である「すべての変数を知る」が、最初の一歩から成り立っていなかったわけです。
怪我・出場停止・監督交代はデータにない
予測に効きそうなのに、私のデータに入っていない変数を並べると、次のとおりです。
Eloや順位差は、こうした変数の結果がにじみ出た「影」です。
影を何本集めても、本体の情報には届きません。
ニュースで補正しても届かない領域
足りない変数を補うため、試合ごとに直近のニュースを調べて確率を補正する仕組みも作りました。
最初はLLMのコマンドラインツールで自動化しましたが、タイムアウトが多くて2026年9月14日にやめています。
いまはClaude Codeのスキルとして、Claudeが対戦カードごとに負傷や出場停止をWeb検索で確かめ、根拠があるときだけ確率を補正する手順にしています。
ただ、ニュースで分かるのは「主力が出ない」程度までです。
その選手が当日どれだけ走れるか、審判の笛がどちらに吹かれるか。
試合を決める変数の多くは、試合が始まるまで誰にも分かりません。

変数を全部集めるつもりが、集められない変数の一覧ができあがりました。
toto予想AIでよくある質問
toto予想AIについて、作って買った立場から、よく聞かれそうな疑問に答えます。
数字は、私の自作システムの2024〜2025年のバックテストと、totoの公表条件にもとづいています。
AI予想サービス全般の成績ではない点に注意してください。
Q1. toto予想AIの的中率はどれくらいですか?
A1. 私の自作AIでは、2024〜2025年のJリーグ2,280試合で45.7%でした。
3択をでたらめに選ぶと33.3%、いつもホーム勝ちと答えると約41%なので、それよりは高い数字です。
Q2. AIでtotoの1等は当たりますか?
A2. 期待するのは難しいです。
1試合の的中率が45.7%でも、13試合すべてを当てる確率は約2.6万分の1です。
でたらめに選ぶ約160万分の1よりは約60倍有利ですが、ほぼ当たらない範囲に変わりはありません。
Q3. AIは引き分けを予想できますか?
A3. ほとんどできません。
一番高い確率を選ぶ方法では、引き分けを予想する割合が1%未満でした。
引き分けに寄せるルールを足しても、実際の引き分けを当てられたのは9.8%です。
Q4. AIはブックメーカーのオッズより当たりますか?
A4. 私のAIは、確率の精度でわずかに負けました。
J1の750試合で、確率のずれを測るLog LossはAIが1.0636、Pinnacleが1.0511です。
的中率は45.6%と45.2%でほぼ並んでいます。
Q5. 個人でもtoto予想AIは作れますか?
A5. 作れます。
私はJリーグ公式データサイトとFootball-Data.co.ukのデータを使い、コードの大半をClaude Codeに書かせました。
ただし、学習に試合後の情報が混ざる「リーク」には自分で目を光らせる必要があります。
Q6. AIで予想すればtotoで儲かりますか?
A6. 長期的には難しいです。
totoは売上の50%が当せん金に回るくじで、平均すると100円が50円になります。
市場のオッズに勝てないAIでは、この差を埋められません。
まとめ:未来は読めなくても確率は測れる
ラプラスの悪魔になるつもりで作ったtoto予想AIは、的中率45.7%で、totoは全然当たりませんでした。
ただ、数字を見直すと、AIが何もできなかったわけでもありません。
テスト期間で「ホーム勝ちの確率50〜60%」と予想した380試合は、実際に54.7%がホーム勝ちでした。
未来を言い当てることはできなくても、「どれくらい起こりそうか」はかなり正確に測れていたわけです。
AIにできるのは未来の予言ではなく、不確かさの大きさを数字にすることでした。
ラプラス本人が確率論の本を書いたのも、人間が悪魔になれないからでした。
200年遅れで、同じところに着地した気分です。
次に使うなら、この確率は「当てる」ためではなく、「自信のない試合を見分ける」ためでしょう。
的中率50%でも約8,200分の1です。数字を1回変換するだけで、予想サービスの見え方が変わります。
続きを追う:X(@Tom_Java_Tech) / RSS
途中経過は、また書きます。

