PythonやAIを勉強していると、一度は「何かを予測してみたい」と思います。
株価、売上、天気、スポーツの勝敗。
AIと予測は、なんとなく相性が良さそうに見えます。
私も、Google ColabとPythonを使って、何か予測モデルのようなものを作ってみたいと思っていました。
そこで今回、題材として選んだのがmini toto / Jリーグ対象試合です。
ただし、最初に大事なことを書いておきます。
この記事は、mini totoの購入やギャンブルをすすめるものではありません。
「AIで当てる方法」を紹介する記事でもありません。
あくまで、PythonとChatGPTを使って、AI予測モデルを作り、過去データで紙トレード的に検証してみた学習記録です。
結論から言うと、AIは単純な「全部ホーム勝ち」を少し上回る場面もありました。
ただし、「AIなら高精度で当たる」という結果ではありませんでした。
むしろ今回の一番の収穫は、予測精度そのものよりも、検証方法とデータ整備の大切さを体感できたことです。
この記事は、PythonやAI予測に興味がある初心者向けです
この記事は、次のような人に向けて書いています。
- Pythonで何か予測してみたい人
- AIや機械学習に興味はあるけれど、まだ初心者寄りの人
- Google Colabを使ってデータ分析を試してみたい人
- ChatGPTを使ってPython学習を進めたい人
- AI予測が本当に使えるのか、リアルな検証結果を知りたい人
逆に、「すぐ使える予想が知りたい」「どれを買えばいいか知りたい」という人向けの記事ではありません。
今回の主役はmini totoそのものではなく、AIと一緒に予測モデルを作り、結果を検証していく過程です。
AIを使えば何でも当たるのか。
Python初心者でも予測モデルらしいものを作れるのか。
作ったモデルの結果は、どうやって確かめればよいのか。
そういう視点で読んでもらえると、分かりやすいと思います。
今回やったこと:PythonとChatGPTでAI予測モデルを作ってみた
今回使ったのは、Google ColabとPythonです。
Google Colabは、ブラウザ上でPythonを実行できるサービスです。自分のパソコンに細かい環境構築をしなくても使えるので、Python初心者が試作するにはかなり便利です。
また、今回はChatGPTにも相談しながら進めました。
コードの修正、エラー対応、検証方法の見直し、モデル比較、この記事の構成整理まで、かなりAIと一緒に進めています。
今回の検証では、2024年〜2026年のmini totoデータを取得し、その中からJリーグ対象試合を中心に整理しました。
最終的には、Jリーグの5試合セットとして、行数1135、セット数227、開催回数122のデータを作ることができました。
ここまで聞くと少し難しく感じるかもしれませんが、やっていることは大きく分けると次の流れです。
- mini totoの過去結果データを集める
- Jリーグ対象試合だけに絞る
- チーム名の表記をそろえる
- AIモデルで予測する
- 単純な基準と比べる
- 本番に近い形で検証する
つまり、ただAIに「予想して」とお願いしたわけではありません。
過去データを整理し、モデルを作り、検証して、結果を読み解くところまでやってみました。
予測する値は「1・0・2」の3種類
今回の予測対象は、mini totoの試合結果です。
予測する値は、次の3つにしました。
| 値 | 意味 |
|---|---|
| 1 | ホーム勝ち |
| 0 | その他・引き分け |
| 2 | ホーム負け |
試した主なモデルや比較基準は、次の通りです。
- RandomForest
- GradientBoosting
- ExtraTrees
- LogisticRegression
- チーム力差モデル
- 全部ホーム勝ち基準
- 合議モデル
ここで大事なのは、AIモデルだけを比べたわけではないことです。
「全部ホーム勝ち」という、とても単純な基準も比較対象に入れました。
AIモデルを作ると、つい「どのAIモデルが一番良いか」だけを見たくなります。
でも、本当に大事なのは、単純な基準と比べて意味のある改善があるかどうかです。
この考え方は、今回かなり大事なポイントになりました。
最初の固定テストでは、AIが強く見えた
最初に行ったのは、固定テストです。
この段階では、RandomForestが「全部ホーム勝ち」より良い結果になりました。
| モデル | 的中数 | 対象試合数 | 的中率 |
|---|---|---|---|
| RandomForest | 92 | 189 | 48.68% |
| 全部ホーム勝ち | 80 | 189 | 42.33% |
この結果を見たときは、正直に言うと「AI、意外といけるのでは?」と思いました。
全部ホーム勝ちよりも的中率が高いので、AIモデルに意味がありそうに見えます。
ただ、あとから考えると、この検証は少し楽観的だった可能性があります。
実際に未来の試合を予測する場合、その時点で使えるのは過去のデータだけです。
固定テストで良く見えたとしても、それが本番に近い状況で再現できるとは限りません。
この章の学びは、固定テストだけで「AIが強い」と判断するのは危ないということです。
本番に近い検証にすると、AIの優位性は小さくなった
そこで、より本番に近い形として、ウォークフォワード検証を行いました。
ウォークフォワード検証というと難しく聞こえますが、考え方はシンプルです。
過去データだけで学習し、その次の開催回を予測する。
そして、またデータを少し進めて、次の開催回を予測する。
このように、実際に未来を予測する状況に近づけて検証しました。
結果は次の通りです。
| モデル | 的中数 | 対象試合数 | 的中率 |
|---|---|---|---|
| GradientBoosting | 189 | 430 | 43.95% |
| 全部ホーム勝ち | 185 | 430 | 43.02% |
| RandomForest | 179 | 430 | 41.63% |
| LogisticRegression | 171 | 430 | 39.77% |
| ExtraTrees | 170 | 430 | 39.53% |
固定テストではRandomForestが良く見えました。
しかし、本番に近いウォークフォワード検証にすると、最も良かったのはGradientBoostingでした。
そして、そのGradientBoostingも、全部ホーム勝ちをわずかに上回っただけでした。
差は、430試合中で+4的中。
的中率では、+0.93ポイントです。
この数字を見ると、「AIが圧勝した」とは言えません。
むしろ、検証方法を本番に近づけると、AIの優位性はかなり小さくなることが分かりました。
この章で見たいのは、細かい数字そのものではありません。
大事なのは、固定テストで良く見えた結果も、検証を厳しくするとかなり現実的な数字になるということです。
意外と強かった「全部ホーム勝ち」
今回やってみて意外だったのは、「全部ホーム勝ち」がかなり強かったことです。
もちろん、すべての試合でホームチームが勝つわけではありません。
それでも、ホームチームには一定の優位性があります。
そのため、何も考えずに全部ホーム勝ちとするだけでも、ある程度の的中率になってしまいます。
ここは、AI予測を考えるうえで大事なポイントだと思いました。
AIモデルを作ると、ついAIモデル同士の比較に目が行きます。
RandomForestとGradientBoostingではどちらが良いのか。
LogisticRegressionはどうなのか。
そういった比較も大切です。
でも、それ以上に大事なのは、「単純な基準と比べて本当に意味があるのか」です。
今回で言えば、全部ホーム勝ちという基準を大きく超えられなければ、AIモデルを作る意味はかなり限定的になります。
これは、仕事のデータ分析でも同じだと思います。
AIや機械学習を使う前に、まずはシンプルな基準と比べる。
そのうえで、本当にAIを使う意味があるのかを見る。
この考え方は、今回の大きな学びでした。
AIの自信度で絞ると、的中率は少し上がった
次に、GradientBoostingについて、AIが自信を持っている試合だけに絞る分析をしました。
AIモデルは、単に「1」「0」「2」と予測するだけではありません。
予測確率のような数値も出せます。
そこで、予測確率が高い試合だけに絞ったらどうなるかを見てみました。
| 条件 | 対象試合数 | 的中数 | 的中率 |
|---|---|---|---|
| 全体 | 430 | 189 | 43.95% |
| 予測確率0.50以上 | 180 | 94 | 52.22% |
| 予測確率0.55以上 | 131 | 66 | 50.38% |
| 予測確率0.60以上 | 87 | 42 | 48.28% |
全体では43.95%でした。
一方で、予測確率0.50以上に絞ると、的中率は52.22%まで上がりました。
ただし、対象試合数は430試合から180試合に減ります。
つまり、全試合を無理に当てにいくよりも、AIが比較的自信を持っている試合だけに絞ると、的中率は上がる傾向がありました。
一方で、予測確率0.60以上に絞ればさらに良くなる、というわけでもありませんでした。
ここも面白いところです。
AIの自信度が高いからといって、必ずしもそのまま的中率が上がり続けるわけではありません。
この結果から、AIは「全部の試合を当てる道具」というより、「見るべき試合を絞る道具」として使う方が現実的だと感じました。
チーム名の表記ゆれでAI予測が崩れた
今回、かなり勉強になったのが、チーム名の表記ゆれです。
実際の開催回を使ってモデル出力を確認しようとしたとき、試合一覧では略称が使われていました。
一方で、学習データ側では正式名に近い表記が使われていました。
| 試合一覧の表記 | 学習データ側の表記 |
|---|---|
| C大阪 | セレッソ大阪 |
| G大阪 | ガンバ大阪 |
| 横浜FM | 横浜F・マリノス |
| 川崎F | 川崎フロンターレ |
| 東京V | 東京ヴェルディ |
| FC東京 | FC東京 |
人間が見れば、C大阪とセレッソ大阪は同じチームだと分かります。
でも、AIやプログラムはそう判断してくれません。
表記が違えば、別のチームとして扱われてしまいます。
このズレにより、AIが過去データからチーム情報をうまく拾えず、予測が不自然になりました。
修正後は、全チームが過去データに存在する状態になりました。
この経験で、AIモデル以前にデータ整備が大事だと強く感じました。
どれだけモデルを工夫しても、入力データがずれていれば、予測は簡単に崩れます。
AIを使うと、ついモデルやアルゴリズムに目が行きます。
でも実際には、チーム名の名寄せのような地味な作業が、予測の土台になります。
この章の学びは、AI予測ではモデル以前にデータ整備が大事だということです。
AI単独ではなく、合議モデルも作ってみた
AI単独では、どうしても不安定な部分があります。
そこで、次に作ったのが合議モデルです。
合議モデルでは、次の3つの視点を組み合わせました。
| 要素 | 役割 |
|---|---|
| GradientBoosting | 過去データからパターンを学習するAIモデル |
| チーム力差モデル | チーム同士の力関係を見るシンプルな基準 |
| 全部ホーム勝ち基準 | ホーム優位を前提にした単純な比較対象 |
AIだけに任せるのではなく、複数の見方を組み合わせる。
この考え方は、実際にやってみるとかなり納得感がありました。
ChatGPTに相談しながら進める中でも、AIモデル単体の結果だけでなく、比較基準や危険度を見ることの大切さを感じました。
合議モデルは少し改善。ただし高精度とは言えない
合議モデルについても、ウォークフォワード検証を行いました。
対象は430試合です。
結果は次の通りです。
| モデル | 的中数 | 対象試合数 | 的中率 |
|---|---|---|---|
| 合議モデル | 199 | 430 | 46.28% |
| チーム力差モデル | 196 | 430 | 45.58% |
| GradientBoosting | 189 | 430 | 43.95% |
| 全部ホーム勝ち | 185 | 430 | 43.02% |
結果だけを見ると、合議モデルが最も良い成績になりました。
全部ホーム勝ちと比べると、+14的中。
的中率では、+3.26ポイントの改善です。
ここだけ見ると、合議モデルは一定の効果があったように見えます。
ただし、的中率は46.28%です。
「高精度で当たる」とは言えません。
ここを大げさに書くと、記事の方向性が変わってしまいます。
今回の結果は、あくまで「単純な全部ホーム勝ちより少し改善した」という程度です。
でも、PythonやAI予測の学習としては、このくらいの現実感がむしろ大事だと思います。
AIを使えば必ず大きく改善するわけではない。
でも、検証すると、どこに少し意味がありそうかは見えてくる。
ここが面白いところでした。
一番の発見は「危ない試合を見分ける」ことだった
今回の検証で一番面白かったのは、全体の的中率よりも、判断別・危険度別の結果でした。
まず、最終判断別の的中率は次の通りです。
| 最終判断 | 試合数 | 的中数 | 的中率 |
|---|---|---|---|
| 候補 | 58 | 34 | 58.62% |
| 本命候補 | 101 | 56 | 55.45% |
| 相手候補 | 137 | 67 | 48.91% |
| 見送り・波乱注意 | 134 | 42 | 31.34% |
「候補」や「本命候補」は比較的高い的中率になりました。
一方で、「見送り・波乱注意」は31.34%まで下がっています。
次に、危険度別の的中率です。
| 危険度 | 試合数 | 的中数 | 的中率 |
|---|---|---|---|
| 低 | 132 | 77 | 58.33% |
| 中 | 164 | 80 | 48.78% |
| 高 | 134 | 42 | 31.34% |
危険度が低い試合は58.33%。
危険度が高い試合は31.34%。
かなりはっきり差が出ています。
さらに、合議数別に見ると、次のようになりました。
| 合議数 | 試合数 | 的中数 | 的中率 |
|---|---|---|---|
| 3票一致 | 114 | 67 | 58.77% |
| 2票一致 | 244 | 115 | 47.13% |
| 1票だけ | 72 | 17 | 23.61% |
AI、チーム力差、ホーム基準の3つが一致した試合は58.77%。
一方で、1票しか一致しない試合は23.61%でした。
この結果を見ると、合議モデルは「全部を当てるモデル」というより、危ない試合を見分けるモデルとして使う方が現実的だと感じました。
AI予測というと、どうしても「当たるかどうか」に注目しがちです。
でも、実際には「どの試合は判断しやすそうか」「どの試合は危なそうか」を見るだけでも、データ分析としては十分に意味があります。
これは、仕事のデータ分析にも通じる考え方だと思います。
AIに正解を出してもらうのではなく、判断材料を増やす。
今回の検証では、その使い方の方が現実的だと感じました。
ChatGPTと一緒にやって分かったAI活用のリアル
今回の取り組みでは、ChatGPTにもかなり相談しながら進めました。
コードの修正、エラー対応、モデル比較、検証方法の整理、記事構成の検討など、いろいろな場面で使いました。
AIと一緒にやってみて感じたのは、ChatGPTはかなり強力な相棒になるということです。
ただし、全部を任せればよいわけではありません。
たとえば、モデルの的中率が出たとしても、その結果をどう読むかは人間側で考える必要があります。
固定テストで良い数字が出たからといって、それをそのまま信じてよいのか。
本番に近い検証になっているのか。
単純な基準と比べて、本当に意味のある改善なのか。
こうした問いは、AI任せにせず、自分でも考える必要があります。
今回で言えば、AIモデルを作ること以上に、検証の設計や結果の読み方が大事でした。
AIは答えを出す魔法ではありません。
でも、仮説を出したり、コードを書いたり、比較方法を考えたりする相手としてはかなり役立ちます。
Python初心者が一人でここまで進めるのは、正直かなり大変だったと思います。
でも、ChatGPTに相談しながら進めることで、エラーで止まっても、次に何を直せばいいか考えやすくなりました。
この体験自体が、今回かなり大きな学びでした。
今回の検証で学んだこと
今回のmini toto AI予測で学んだことを整理すると、次の通りです。
- PythonとChatGPTを使うと、初心者でも予測モデル作りに挑戦できる
- 固定テストだけだと、AIが強く見えやすい
- 本番に近いウォークフォワード検証では、AIの優位性は小さくなった
- 「全部ホーム勝ち」という単純な基準が意外と強かった
- AIモデル同士だけでなく、単純基準との比較が大事
- チーム名の表記ゆれを直さないと、予測が崩れる
- AIの自信度で絞ると的中率は上がるが、試合数は減る
- 合議モデルにすると少し改善したが、高精度とは言えない
- 「当てる」より「危ない試合を見分ける」使い方が現実的だった
- AIは答えを出す道具ではなく、一緒に検証する相手として使うと面白い
特に印象に残ったのは、データ整備です。
最初は、AIモデルを変えればもっと良くなるのではないかと思っていました。
でも実際には、C大阪とセレッソ大阪のような表記ゆれを直すことの方が、予測以前の土台として大事でした。
AI活用というと、どうしても高度なモデルや新しい技術に目が行きます。
でも、初心者が最初に学ぶべきなのは、データを整え、単純な基準と比べ、結果を冷静に見ることかもしれません。
これからPythonやAI予測を試したい人へ
今回やってみて、PythonやAI予測に興味がある初心者には、いきなり高精度を目指すよりも、小さく検証することをおすすめしたいと思いました。
最初から完璧なモデルを作ろうとすると、かなり大変です。
それよりも、まずは次のような流れで試す方が現実的です。
- 身近で興味のあるテーマを選ぶ
- 過去データを集める
- まずは単純な基準を作る
- AIモデルと単純基準を比較する
- 固定テストだけでなく、本番に近い検証も試す
- 表記ゆれや欠損データを丁寧に確認する
- 結果を大げさに受け取らず、冷静に見る
AI予測は、モデルを作るところだけが学びではありません。
むしろ、検証方法を考えたり、データを整えたり、結果をどう解釈するかを考えたりするところに学びがあります。
今回のmini toto予測は、その練習としてかなり面白い題材でした。
まとめ:AIは魔法ではない。でもPython学習の題材としてはかなり面白い
今回、PythonとChatGPTを使って、mini totoのAI予測に挑戦してみました。
結果だけを見ると、合議モデルは全部ホーム勝ちより少し良い成績になりました。
ただし、的中率は46.28%。
「AIなら高精度で当たる」と言えるものではありません。
むしろ今回の一番の学びは、AI予測の精度そのものよりも、検証方法とデータ整備の大切さでした。
固定テストでは良く見えた結果も、本番に近いウォークフォワード検証ではかなり現実的な数字になります。
また、チーム名の表記ゆれを直さないだけで、予測は簡単に崩れます。
AIは魔法ではありません。
でも、Python初心者がデータ分析に挑戦する相手としては、かなり面白い存在です。
AIに答えを出してもらうのではなく、AIと一緒に仮説を立て、検証し、失敗しながら学ぶ。
今回のmini toto予測は、その良い練習になりました。
「AIで何か予測してみたい」と思っている人にとって、今回のような検証は、予測精度以上に学びが多いテーマだと思います。

コメント