このブログには広告が含まれています
Python素人だった私が独学でAI競馬予想モデルを作ったら、バックテストで衝撃の数字が出た話【非エンジニアのAI実装記①】
こんにちは!🏇
今日からこのハンモックドットコムで、ちょっと変わった連載を始めようと思います。テーマは、AI(機械学習)で競馬予想モデルを本気で作った話。
しかも書いてる本人、プログラミングはWordPressをいじる程度の完全な素人。「Python?蛇?」っていうレベルからのスタートでした。
え、ど素人なのに?大丈夫だったの?
大丈夫じゃなかった(笑)。でも、半年〜1年くらいがんばったら、ここまでは行けたっていう記録を全部書こうと思って。
たどり着いた数字はこちら👇
| 指標 | 結果 | どういう意味? |
|---|---|---|
| AUC | 0.86 | AIの賢さスコア。0.5は無能、1.0が完璧 |
| バックテストROI | 330〜800% | 過去のレースで「もし買ってたら」の儲け率 |
| 実機運用 | 今週スタート | いよいよリアルなお金で馬券を買い始める段階 |
ROI 800%!?それ本当に儲かるってこと?
そこは正直に言うと、過去データで試した数字はあくまで「最大値」。本番ではガッツリ下がる可能性もある。その現実も含めて、全部このブログに書いていくつもり。
⚠️ 念のための前置き
この記事は「絶対に儲かる方法」「必勝法」みたいな話じゃなくて、AIの使い方の一例として競馬データを扱った記録です。ギャンブルを勧めるものではありません。
目次
- はじめに:素人でもAIで結果は出せるのか?
- なんで「競馬AI」を選んだのか
- 使った道具(素人なりの選び方)
- データ集めが9割:地味だけど大事な作業
- AUC 0.86までの道のり
- ROI 330〜800%をどう見るか(正直な話)
- 次のステップ:今週から本番スタート
- これから書いていきたいこと
- 同じように「AIをちょっと触ってみたい」あなたへ
🤔 はじめに:素人でもAIで結果は出せるのか?
「AIで何か作ってみたい」って思っても、「自分エンジニアじゃないし…」って詰むよね。
完全にそれ。私もそうだった。本業はブログ運営で、コードはせいぜいWordPressのテーマをいじる程度だったから。
それでも半年〜1年くらい色々やった結果、AUC 0.86・過去データのROI 330〜800%まで行けました。
このブログのコンセプトはシンプルです。
| 違い | |
|---|---|
| 専門書をなぞるだけ | ❌ |
| 「ChatGPTに聞いたらこうなりました」 | ❌ |
| 素人の自分が、本当に手を動かして結果を出した記録 | ✅ |
を、中身はちゃんと正確に・説明はわかりやすく書いていきます。
第1回は、ここまでで何があったかをざっくり全部見せる回にしました。
🐎 なんで「競馬AI」を選んだのか
そもそもなんで競馬選んだの?AIなら他にもいろいろあるじゃん。
実は、機械学習を学ぶのに最高の素材だったんだよ。理由は3つ。
| # | 理由 | どういうこと? |
|---|---|---|
| 1 | データと答えがハッキリしてる | 馬・騎手・コースのデータ→「3着以内に入ったか」で答え合わせできる |
| 2 | データがたくさんある | netkeibaやJRA公式から何十年分も集められる |
| 3 | 当たれば楽しい | やる気が続く=独学が続く |
3番目、半分ふざけてる?
半分本気(笑)。独学って続かないと意味ないから、「うまくいったら週末ちょっとワクワクするテーマ」を選んだのは大正解だった。
🛠️ 使った道具(素人なりの選び方)
最終的に落ち着いた組み合わせはこんな感じ。
| 役割 | 使ったもの |
|---|---|
| プログラミング言語 | Python |
| データの整理 | Pandas / NumPy |
| 機械学習 | scikit-learn / LightGBM / XGBoost |
| データ集め | requests + BeautifulSoup(スクレイピング) |
| 開発する場所 | Jupyter Notebook(VS Code拡張) |
| 履歴管理 | Git / GitHub(非公開リポジトリ) |
| 自動売買(これから) | Pythonスクリプト + ブラウザ自動化 |
TensorFlowとかPyTorchじゃないんだ?
表データ(行と列のデータ)を扱う今回みたいなケースだと、深層学習よりLightGBMの方が圧倒的に作るのが早くて、しかも当たりやすいんだよ。素人が最初の1個目を作るなら、深層学習よりまず勾配ブースティング、これは強くおすすめ。
選び方のコツは「日本語の情報がたくさんある道具を選ぶ」。詰まったときにググって解決できるかどうかが、独学の生死を分けます。
📊 データ集めが9割:地味だけど大事な作業
機械学習って、モデル作るのが大変なんでしょ?
実は逆。作業時間の8〜9割は「データを集めて整える」ことに消える。モデルを動かすコード自体は、最後の1割。
最終的に使った主なデータはこちら。
| 種類 | 例 |
|---|---|
| 馬の基本情報 | 性別、年齢、馬体重、血統 |
| 過去成績 | 直近◯走の着順、走破タイム、上がり3F |
| 騎手・調教師 | 勝率、複勝率、コース別の相性 |
| レース条件 | 距離、コース(芝/ダート)、馬場、天気、頭数 |
| オッズ・人気 | 単勝オッズ、人気順位、市場の歪み |
シンプルに見えるけど、実際にはこんなトラブルだらけ👇
| # | トラブル |
|---|---|
| 1 | データを取ってくる先のページの作りが変わって、急にコードが動かなくなる |
| 2 | データが抜けてる(出走取消とか) |
| 3 | 同じ馬名なのに微妙に違う書き方になってる(半角・全角とか) |
💡 学んだこと:「データは汚れてる」って前提で作るのが鉄則。
ここは連載の第2〜3回で、コード付きでもっと詳しく書いていく予定です。
🎯 AUC 0.86までの道のり
そもそもAUCって何?難しそうな単語…。
シンプルに言うと、「AIがどれくらい賢く順位付けできるか」のスコアだよ。
| AUC | どれくらい賢い? |
|---|---|
| 0.5 | コイン投げと同じ(バカ) |
| 0.7 | 普通に使えるレベル |
| 0.8 | かなり優秀 |
| 0.86 | 私のモデル(がんばった方) |
| 1.0 | 完璧(ここまでは行けない) |
おお、なるほど。じゃあ、最初からその数字出せたの?
全然。色んなモデル試してやっと到達した。
試したモデルの遍歴
| 段階 | モデル | AUC | やってみた感想 |
|---|---|---|---|
| 1 | ロジスティック回帰 | 0.70 | スタートライン。意外と健闘 |
| 2 | ランダムフォレスト | 0.78 | どのデータが効いてるか見えるのが便利 |
| 3 | XGBoost | 0.83〜0.84 | 学習はちょっと遅い |
| 4 | LightGBM | 0.85〜0.86 | 学習が速くて調整しやすい |
💡 気づき:派手なテクより、「使うデータを工夫する」ことの方がスコアは伸びる。
たとえば「直近3走の平均着順」とか「その騎手×そのコースの複勝率」みたいなまとめた数字を入れると、目に見えてスコアが上がりました。
過学習との戦い
過学習って何?
「過去問だけ覚えた状態」のAIのこと。テスト問題(未来のレース)になったら普通に外す。機械学習で一番厄介な敵。
これを防ぐために、3つの対策を徹底しました。
| 対策 | 中身 |
|---|---|
| 時間の順番を守ってチェック | 未来のレースを学習データに混ぜない |
| 早めに学習を止める | 学習が伸びなくなったら止める |
| 使うデータを絞る | 「答えがバレてそうな情報」を削る |
⚠️ ROI 330〜800%をどう見るか(正直な話)
で、結局のところ、実際に儲かるの??
ここが一番大事。結論から言うと、儲かるかどうかはまだ分からない。過去データの数字を冷静に見ようか。
タイトルにも書いた ROI 330〜800%。これは過去データで以下のやり方を試した結果です。
- AIが「この馬の複勝(or単勝)は買い」って言った馬券だけ買う
- 1点いくらにするか、ベットの量を固定 or オッズで変える
- 期間や買い方によって330%〜800%でブレる
数字としてはド派手だけど、過去データのテストにはよくある罠がいくつもあります。
| # | 罠 | 本番で起きること |
|---|---|---|
| 1 | 過去データに合わせすぎ(過学習) | 未来のレースで同じ精度が出るとは限らない |
| 2 | 自分の影響を計算してない | みんなが同じ馬を買うとオッズが下がる |
| 3 | 手数料・買い損ね・ネット投票の縛り | 「タイミング遅れて買えなかった」が普通に起きる |
| 4 | お金の管理がリアルじゃない | 負け続けで元手が尽きるリスク |
てことは、800%が500%になったり、もっと下になることもあるってこと?
その通り。最悪、マイナス(赤字)になる可能性もちゃんとある。だから今は「リアルなテストで、現実の色んなロスを差し引いてどれくらい残るか」を測っていく段階。
✍️ ROIの数字に派手なものを並べてるAI馬券系のサービスは世の中にたくさんあるけど、本当に大事なのは「どう確かめたか」と「本番でどう崩れたか」。
このブログでは、崩れたら崩れたで、その数字も全部書きます。
🚀 次のステップ:今週から本番スタート
ついに本番!緊張するね。
めっちゃ緊張する。でも、ルールはちゃんと決めてある。
| ルール | 中身 |
|---|---|
| 使うお金 | 少額から(生活が傾かない金額で) |
| 1レースの上限 | 上限を決めてそれ以上は買わない |
| 記録 | 全レース・全買い目を残す |
| 振り返り | 過去データとのズレを毎週レポート化 |
この本番フェーズの記録こそ、たぶんこの連載のいちばん面白い部分になります。 AIが「現実」とぶつかったときに、何が起きるのか。理屈と現場のズレを、できるだけ正直に書いていきます。
📝 これから書いていきたいこと
このブログでは、競馬AIを中心にしつつ、「素人がAIで結果を出すまでの全部の流れ」を分けて書いていきます。
| 回 | テーマ | 中身 |
|---|---|---|
| 第2回 | データ収集編 | netkeibaからルールを守ってデータを集める設計と落とし穴 |
| 第3回 | データの工夫編 | AUCを0.78→0.86に上げた具体的な工夫 |
| 第4回 | 本番1週目レポート | 過去データと現実、どこがどれくらいズレたか |
「AI×副業」「素人の機械学習入門」みたいなテーマでも、ちょこちょこ記事を出していきます。
💡 同じように「AIをちょっと触ってみたい」あなたへ
私もちょっとAI触ってみたくなってきたかも。何から始めればいい?
いいね!もうAIは「エンジニアだけのもの」じゃないから、誰でも始められるよ。
ChatGPTやClaudeみたいなAIアシスタントが、コードを読み書きするのをガッツリ手伝ってくれる時代です。「自分で全部書ける」必要はもうなくて、「何を作りたいかを言葉にできる人」の方が、むしろ強くなり始めてます。
ただ、土台になる基礎は、ある程度自分の頭に入れておいた方が圧倒的に強い。
私が独学に使った本・サービスはこちら👇
| 種類 | 役割 |
|---|---|
| Pythonの入門書 | 入門書1冊+手を動かす練習本1冊 |
| 機械学習の入門書 | 数式は飛ばし読みでOKって割り切る |
| オンライン学習サービス | ちゃんと順番に学べる+詰まったときの保険 |
「もう30代だし」「文系だし」って言い訳してるんだけど…
それ全部、昔の私。一個ずつ潰していくのに、いちばん効いたのはたぶん「結果が出るテーマを選んだこと」。失敗しても折れないように、ワクワクするテーマから入るのがコツ。
このブログでは、私が実際に使った本やサービスも、これから紹介していきます。 「自分でも何か作ってみたい」って思った人が、最初の一歩を出せる場所にしたいです。
それでは、次回のデータ収集編でまた会いましょう。🏇
連載予告
| 回 | タイトル |
|---|---|
| 次回(第2回) | データ収集編 〜netkeibaから10年分のレースデータを集めた設計と落とし穴〜 |
| 第3回 | データの工夫編 〜AUCを0.78→0.86に上げた具体的な工夫〜 |
| 第4回 | 本番1週目レポート 〜ROI 330〜800%は、現実でどう崩れたか〜 |



