この記事はMIXI DEVELOPERS Advent Calendar 2023の4日目の記事です。
はじめに
本記事は私が普段業務・趣味で競馬等公営競技周りのAI開発をしている経験を活かして、
netkeibaが主催する「AI競馬予想マスターズ」に参加した上でシステム構成やAIの戦略面で考えたことをまとめました。
AIの精度向上的な観点は素晴らしい他の記事が多数あるので軽く触れる程度に留めようかとと思います。
最終戦進出し、
本記事執筆現在最終戦が開催中なので「湯けむり競馬部」応援よろしくお願いします!
競馬AIとは
競馬AIの目的次第ですが今回の大会では馬券の収支成績を競うためのAIということになるので
競馬AIは何かしらの機械学習モデル単体ではなく
機械学習モデル等を含み最終的に購入する馬券を組み立てる戦略システム全体として話を進めます。
競馬AIには2種類ある
競馬AIを利用目的で2種類に分けてみました。
この限りではないのかもしれませんが、利用目的に合わせた設計は熟考すべきテーマです。
- 馬券投票で儲ける
- 投票締め切り直前に投票することが可能
- 最終に近いオッズを利用することが可能
- 馬体重等直前発表の特徴量を利用が可能
-> データ利用面で有利になる
- 自分の投票資金によって戦略立てをできる
- 投票締め切り直前に投票することが可能
- 予想を販売する
- 前日・前々日に予測を作ることが必要
- ユーザーが購入する時間を用意する必要があるため
- ユーザーが買いたいと思う買い目戦略が必要
- ほとんどのユーザーは多数のレースを投票しないので結構的中寄りな買い目でないと1日的中なしなどの体験を提供してしまう
- 前日・前々日に予測を作ることが必要
大会ルールの考察
-
予選1・予選2・最終戦の3部構成でラウンドごとに下位が脱落方式
- ラウンドは1月単位で実施されるので、最終戦に安定して進むには1月分のレース数で成績が安定する馬券戦略を取る必要がある。
- 逆に1日単位で安定している必要はないという意味では結構強気な買い目設計をして良さそう。
-
予選1・予選2はスタート時に500万円分の資金を配布。最終戦は予選1・予選2の払い戻し額が資金になる。
- 予選で高額の的中をしておくと、決勝ラウンドで有利に働く戦略を取ることもできる
- 100万円クラスの的中を狙いに行くと上記の
1月分のレース数で成績が安定する馬券戦略
の実現が難しくなる
-
1レースあたり、最大15万円分・最大点数200点を上限
- ある程度レース数を投票する必要があり、一発ワンチャン戦法がある程度封じられている
-
馬券の最小単位は100円、ただしレースに参加する場合最低1万円分は投票
- このルールはいまいち意図がわかりませんでした
-
予選1・予選2の500万円を使い切れなかった場合は差分を払戻金額から減算
- 予選1ラウンドで残資金7千円くらいになってしまい。
このルールとレースに参加する場合最低1万円分は投票
の合わせ技で7千円使いきれず。ペナルティをもらってしまいました。
ナンデヤ
- 予選1ラウンドで残資金7千円くらいになってしまい。
-
投票時間は各レースの発走時刻3分前まで
- 実際の投票と大体同じ締め切り時間で、
馬券投票で儲ける
のケースでの戦略をそのまま利用することができました。
- 実際の投票と大体同じ締め切り時間で、
-
優勝賞金100万円!!
買い目戦略
公営競技ベッティングAIとしてはシンプルな構成をとっているかと思います。
AI->各馬の予測確率(1着, 2着以内, 3着以内)
組み合わせの予測確率->Harvilleの公式を多少応用して計算。
以下が元のHarvilleの公式による勝率P(A)P(B)P(C)から三連単P(ABC)を求める式です。
P(ABC) = P(A)*\frac{P(B)}{(1-P(A))}*\frac{P(C)}{1-P(A)-P(B)}
オッズ->直前にwebから取得
単体および組み合わせの予測確率とオッズを掛け合わせることで買い目の期待値が計算できます
確率・オッズどちらも誤差がなければ、この時点で理論上無限に試行することができれば期待値>1の買い目を買い続けるだけで収支100%は達成できるはずです。
ですが、1月あたりのレース数は概算
288R = 12(1日あたりのレース数)*3(3場開催の場合)*8(開催日数)
程度であるので、最低でも288レースである程度当たる程度の推定的中確率がある買い目を買うのが現実的です。
が、予選1,2終了現在。リスク承知でワンチャン狙う戦法で結果を出している参加者もいるようなのでそこは戦略次第です。
大会期間での的中の頻度と期待値を考慮して、買える買い目は全部買う戦略をとっているため
予選1,2での1R平均買い目点数が28.7点と参加者内1位になっていました。
制御に関する詳しい設定はここには書けませんが(気になる方は大会ホームページで買い目が公開されているので分析してみてください)、3連単が的中した場合払い戻しが大きくなるように設定しています。
システム構成
学習環境は特筆することはないので予測環境について書くことにします。
ローカルのコンピューターリソースをずっと稼働さるわけには行かないのでGoogleCloud上にシステムを構築しています。
各モジュールはGoogleCloudFunctionsで作成し連携することで予測を実行します。
- データ
収集
netkeibaからスクレイピングで取得します。
予測確率モデルに必要なレースデータ
各データはGoogleCloudSQLに保存します
*スクレイピングはサーバーに負荷をかけない紳士的な頻度で - 予測確率推定
上記で作成したデータをGoogleCloudStorageに保存された予測モデルに入力し予測確率を作成します。
予測確率は一旦csvでGoogleCloudStorageに保存 - 買い目作成
上記で作成した予測確率と現在のオッズを比較し、ルールに基づいて買い目を作成し大会APIに登録します。 - 実行管理
GoogleCloudSchedulerにより1分ごとに実行され、
レース20分前にデータ作成
レース15分前に予測確率推定
レース5分前に買い目作成を実行します
さいごに
この大会が開催され他の競馬AI開発者の生の買い目を見ることで
買い目に対する考え方に思いのほか多様性があったことに気づき、また自分の戦略を深めることもできたと思っていて開催いただいているnetkeibaさんには感謝しています。
ついでに賞金欲しい!!