競馬AIの作り方|データ準備から予測モデルの検証まで
競馬AIを作るとき、最初に決めるのはプログラミング言語ではなく、何を予測し、何をもって役立ったと判断するかです。着順を当てるモデルと、一定の条件で購入判断を補助するモデルでは、必要なデータと評価方法が異なります。競馬AIが必ず当たる方法はありません。この記事では、過去の結果を使った学習と検証の基本を整理します。
予測対象を一つに絞る
初心者が試しやすいのは、各馬について「そのレースで3着以内に入るか」を予測する課題です。次に、単勝1着の確率など、目的に応じた予測へ進みます。出力を確率として使うなら、単に順位が合うかだけでなく、予測した確率と実際の頻度が合っているかも確認します。
レース単位の条件と馬単位の条件を混ぜると、同じレースの情報が訓練用と検証用の両方に入りやすくなります。データを分けるときは、レースと開催日を意識します。
用意するデータと権利の確認
JRAの競走結果や年間成績のような公式情報を参考にできます。ただし、閲覧できることと、大量取得・再配布・商用利用が許されることは別です。利用するデータ提供元の規約、取得方法、利用範囲を先に確認してください。
最初の表には、開催日、レースID、馬ID、馬場、距離、過去成績、当日の結果などを整理します。欠損値や名称の表記ゆれも記録します。オッズを特徴量に使うなら、予測する時点で確認できた値だけを使います。確定後の情報を混ぜると、実際には得られない成績が出てしまいます。
検証は過去から未来へ
- 古い期間を学習用、後の期間を検証用に分ける。
- 前処理の平均値や辞書は、学習用データだけで決める。
- 単純な基準と比べる。複雑なモデルを使う前に、人気順など既知の基準との差を見る。
- 検証期間をずらして複数回確かめる。
- 最後に、使っていない直近の期間で再評価する。
ランダムに行を分けるだけでは、同じレースの馬が学習用と検証用に分かれ、結果を知っているのと近い状態になり得ます。また、途中で検証期間の結果を見ながら調整を繰り返すと、その期間に合うだけのモデルになります。
的中率だけでなく、予測の使い道を見る
的中率が高くても、選ぶ馬のオッズや購入条件によって収支は変わります。一方、少数の高配当で回収率が高く見えても、偶然の影響が大きい場合があります。購入を伴う評価をするなら、購入点数、対象レース数、期間、払戻額、購入額をセットで記録します。的中率と回収率の違いで詳しく説明します。
Pythonで始めるなら
表形式のデータを読み込み、開催日で分割し、欠損値処理、基準モデル、評価表の順に作ると、どこで成績が変わったか追いやすくなります。最初から複雑な深層学習モデルを選ぶ必要はありません。コードより先に、データの出所と「予測時点で知り得る項目」を一覧にします。
よくある質問
無料データだけで作れますか? 学習用の小さな試作は公開情報から始められます。ただし取得・利用条件と、必要な項目が揃うかを確認してください。
AIなら人より高い回収率になりますか? 保証できません。過去の検証結果は将来の成績を約束しません。
馬券の購入はJRAの案内と20歳未満の購入禁止を確認し、予算の範囲で行ってください。