Lean Baseball

No Engineering, No Baseball.

競馬好き歴30年の自分が予想スタイルをAI Agentにオンボーディングした結果の話

本業はSRE, 個人としては野球解説AI Agentを絶賛開発中の人です.

と同時に実は競馬好き歴30年の馬ヲタクです🐎

春の競馬G1シーズン真っ盛りな今は野球より競馬な自分なのですが,

ワイ「もしかして自分の競馬予想, AIでいい感じにできるのでは?」

と思い立ち, 「自分による自分のための競馬予想AI Agent」を開発しました(現在もアプデ中).

このエントリーではそんな話を紹介します, ちなみに言うと技術ブログの体を成したポエムでありノンフィクションです.

なお, 私の根っこにある「スポーツをAIでいい感じにする」という思想は, 以前ご紹介した野球解説AI Agent「The Scouter 3」とまったく同じです.

shinyorke.hatenablog.com

唯一違うのは...競馬に関しては「私自身が競馬予想と観戦を楽にするため」作っています(すべての野球人にAI Agentを提供するのとは真逆の話).

TL;DR

競馬AI Agent, 野球解説AI Agentの334倍難しいが楽しい.

30年来の競馬ファンが「自分を諭すバディ」としてAI Agent開発に手を染めた理由

職場方面の方および10年以上も前から私を知ってる方はご存知かもですが, 実は私めっちゃ競馬ファンです.

ディープインパクトの三冠は全て現地で観ましたし, クロフネが武蔵野Sとジャパンカップダートで他馬をぶっちぎった姿も現地で観てます.

前提としてそんな私の競馬人生の話をシュッと話してから本題に入ります.

  • 1994年, ウイニングポストから始まった競馬人生
  • 競馬はギャンブルではなくスポーツとして見ている
  • 30年の学び: 人間の予想には必ずノイズが入る

1995年, ウイニングポストから始まった競馬人生

30年も付き合ってることになるウイポ

私が競馬を本格的に見始めたのは1995年, 今から31年前のことです.

きっかけは1994年, 夏の某日.

札幌市内の中古ソフト屋で買った「ウイニングポスト」*1という競馬シミュレーションゲームでした*2.

「競走馬生産」「育成・レース」「稼いだ賞金で投資してさらに大きくする」というウイニングポストのゲームスタイルが自分の好みにピッタリだった以上に,

  • 血統, 調教, 騎手, 馬主etc...色んな組わせ, 色んなデータがある
  • 一方で生き物由来のアンコントローラブルな要素がめっちゃある, 馬自身のみならず天気とか
  • そして何より毎週日曜日の娯楽としてとても良い🐎

という所であっという間にハマりました.

なおウイニングポストは社会人になってからしばらく遊んでませんでしたが, Switchを手に入れた2021年頃から再開しました, 今はもちろんウイニングポスト10 2026をガッツリやってます*3.

競馬はギャンブルではなくスポーツとして見ている

フルシーズンで競馬を観始めたのは1995年の秋からです(その前の1994年も主要レースは観てた*4), サンデーサイレンス旋風*5が吹き始め, マヤノトップガン*6が変化自在の走りで年度代表馬になった年です.

社会人になる前はテレビの前で, 社会人になってからはテレビと当時に馬券も楽しむようになりました, 短時間で楽しめるご楽なので見るだけでも楽しいのでいい趣味だと思いました.

ちなみに馬券は「G1レースのみ買う」主義です, 一時期は重賞のみに絞って毎週買ってた時期もありますが*7.

20年近く馬券を買い, 喜怒哀楽*8すべてを経験した結果.

  • JRA開催のG1レース
  • 3歳もしくは古馬の芝1600m以上の条件
  • 府中(東京)もしくは京都がめっちゃ相性いい, 中山と阪神は成績振るわない(特に中山は顕著)

とわかりはじめました. この傾向にあるので,

  • ダート戦全般
  • 芝1600m未満, 特にスプリント戦
  • 中心馬不在の2歳戦

以上の条件は「ケン*9」することにしました.

30年の学び: 人間の予想には必ずノイズが入る

とはいえ得意条件と苦手条件がわかっても, 外れる時は外れます.

