競馬AI開発記(開発・改善)

競馬AIが実戦段階へ|予想から自動投票・成績蓄積まで完成形に近づいた

8月から競馬AIを作りながら、実際の馬券購入を続けてきました。

振り返ってみると、8月は「競馬AIを使って馬券を買っていた」というより、

競馬AIを作りながら馬券を買っていた

という表現の方が正確だったと思います。

予想方法を考える。

適性順位を組み合わせる。

購入条件を決める。

買目を作る。

そして実際に投票する。

一つできると、また次の問題が見つかりました。

レース直前までAIを調整してしまい、締切に間に合わなかったこともあります。

自分で馬券を購入して馬番を間違えたこともありました。

そんな8月を経て、9月第1週。

ようやく「完成形」に近い状態で、土日の競馬を終えることができました。

AI予想から自動投票まで、初めてスムーズに動いた

現在のシステムでは、大まかに次の流れで馬券購入まで進みます。

AI予想

適性順位を照合

購入対象を判定

買う馬を決定

購入金額を計算

kaime.txtを作成

IPAT GO

投票

9月第1週は、この一連の流れを実際の競馬で使いました。

土曜日も日曜日も大きな操作ミスはなく、投票までスムーズに完了。

文章にすると当たり前のようですが、私にとってはここまで来るのにかなり時間がかかりました。

AIが予想するだけなら、もっと早くできていました。

しかし私が作りたかったのは「予想を表示するだけのAI」ではありません。

実際に自分が馬券を買うところまで使えるシステムです。

ようやく、その形が見えてきました。

「買う」だけでなく「買わない」もシステムが決める

9月第1週に対象となった重賞は4レース。

そのうち実際に買目が出たのは3レースでした。

札幌2歳Sでは、現在の購入条件に該当する馬がなく、

買目なし。

そのまま馬券を見送りました。

私は、この「買わなかった」という結果も重要だと思っています。

以前なら、

「せっかくの重賞だから何か買おう」

「この馬なら買ってもいいのではないか」

と自分で考えていたかもしれません。

しかし、それでは購入ルールを作った意味がありません。

現在は、条件に該当しなければ買目そのものが出ません。

買うレースを決めるだけではなく、買わないレースも決める。

これも実戦用の競馬AIには必要な機能だと思っています。

AIが◎を付けても、必ず買うわけではない

現在のシステムでもう一つ大きく変わったのが、

「AI予想」と「馬券購入」を分離したこと

です。

以前はAIが上位評価した馬を見ると、どうしても「この馬を買う」という感覚になりがちでした。

現在は違います。

AIの評価
→ 適性順位を照合
→ 購入対象判定
→ 実際の買目

という段階を踏みます。

つまり、AIが◎を付けたからといって必ず買うわけではありません。

反対に、◎でなくても購入条件を満たせば購入対象になることがあります。

9月5日の京成杯オータムHでも、この違いが実際のデータに表れました。

AIの印は「予想」。

購入判定は「馬券を買うためのルール」。

ここを分けたことで、私自身がAIの印を見て買い目を変更する余地も少なくなりました。

9月第1週は収支もプラス

システムが動くだけではなく、もちろん実際の馬券成績も記録します。

9月5日は、

購入5,900円
払戻5,400円
収支-500円
回収率91.5%

9月6日は、

購入15,700円
払戻21,280円
収支+5,580円
回収率135.5%

週合計では、

購入21,600円
払戻26,680円
収支+5,080円
回収率123.5%

となりました。

9月最初の週としてはプラススタートです。

ただし、この数字を見て購入条件を変更するつもりはありません。

まだ1週間です。

今は「勝ったから正しい」「負けたから間違い」と判断する段階ではないと思っています。

レースが終わったら「成績蓄積」へ

購入まで自動化して終わりではありません。

レース後の結果も、今後の検証には必要です。

現在は、

AI上位2頭+購入対象馬

を成績蓄積へ保存しています。

そこには適性順位や、実際に購入対象だったかどうかも残します。

これによって、後から、

「AIはこの馬をどう評価していたのか」

「適性順位は何位だったのか」

「購入対象だったのか」

「実際の結果はどうだったのか」

を確認できます。

AIを改良するときに重要なのは、結果だけを見ることではありません。

その時点でシステムがどう判断していたのかを残すこと。

これが少しずつできるようになってきました。

購入金額も実際の競馬資金に連動させた

今回、新たに手を加えた部分があります。

購入金額の基準となる競馬資金です。

これまでは元金30万円を基準としていました。

しかし実戦を続ければ、当然資金は増減します。

現在は、

元金300,000円
累計収支-1,800円
現在資金298,200円

です。

そこで、

馬券収支管理_Ver2.xlsm

MENU!F12

にある現在資金を、V1側の

買目!E2

から参照するようにしました。

これで次回からは固定された30万円ではなく、実際の競馬資金残高を基準に購入額を計算できます。

小さな変更ですが、実戦で長く使うことを考えると必要な部分でした。

VBAでやろうとして、やめた

実は、この資金連携を最初から単純に作れたわけではありません。

当初はVBAを使って、

別のExcelファイルを開く

現在資金を取得する

V1へ反映する

という処理を考えていました。

しかし作っていくと、だんだん処理が複雑になります。

ファイルを開く。

値を取得する。

エラー処理も考える。

そこまでVBAでやる必要があるのだろうか。

そこで最終的には、Excel本来の外部参照を使うことにしました。

結果として、こちらの方がずっと単純でした。

今回の競馬AI開発を続けていて感じることがあります。

自動化すればするほど良いわけではない。

VBAを使わなくてもExcelだけで簡単にできるなら、その方がいい。

複雑な仕組みほど、どこかでトラブルが起きたときに原因を探すのも大変になります。

自分一人で使い続けるシステムだからこそ、

単純にできるところは単純にする。

これも今回の開発で覚えたことの一つです。

ここからは「改良」より「データ蓄積」

もちろん、まだ試してみたいことはあります。

L列に残している単勝候補。

◎○▲の3頭馬連BOX。

ほかにもデータを見ていると、「これも検証してみたい」と思うものが出てきます。

でも、全部を一度に始めるつもりはありません。

検証項目を増やしすぎると、何を検証しているのか分からなくなります。

そして少し結果が悪くなるたびに条件を変更していたら、データも積み上がりません。

8月は作るために何度も変更しました。

しかし9月からは違います。

購入ルールを変えない。
システムも必要以上に触らない。
そして実戦結果を蓄積する。

まずはこれを続けます。

十分なデータが集まったときに、初めて次の検証を考えればいい。

今はそう考えています。

8月の「開発」から、9月の「実戦」へ

8月は、

「競馬AIを作りながら馬券を買う」

状態でした。

9月からは、

「作った競馬AIに従って馬券を買い、その結果を蓄積する」

段階に入ります。

9月第1週は、4重賞のうち3レースを購入し、1レースは見送り。

投票まで大きな操作ミスなく終わり、週の収支も+5,080円でした。

もちろん、これで競馬AIが完成したとは思っていません。

データもまだ足りません。

ただ、

予想する
→ 買うか判断する
→ 購入する
→ 結果を残す

ここまで一つの流れとして使えるようになった。

8月から作り続けてきたものが、ようやく「実戦で使う道具」になってきたように感じます。

だから、しばらくは余計なことをしない。

作ることより、使うこと。
変更することより、記録すること。

9月は、この競馬AIが本当に使えるものなのか、同じ条件のまま確かめていきます。

-競馬AI開発記(開発・改善)