競馬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開発記(開発・改善)