30年も予想を続けていると, 自分の予想に「欲」「思い込み」という「ノイズ」が混入することに嫌でも気づきます.

自分が陥るノイズはこんな感じです.

  • オッズを見て「この人気なら妙味があるぞ」と欲に負ける. これはまあ競馬ファンあるあるとはいえ, これで買い目が増えて当たってもトリガミするとかして無駄な気もする.
  • 特定条件の組み合わせによる過剰評価. 例えば「ノーザンファームの良血やから来るやろ」「やはり武豊の逃げ馬は外せないのでは」と, 冷静に観たデータの外で主観に戻ってしまう.
  • 好きな血統の馬をどうしても切れない. これも特定条件の一つ. ただ, 2025年の菊花賞は, 推し血統の組み合わせ*10で三連単を的中したはいいが, その成功体験が次の予想を歪める
  • 自信のある予想で三連単を買ったが着順が一つ入れ替わって不的中(三連複買っておけばよかった). 「素直に三連複を買えばよかった」と後悔する外し方を何度かやらかしている, 今年の天皇賞・春とか*11.

どれも今から冷静に考えれば「過去にもやらかしてるじゃん」とわかっていることです, なんせ30年繰り返している(はず)なので.

そんなノイズに待ったをかける, ガードレール的なものをAIにやらせればいいじゃん!と今年のGWに気が付き, 自分の予想スタイルをAIにオンボーディングした上でAI Agentを作ることにしました.

自分のためだけの競馬AI Agent

ここから本題です, 競馬予想AI Agent「ai-shugoro*12」プロジェクトをGW中に開始しました.

自分のための競馬予想AI Agent「ai-shugoro」

ここからは少しだけ技術ブログっぽく, どうやって作ったか紹介します.

  • JRA G1専用の予想AI Agent
  • 技術スタック: StreamlitとDuckDBの最小構成
  • 野球解説AI Agentで確立した開発手法を競馬に移植

JRA G1専用の予想AI Agent

ai-shugoroは, JRAのG1レースに対象を絞った予想AI Agentです.

出走馬のデータを集め, 評価し, 印*13とスコアを付け, 馬券の買い目まで提案します.

競馬新聞っぽく, スコア化したり評論を書いてくれる

データ収集とLLMによる集計・評価(ちなみにClaude使ってます)は「登録時点」「枠順確定後」「レース当日」と分けて, それぞれでスコアや予想が推移するようにしています.

データは, 収集元のサイトを限定(宛先はもちろんの事, 収集の回数も*14), 個人利用の範疇のなかでいい感じにしています.

技術スタック: StreamlitとDuckDBの最小構成

ai-shugoroのワークロードはローカル環境で完結しています.

競馬AI Agent技術スタック

アプリケーションの骨格は「Streamlit + DuckDB」です, 理由はこれを使うのが一番楽だからです.

  • Web Appは公開するつもりが無いのでStreamlit
  • playwright + Chromiumでデータ収集
  • Claude APIで様々な解釈
  • データは全部DuckDB

今どきの個人開発の極み(Streamlitは歴史を感じるが)という感じですね.

ちなみに私はずっとStreamlitを使ってきているのですが新作作ったのが数年ぶりだったので懐かしさがありました.

shinyorke.hatenablog.com

tech.jxpress.net

野球解説AI Agentで確立した開発手法を競馬に移植

ai-shugoroは, ゼロから手探りで作ったわけではありません. 野球解説AI Agent「The Scouter 3」で確立した一人開発の手法を, そっくり競馬ドメインに移植しています.

具体的には,

  • 機能ごとにDesign Doc*15を書いてから実装
  • Claude Codeでvibe codingして自分では一切書かない
  • 開発環境の構築やログイン作業を自作のskillで自動化する

野球解説AI Agentほどではないですが, かなりの数のdocsを作ってもらい, レビューしながら進めました.

ノイズを排す設計 — 自分の予想スタイルをAIにオンボーディングする

このAI Agent作りにこだわったポイントが2つあります.

  • 13の評価軸の重みが, そのまま予想哲学になっている
  • Markerのプロンプトに「思い込みの禁止」を明文化した

