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が本当に使えるものなのか、同じ条件のまま確かめていきます。