HorseRacingAI
機械学習による競馬予測 & JRA IPAT 自動投票システム
JRDB の過去レースデータから学習した LightGBM モデルで着順・期待値を予測し、JRA IPAT に自動投票する Web アプリ。GCP・Modal・Cloudflare Access を組み合わせたハイブリッド構成で、Google SSO によるマルチユーザー運用に対応。
Product Images



Overview
プロジェクト概要
HorseRacingAI は、JRDB から取得した過去レースデータをもとに LightGBM で各馬の勝率・期待値を予測し、推奨買い目を JRA IPAT に自動投票する Web アプリケーションです。フロントエンドは Next.js static export、バックエンドは FastAPI、推論・学習は Modal の GPU/CPU サーバーレス環境で実行します。Cloudflare Access の Google SSO と JIT プロビジョニングにより、複数ユーザーがそれぞれ暗号化された IPAT 資格情報を安全に保管できる設計です。
開発背景
競馬予想の精度向上には過去データの体系的な活用が欠かせませんが、個人運用ではコスト・セキュリティ・自動化運用のすべてを両立させるのが難しいという課題がありました。そこで、GCP e2-small(常時稼働)と Modal(必要時だけ起動する GPU/CPU)を組み合わせ、Cloudflare Access で認証を外出しにすることで、低コストかつ安全な自動投票基盤を構築しました。IPAT 資格情報はユーザーごとに Fernet で暗号化し、投票時のみ復号する設計で、鍵管理もアプリ側に閉じ込めています。
Features
主な機能
LightGBM による着順予測
JRDB の 26 年分の過去データから学習した LightGBM モデルで各馬の勝率・期待値を計算。Plackett-Luce 分布を用いて複勝・馬連・三連複の確率も導出し、推奨買い目を自動生成します。
JRA IPAT 自動投票
Playwright で JRA IPAT にログインし、推奨買い目を自動購入。二重投票防止ロック・日次/レース別予算上限・最終 EV 悪化チェックなど、安全装置を多層に備えています。
Cloudflare Access 4 層防御
エッジの Google SSO ホワイトリスト、JWT 署名検証、JIT ユーザー特定、Fernet 暗号化資格情報の 4 層で保護。パスワードレスでマルチユーザー運用できます。
週次自動運用パイプライン
土曜朝に出馬表を取得して事前推論、日曜朝に前日結果をマージして再学習、月曜朝に投票を精算する systemd timer を構築。学習時点より未来のデータが特徴量に混入しないリーク防止設計です。
Tech
技術スタック
Frontend
- Next.js 16
- React 19
- Tailwind CSS 4
- TypeScript
Backend
- Python 3.11
- FastAPI
- Pydantic v2
- aiosqlite
ML / 推論
- LightGBM
- Modal (GPU T4 / CPU x4)
- pandas
Database
- SQLite
Browser Automation
- Playwright
Auth / 暗号
- Cloudflare Access (Google SSO)
- PyJWT (JWKS)
- Fernet
Infrastructure
- GCP Compute Engine
- Cloudflare Tunnel
- systemd
Results
成果・課題
GCP・Modal・Cloudflare を組み合わせたハイブリッド構成により、常時稼働コストを抑えつつ、推論・学習時だけ Modal の GPU を使う省コスト運用を実現しました。Cloudflare Access によるパスワードレス認証と Fernet による IPAT 資格情報の暗号化で、マルチユーザーでも安全に運用できる設計にできたのが特に手応えのあった部分です。一方で、購入直前のリアルタイムオッズ取得や残高の事前チェックなど、自動投票の信頼性をさらに高めるための改善余地が残っています。今後は特徴量の拡充によるモデル精度向上と、直前判断ダッシュボードの強化を進めていく予定です。
HorseRacingAI を試してみる
このサイトは Cloudflare Access によるアクセス制限が掛かっています。許可されたアカウントのみ Google SSO でログインできます。
非公開(アクセス制限付き)