13の評価軸の重みが, そのまま予想哲学になっている

ai-shugoroは, 出走馬を13個の評価軸でスコアリングします.

  1. 血統
  2. コース適性
  3. 距離適性
  4. 近走成績
  5. ローテーション*16
  6. レースや馬の格(重賞実績)
  7. 調教
  8. 展開
  9. 枠
  10. 馬場
  11. 馬体
  12. 出走馬同士の相対評価
  13. 馬場速度適性

面白いのは重みの付け方です. 13軸の中で最も重いのは「過去の格(重賞実績)」で0.16, 次いで血統・コース・距離・近走が各0.13と続きます.

ここに私の予想哲学が直接エンコードされています. 「好きな血統だから」というノイズより, 「このレース体系でG1を勝った事実」を常に上に置く設計です.

血統の重み0.13に対し実績の重みを0.16に設定したのは, 血統愛に流される自分自身への戒めにほかなりません.

しかもこの評価軸は, 時間とともに解禁されていきます. 出走前は基本の6軸, 枠順が確定すると展開と枠の軸が, 当日になると馬場や馬体の軸が順に加わります.

人間が「当日の馬場やパドックを見て予想を上書きする」プロセスを, そのまま3段階のフェーズとして実装したわけです.

Markerのプロンプトに「思い込みの禁止」を明文化した

スコアを印に統合し, 理由文を書くのがMarkerという役割です. ここだけはClaudeに判断を任せて作文しています.

このMarkerに渡すプロンプトには, 人間の思い込みを構造的に封じる規則を明文化しています. 実際のプロンプトから引用します.

他馬との比較は「フィールド相対」セクションの情報のみを根拠に書くこと. そこに無い比較を創作してはならない 不安要素は本馬の特徴量スコアの中で相対的に低い軸から1点. 他馬との比較で作らないこと

ai-shugoro marker_reason_v5 プロンプトより

「なんとなく相手が強そう」「格上が多い気がする」という, 人間が脳内で勝手に補完してしまう思い込みを, AIに対して明文で禁止しているわけです.

このプロンプトはv1からv5まで, 思い込みを禁止する方向に5回育ててきました.

実際やってみてどうか

「競馬好き歴30年の自分が予想スタイルをAI Agentにオンボーディングした結果」ですが, まだ的中は出ていません(小声).

実験として, 「NHKマイルC」「ヴィクトリアマイル」の2レースで試しましたが, どちらも本命「◎」を外す, 一方で紐(◯▲△)は捉えるという惜しい感じになりました, 専門用語で言う所の「タテ目」で外した形です.

  • NHKマイルCは勝ち馬ロデオドライブを堂々と無印にして外す. ハズレの理由は血統スコアの低さ. もしもロデオドライブの父親がロードカナロアとかだったら印付いてたかもしれない*17.
  • ヴィクトリアマイルはまさかの本命ジョスラン. 確かに面白いところではあったが, 圧勝したエンブロイダリーを対抗以下にするなどこれもイマイチだった. これもエンブロイダリーの血統が不当にスコア低かった説ある*18.

ただ, 先程挙げた「ノイズ」対策は上手くできてるなと思いました.

  • オッズを見て「この人気なら妙味があるぞ」と欲に負ける. これはAIの言う通りに買ってるので点数は減った.
  • 特定条件の組み合わせによる過剰評価. これもAIの言う通りにした. ちなみにほんの少しだけ買ってる(解決してない?w).
  • 好きな血統の馬をどうしても切れない. これは論点がいくつかある. 確かに「好きな血統」というバイアスから逃れてる気はする. が, ロデオドライブやエンブロイダリーを過小評価するのはやりすぎな気がした. 「サートゥルナーリアならカナロアの息子だし東京マイル大丈夫だろ」「アドマイヤマーズならダイワメジャーに似て(以下同文)」という文脈をどうオンボーディングするかが課題.
  • 自信のある予想で三連単を買ったが着順が一つ入れ替わって不的中(三連複買っておけばよかった). これは前述の2レースは三連複でしか買わなかった, 自信無かったのでよって未検証.

