前回のおさらい
前回の記事では、AIを学ぶための題材として、なぜ競馬AIを選んだのかについて書きました。
競馬にはデータがあります。
結果も明確です。
毎週のように新しいレースがあり、予測と結果を比較できます。
AIを使ってAIを学ぶための題材として、競馬はとても魅力的に見えました。
しかし、競馬AIを作ると決めても、すぐにコードを書き始めたわけではありません。
最初に必要だったのは、何を作るのかを決めることでした。
競馬AIと一言で言っても、その中身はさまざまです。
どの馬券を対象にするのか。
的中率を重視するのか、回収率を重視するのか。
どのレースを対象にするのか。
どのようなデータを集めるのか。
どの技術を使うのか。
考えるべきことは、想像以上にたくさんありました。
そこで私は、まずChatGPTと一緒に、競馬AIの最初の方針を決めていくことにしました。
まず決めるべきは「何を予測するか」でした
競馬AIを作ると言っても、何を予測するかによって難易度も目的も変わります。
単勝を当てるのか。
複勝を当てるのか。
ワイドを狙うのか。
三連複や三連単のような高配当を狙うのか。
一発で大きく勝つことを目指すなら、高配当の馬券を狙う選択肢もあります。
しかし、私は最初から高リスクな方向には進みませんでした。
このプロジェクトの目的は、競馬で一攫千金を狙うことではありません。
AIを学び、Pythonを使い、データを扱い、将来的には副業にもつながる
可能性のある仕組みを作ることでした。
そのためには、最初から難易度の高い馬券に挑むよりも、
まずは継続的に検証しやすい対象を選ぶ方が良いと考えました。
そこで最初の予測対象として選んだのが、複勝でした。
正確には、馬が3着以内に入る確率を予測することです。
競馬AIの最初の目標は、「この馬が勝つかどうか」ではなく、
「この馬が複勝圏に入る可能性がどれくらいあるのか」を予測することになりました。
なぜ複勝から始めるのか
複勝を選んだ理由は、単に当たりやすそうだからではありません。
もちろん、単勝や三連単に比べれば、複勝は的中しやすい馬券です。
しかし、それ以上に、機械学習の題材として扱いやすいと感じました。
3着以内に入ったかどうか。
これは結果が明確です。
入ったなら1。
入らなかったなら0。
このように分類問題として扱いやすい形になります。
AIにとっても、人間にとっても、最初の題材としては分かりやすい。
さらに、複勝は期待値買いにもつなげやすいと考えました。
AIが予測した複勝圏内確率と、実際のオッズを組み合わせる。
その結果、買う価値がありそうな馬だけを抽出する。
このような仕組みにできれば、ただ的中する馬を探すのではなく、
期待値のある馬を探すAIに近づいていきます。
私が作りたかったのは、なんとなく当たりそうな馬を選ぶAIではありません。
データをもとに確率を出し、オッズと比較し、
買う価値があるかどうかを判断する仕組みでした。
その出発点として、複勝は現実的に見えました。
的中率と回収率、どちらを重視するのか
次に考えたのは、的中率と回収率のどちらを重視するのかという問題です。
競馬予想というと、どうしても的中率に目が行きます。
何回当たったのか。
どれだけ外さなかったのか。
これは分かりやすい指標です。
しかし、的中率が高ければ利益が出るとは限りません。
低いオッズの馬ばかりを買い続ければ、
たとえ多く当たっても、最終的にはマイナスになる可能性があります。
一方で、回収率を重視すれば、利益に直結しやすくなります。
ただし、回収率だけを追い求めると、的中率が下がり、外れが続くこともあります。
外れが続けば、どれだけ理屈では正しくても、精神的に続けるのが難しくなります。
ここは、私にとってかなり重要なポイントでした。
副業として続ける可能性を考えるなら、収益性は必要です。
しかし、続けられないほど不安定なものでは意味がありません。
そこで、方針としては回収率を第一優先にしつつ、
最低限の的中率も意識することにしました。
主軸は収益性。
ただし、継続できるだけの安定感も必要。
このバランスを取ることが、最初の方針になりました。
複勝 × 期待値買いという考え方
この段階で、競馬AIの最初の形が少し見えてきました。
複勝圏に入る確率を予測する。
その予測確率とオッズを掛け合わせる。
期待値があると判断できる馬だけを買う。
つまり、単に「当たりそうな馬」を探すのではなく、
「買う価値がある馬」を探す方向です。
これは、私の中ではかなり大きな違いでした。
人気馬を選べば、的中率は上がるかもしれません。
しかし、オッズが低ければ利益にはつながりにくい。
逆に、人気のない馬ばかりを狙えば、当たった時の利益は大きいかもしれません。
しかし、外れ続ければ継続が難しくなる。
だからこそ、予測確率とオッズのバランスを見る必要がある。
この考え方は、AIに任せる部分と、
人間が設計する部分の違いを考えるきっかけにもなりました。
AIは確率を出す。
しかし、その確率をどう使うのか。
どのラインから買うのか。
どのくらいのリスクを許容するのか。
そこは人間が設計する必要があります。
競馬AIは、AIにすべてを任せるものではありません。
むしろ、AIが出した予測を、人間がどう活かすかを考えるプロジェクトでもありました。
対象レースも絞ることにしました
次に考えたのは、どのレースを対象にするかでした。
最初からすべてのレースを対象にすることも、できなくはありません。
しかし、競馬は条件によって性質が大きく変わります。
競馬場。
距離。
芝かダートか。
馬場状態。
クラス。
新馬戦なのか、未勝利戦なのか、条件戦なのか、重賞なのか。
これらをすべてまとめて扱うと、
データの傾向がばらけてしまう可能性があります。
そこで、最初は対象を絞る方針にしました。
中央競馬を対象にする。
初期は特定のコースや距離、条件に絞る。
精度が出しやすそうな領域から始める。
重賞や未勝利戦のように難しそうなものは、最初から無理に扱わない。
このような方針です。
これは、競馬AIに限らず、何かを作る時には大事な考え方だと思います。
最初から全部をやろうとすると、失敗した時に何が悪かったのか分かりにくくなります。
まずは狭く始める。
そこで検証する。
うまくいけば広げる。
うまくいかなければ見直す。
この段階で、競馬AIはかなりスモールスタートを意識したプロジェクトになっていました。
技術選定は、今できることだけで決めない
技術面でも、最初にある程度の方針を決めました。
基本はPythonとVS Codeです。
データ処理にはpandasやnumpy。
可視化にはmatplotlibなど。
機械学習にはscikit-learn、XGBoost、LightGBMなどを候補にしました。
ただし、この時点で細かく固定しすぎることはしませんでした。
大事なのは、目的に合わせて技術を選ぶことです。
今の自分が少しでも知っている技術だけを使えば、
最初の心理的なハードルは下がるかもしれません。
しかし、このプロジェクトには、
AI時代に向けて自分の技術の幅を広げる目的もありました。
だからこそ、今できることだけではなく、
これから必要になりそうな技術にも触れていきたいと考えていました。
Pythonもその一つです。
AIやデータ分析の世界でよく使われている技術を、
実際のプロジェクトの中で使ってみる。
それ自体が、この競馬AI開発の大きな目的でした。
データ取得はショートカットも許容する
競馬AIを作るには、当然データが必要です。
レース情報。
馬の情報。
騎手。
距離。
馬場。
過去成績。
結果。
オッズ。
集めるべきものはたくさんあります。
ただ、ここで最初からすべてを自作しようとすると、
おそらくそこで止まってしまいます。
このプロジェクトの目的は、
スクレイピング技術だけを極めることではありません。
競馬AIを作り、AIを学び、データを扱い、
改善できる仕組みを作ることです。
そのため、データ取得については、
既存の情報やコードを参考にしながら進める方針にしました。
もちろん、必要に応じて修正や拡張はしていきます。
しかし、最初からすべてを自分で作ることにはこだわりませんでした。
ここでも大事なのは、目的を見失わないことです。
学ぶために作る。
しかし、すべてをゼロから作る必要はありません。
使えるものは使う。
足りないところは直す。
その方が、プロジェクト全体を前に進めやすいと考えました。
改善サイクルまで考える
最初の方針決めでは、
モデルを一度作って終わりにするつもりはありませんでした。
競馬は毎週のように新しい結果が出ます。
傾向が変わることもあります。
使えるデータが増えることもあります。
だから、モデルも必要に応じて更新していく必要があります。
最初は手動で十分です。
データを追加する。
結果を確認する。
回収率を見る。
必要であれば再学習する。
その程度から始めれば良いと考えていました。
ただし、将来的には自動化も視野に入れていました。
予測を自動で出す。
結果を記録する。
回収率を確認する。
必要ならモデルを更新する。
通知する。
そうした流れまで作れれば、単なる実験ではなく、
継続できる仕組みに近づいていきます。
この時点ではまだ遠い話でしたが、
最初から改善サイクルを意識していたことは、
その後の開発にもつながっていきました。
最初の方針を決めて見えたこと
こうしてChatGPTと相談しながら、競馬AIの最初の方針を決めていきました。
複勝を対象にする。
回収率を重視する。
ただし、最低限の的中率も意識する。
期待値を基準に買うかどうかを判断する。
対象レースは最初から広げすぎない。
Pythonを中心に、AIやデータ分析で使われる技術に触れていく。
データ取得は必要に応じてショートカットも許容する。
改善サイクルや将来の自動化も視野に入れる。
こうして並べてみると、
競馬AIは単にモデルを作るだけの話ではありませんでした。
馬券種を選ぶ。
評価指標を決める。
対象レースを絞る。
データの集め方を考える。
技術スタックを選ぶ。
運用や改善まで考える。
かなり広いプロジェクトだったのです。
そして、その広さに気づけたこと自体が、
ChatGPTと相談した大きな意味だったと思います。
一人で考えていたら、もっと感覚的に始めていたかもしれません。
しかし、ChatGPTと対話することで、考えるべき項目が整理されました。
これは、コードを書いてもらう前の段階で、すでにAIを使ってAIを学んでいたのだと思います。
次回へ
こうして、競馬AIの最初の方針が決まりました。
とはいえ、この段階ではまだ何も動いていません。
方針は決まりました。
しかし、実際に形にするには、Pythonの環境を整え、データを集め、処理を書き、モデルを作っていく必要があります。
ここからようやく、競馬AI開発は実作業に入っていきます。
次回は、ChatGPTと一緒に競馬AIを作り始めた日のこと。
開発環境、そして実際にコードを動かし始めた時のことを振り返ってみたいと思います。
