Projects/HorseRacingAI ver1.0
HorseRacingAI ver1.0 のヘッダー

HorseRacingAI ver1.0

初代・機械学習による競馬予測と自動投票の試作

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

PythonFastAPINext.jsLightGBMModalGCPCloudflare AccessPlaywright

Product Images

HorseRacingAI ver1.0 のロゴ入りヘッダー
HorseRacingAI PCトップ画面
レース投票履歴画面
HorseRacingAI スマホトップ画面
1 / 4

Overview

期間

2026.01 - 2026.03

役割

開発者

プロジェクト概要

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

旧バージョンの記録

現在の公開URLはver2.0のため、旧版のデモリンクは掲載していません。

現行のver2.0を見る