AI予想システム ORACLE PRO を個人開発した記録 #1 – はじめに
はじめに
こんにちは、しおぴーです。個人でソフトウェア開発をしながら、競馬と競輪を趣味にしています。
「勝てる予想を自分で作れないか」という発想が生まれたのは2年ほど前のこと。最初は無料の予想サイトを眺め、オッズを分析する程度でしたが、次第に「機械学習モデルを自作すれば体系的に検証できるはずだ」という方向に考えが向かいました。
そうして生まれたのが、AI予想システム ORACLE PRO です。
このシリーズでは、ORACLE PRO の設計から実装・運用までを記録していきます。競馬・競輪AI に興味のある方、機械学習を実際のプロジェクトに活かしたい方の参考になれば幸いです。
ORACLE PRO とは何か
ORACLE PRO は、競馬・競輪のレースデータを機械学習で分析し、買い目候補を自動生成するシステムです。
主な機能は次の3つです。
- データ収集: スクレイピングで公開レースデータを自動取得・蓄積
- 予測モデル: LightGBM を使った着順・連対率の推定
- 投票管理: 推奨買い目の記録と回収率のトラッキング
現在の学習データは 競輪 約104万件・競馬 約13万件 に達しており、テストデータでの予測精度は以下の通りです。
| 競技 | AUC |
|---|---|
| 競輪 | 0.8381 |
| 競馬 | 0.9295 |
「AI」と名乗っていますが、深層学習ではなく 勾配ブースティング決定木(LightGBM)がベースです。競馬・競輪の特性上、大量の特徴量をテーブルデータとして扱う必要があり、LightGBM との相性が非常によかったためこの選択をしました。
技術スタック
| 用途 | 技術 |
|---|---|
| 言語 | Python 3.14 |
| 予測モデル | LightGBM(勾配ブースティング) |
| データ管理 | SQLite |
| API サーバー | Flask |
| スクレイピング | Selenium |
| フロントエンド | Jinja2 テンプレート(ダークテーマ) |
開発環境は Windows 11 + Galleria PC(Core i7-14700F / RTX 5070) です。クラウドは使わずローカル完結を徹底しており、メンテナンスコストを極力下げる方針で設計しています。
システム全体像
ORACLE PRO は以下のパイプラインで動作しています。
1. データ収集
Selenium を使って公開レースサイトから情報を自動取得します。過去データの初回収集から始まり、以降は差分更新で毎日最新データを蓄積します。取得したデータは SQLite に保存し、前処理済みの特徴量テーブルとして管理しています。
2. 前処理・特徴量エンジニアリング
モデルに渡す前に、生データを特徴量へ変換します。競輪では選手スペック(勝率・連対率・ギア比)や枠番の有利不利、競馬では過去走のタイム偏差・斤量補正・血統係数・オッズの動きなどを組み合わせます。
3. モデル学習
LightGBM で着順・連対確率を学習します。評価指標には的中率だけでなくオッズと期待値を組み合わせた独自指標を使い、「回収率が高い買い目を選ぶ」ことを目標にしています。
4. 予測・スコアリング
前夜にモデルを自動再学習し、翌朝に当日レースの予測スコアを出力します。スコア上位の組み合わせを推奨買い目として Web UI に表示します。
5. Web UI
ウィンチケット風のダークテーマで設計した管理画面があります。買い目一覧・回収率トラッキング・過去予想の振り返りができるシンプルな作りです。
苦労した点・工夫した点
データの前処理が最大の難関
公開データは欠損が多く、年度によってフォーマットが微妙に変わります。特に競輪は記録方式が複数あり、正規化に相当な時間を取られました。「データが汚れているとモデルがどれだけ優秀でも意味がない」という教訓はこのプロジェクトで骨身にしみました。
オッズの扱いに潜む罠
単純にオッズを特徴量に加えると、人気順に並び替えただけのモデルができあがります。オッズそのものではなく「期待値」として再定義し、モデルから独立した評価軸として使うことで、穴狙いの精度が大きく改善しました。
モンテカルロシミュレーションで3連系を精緻化
3連単・3連複の組み合わせ数は膨大です。全組み合わせを計算するのではなく、100試行のモンテカルロシミュレーションで上位候補を絞り込む方式を採用しました。精度を保ちながら計算コストを大幅に削減できています。
Selenium でのスクレイピング安定化
ページ構造の変更に対応しやすいよう、XPath よりも CSS セレクタを優先しました。また、ネットワーク遅延への対応として明示的な待機処理を入れ、取得失敗時のリトライ機構も組み込んでいます。
次回予告
次回は データ収集パイプライン の実装を詳しく解説します。
- #2: データ収集とスクレイピング設計(Selenium + SQLite スキーマ)
- #3: 特徴量エンジニアリング(血統・近走成績・騎手相性)
- #4: LightGBM での学習と精度評価
- 競馬・競輪の予想結果も随時公開予定
実際のコードを交えながら解説していくので、「自分でも作ってみたい」という方の参考になれば幸いです。
キーワード: 競馬AI、競輪AI、機械学習、LightGBM、個人開発、Python、予想システム、ORACLE PRO

コメント