AI Agentは人間の良いバディなのでは?自作するならなおのこと.

って思いました.

結び

というわけで, 「競馬好き歴30年の自分が予想スタイルをAI Agentにオンボーディングした結果, まだ何も生まれていないが学びはある」的な話をしました.

5月に入ってからGWと週末にこのAI Agent育てていますが,

競馬AI Agent, 野球解説AI Agentの334倍難しいが楽しい.

という感覚を得ました, 野球だったらセイバーメトリクスやバイオメカニクスで説明できることが競馬だと(人間じゃなくて馬の所業故に)不透明かつ変数多くて難しいなと*19.

明日のオークス, 来週のダービーもAI Agentでやっていきします.

最後までお読みいただきありがとうございました.

*1:光栄(現: コーエーテクモゲームス)が生み出した, 競走馬の馬主・生産者となって名馬を育てるシミュレーションゲーム. 1990年代生まれの競馬ゲームという意味ではダビスタとほぼ同時期のゲーム. そして今でも新作が出てるのはウイニングポストぐらいではなかろうか.

*2:当時は競馬どころか野球を含めたスポーツにほとんど興味ない高校生だったのですが, ずっと「信長の野望」「三国志」などの歴史ゲーをやってた私だったので. 「光栄が出すゲームならおもろいやろ!」という理由で買いました(そして確か千円ちょいだった記憶がある).

*3:記憶がうろ覚えですがウイポ3ぐらいまでやって15年くらい間が空く→9から復活しました, そして面白いのが今のウイニングポストはある意味「信長の野望」と一緒な感じがします. あと海外で馬を持ったり生産できるのは良い(海外競馬好きなので)

*4:ナリタブライアンが三冠を取った年. あの年の有馬記念は今でも覚えてますねー

*5:日本の競馬が大きく変わった事件. アメリカから輸入したサンデーサイレンスという種牡馬の産駒が走りまくって競馬が変わった時期. なおこの血統はディープインパクト, キタサンブラック, ドウデュースそしてイクイノックスらの系統(他にもいっぱいいる)に繋がっている.

*6:マヤノトップガンという馬自体も好きだったのですが, それ以上に主戦ジョッキーだった田原成貴さんの騎乗の大ファンでした. 今は中々個性的な予想家になってますが, 現役時代の騎乗はもっと個性的でした(騎乗以外も含めて).

*7:自分の馬券を当てるスキルを伸ばすため週1,000円, 1レース限定で購入.

*8:当てた実績で言うと人生初の三連単を2004年天皇賞・秋で的中(1900倍くらいのとんでもない配当), 近年だと昨年1400倍で決着した菊花賞の三連単を的中

*9:競馬用語で「馬券を買わず見るだけ」の状態を指す.

*10:三着, 人気薄だったエキサイトバイオを買えたのは父レイデオロ母父ゼンノロブロイ, 母の兄弟に天皇賞馬がいたからという, 推しだらけ血統だったからってのがある

*11:上位三頭をAIの力を借りること無く絞っていて, 自信があったのですが自信ありすぎて三連単のみ買って外すという失態

*12:名前の由来は日本で一番有名かつ一番尊敬している競馬評論家である井崎脩五郎氏から拝借しています.

*13:◎○▲☆△といった予想印. ◎が本命, ○が対抗で, 以下は評価順.

*14:イメージ的には「自分用の競馬ブラウザ」みたいな趣向でやってます, 野球解説AI AgentのようにガチのWebプロダクトにする必要が無いので

*15:設計判断を文書化したドキュメント. ISSUE番号と紐づけて管理する.

*16:前走からの間隔. 詰めすぎ・空けすぎを嫌う考え方.

*17:ロデオドライブの父親はサートゥルナーリア(ロードカナロアの息子, ロデオドライブはロードカナロアの孫にあたる). 産駒が2世代のみでサンプルが少ないサートゥルナーリアの血統スコアを低く見積もって無印にされてました.

*18:アドマイヤマーズも二世代のみでサンプルが少ない

*19:野球も色々ありますが, DIPSで事象のほとんどが説明可能になるのでDIPSに該当する概念が無い馬はめっちゃ難しいと思います.