みなさん、突然ですが競馬やりますか?
僕は正直、競馬のことをほぼ何も知らないです。スマホアプリの「ウマ娘」を遊んでいて、昔の競走馬の名前がちょっとわかるくらいです。
そんな僕に先日、競馬好きの友達から「宝塚記念に合わせて、どっちが当てられるか勝負しようぜ」という挑戦状が届きました。
こういうとき、普通の人は競馬新聞を読むとか、勝負師の直感を信じるとかするんでしょうけど、僕はちょっと違う方向に走りました。
「機械学習で予想アプリ作ればいいじゃん」
というわけで、ClaudeとAntigravityを使って競馬予想アプリを1日で爆速開発した話をします。結末はタイトルで察してください。
まず、どうやってデータを集めるか問題
結論、今回はケチって無料のデータで作成しました。
競馬予想AIを作るためには、まず大量の過去レースデータが必要です。
「どうやって取得すればいいんだろう」とClaudeに相談したら、すぐにこんな回答が。
- Kaggleに日本競馬の過去データセットがある(2015-2020年のやつが使えるらしい)
- 採用
- netkeiba.comからスクレイピングでデータを補完できる
- 採用
- JRA-VANという有料データサービスもある(月2000円〜)
- 一番情報がリッチだったが、ケチってやめる
ここで登場するのがAntigravityです。netkeibaへのスクレイピング作業はAntigravityに丸投げしました。これが1日かかる作業だったんですが、ほぼ自動でやってくれるので、普通に土曜日を満喫していました。
自分でスクレイピングのコードを書いて、エラーと格闘して、なんてやってたら数日吹き飛んでたと思います。
データ収集の流れ
- Kaggleで2015〜2020年の日本競馬データを取得(過去の着順・タイム・馬情報などがまるっと入ってる)
- netkeibaからスクレイピングで最新データを補完(Antigravityに任せて1日待つ)
- 2つのデータを合体させて学習データを完成
競馬のことはよくわかってないんですが、「過去のデータがたくさんあれば、なんとかなるでしょ」という謎の自信がありました。
Claudeで特徴量設計&モデル構築
ここからが楽しかった。Claudeに「こういう特徴量で学習させて、予想アプリ作って」と指示するだけで、モデル構築もアプリ化もほぼ自動でやってくれます。
競馬初心者ながら、自分なりに特徴量はこだわりました:
使った特徴量(抜粋)
- 馬の年齢・性別・斤量
- 騎手・調教師の過去成績
- そのレース時点での獲得賞金額(← これを追加したのが工夫ポイント。どれだけ稼いできた馬かがわかる)
- 距離・競馬場・馬場状態
- 直近レースのタイム・着順
あえて使わなかったもの
- オッズは特徴量に入れなかった。オッズって要は「みんなの人気投票」だから、市場の感情が入り込んでしまう。しかもレース後に確定する流動的なデータなので、予測モデルには不向きと判断。
特徴量の方向性を示したら、あとはClaudeが勝手に学習まで完了させてくれました。逆に言うと、自分で書いたコードは…ほぼゼロ。
アプリ完成!宝塚記念に備える
出走馬の情報を入力すると、勝率予測と推奨馬を出してくれるアプリが完成しました。1日でここまでできるとは正直自分でも驚いた。
当日、アプリに宝塚記念の出走メンバーを入力して予測を実行。「よし、このデータでいける」と確信して、勝負に挑みました。
レース1時間前の予想結果
本番当日、事件が起きる(低気圧に負けた)
レース直前。
どしゃぶりでした。
それまでの予報では晴れか曇りだったのに、突然の大雨。馬場状態が「良」から「重」に変わってしまいました。
僕のモデルが学習したのは「良馬場」のデータ。馬場状態が「重」になると、レース展開が全然違うんですよ(知らなかった)。重い馬場が得意な馬と苦手な馬が完全に分かれるらしい。
そして現れたのがメイショウタバル。雨に強いタイプで、ドロドロの馬場をものともせず優勝。
僕のモデルが弾き出した「有力候補」は…まったく別の馬でした。
掛け金、全額献上。(いくらかはご想像にお任せします、、)
条件を雨・重にしてみたら、、
悔しすぎて、レース後に入力データの天候を「雨」・馬場状態を「重」に変えてアプリを再実行してみました。
メイショウタバルが最有力候補として出てきました。
モデルは正しかった。入力データが間違ってただけ。つまりこれは自然現象のせいです。僕は悪くない。
レース後条件を雨、重に変更した際の予測結果
後日談というか、今回のオチ
ClaudeとAntigravityで、競馬の素人が1日で予測精度まあまあのアプリを作れたというのは正直すごいことだと思います。(しかも無料で)
- データ収集:Antigravityに丸投げ
- モデル設計:Claudeと一緒に考える
- アプリ化:Claudeがやってくれる
- 負ける:自分
「コード書けないと無理でしょ」と思ってる方、全然そんなことないです。今回はある程度自分でコントロールしましたが、そんなことしなくてもほぼClaudeが進めてくれます。
賭け事に負けるのは本当に悔しいですが、技術的には十分面白い試みだったと思っています(苦笑)。
責任は一切負いませんが、みなさんも興味があれば作ってみてください(笑)