競馬ツール用の作業環境づくりと過去データの確認
新しく競馬のデータ分析や予想ツールを作るためのプロジェクトを立ち上げました。
まずは作業を始める前の準備として、親フォルダにある共通データベースや、
ルール設定・自動保存などの仕組みに問題なくアクセスできるかを確認してもらいました。
連携自体はすぐに確認できたので、
続いて以前別の環境で作っていた競馬ツールのデータを持ち込みました。
過去のレース結果などを一から集め直すとかなりの労力がかかるため、
以前使っていたデータ収集用のプログラムとデータベースを、
インポート用の一時フォルダにコピーして状態を見てもらうことにしました。
この確認をお願いするにあたって、AIにはあらかじめ2つのことを伝えておきました。
・一時フォルダの中身は勝手に書き換えず、読み取り専用で確認してほしいこと
・取得先のサイトは状況によってページの構造が微妙に変わるため、
一見すると遠回りに見える対策処理をたくさん入れていること
AIにコードを読むよう頼むと、
親切心から「無駄な処理を整理しておきました」と書き換えられてしまう不安があったからです。
チェックしてもらった結果、データベースの中身は無事で、
私が仕込んでいた文字コードの切り替えや、
表のズレを吸収するための泥臭い対策の意図もしっかり把握してくれました。
ただ、データ収集プログラムを単体で動かすためには、
以前の環境からコピーし忘れている部品がいくつかあることが分かりました。
いきなり本番フォルダへ移す前に確認してもらって正解でした。
遊び用の隔離フォルダを作って菊花賞の予想対決
不足しているファイルの持ち込みは後で落ち着いてやることにして、
午後は少し予定を変え、AIと馬券の予想対決をして遊んでみることにしました。
ちょうどこの日に中央競馬で菊花賞が開催されるタイミングだったのと、
単なる遊びだけでなく、1つのテストをしておきたかったからです。
私はこれから機械学習を使った予想ツールを作ろうとしていますが、
もしAIがネット上の情報を集めて自律会議で議論するだけで十分な回収率を出せるなら、
わざわざ苦労して機械学習の仕組みを組む必要すらなくなってしまいます。
今のAIの実力がどの程度のものなのか、実際のレースで試してみることにしました。
本体の開発環境と混ざってフォルダの中が散らからないように、
作業フォルダの中に遊び用の隔離フォルダを1つ作ってもらい、
今回の対決に関するメモや記録はすべてその中だけで完結させるルールにしました。
その上で、予想にあたって以下の条件を伝えました。
・1レースに使えるのはあらかじめ決めた一定の予算枠までとすること
・毎年開催されるレースなので、過去の年の情報と今年の出走馬を混同しないこと
・当てること自体を目的にせず、回収率を高める視点で自律会議にかけること
期待値を追ったAIの結論と私の買い目
発走の30分ほど前に、AIの自律会議による予想が出揃いました。
断然の1番人気だったロブチェンについては、実績は最上位と認めつつも、
馬体が大きいうえに雨残りの長距離戦では取りこぼす隙があり、
単勝オッズが低すぎて期待値が見合わないという理由で1着固定から外していました。
さらに2番人気のダノンヒストリーも人気先行として評価を下げ、
5番人気のアウダーシアを本命に据えて中穴へ流すという、なかなか理屈の通った構成でした。
対する私の予想は、3番人気のゴーイントゥスカイを本命、
AIと同じ5番人気のアウダーシアを対抗にして、上位人気2頭を外す強気の買い方にしました。
買い目は、本命と対抗の2頭軸から全体に流す三連複と、枠連の2種類です。
枠連の方は、私が消した2番人気のダノンヒストリーが同じ5枠に入っていたため、
万が一そちらが来ても拾えるというちょっとした保険も兼ねていました。
ふたを開けてみると、お互いアウダーシアを高く評価している点は同じでしたが、
京都の長距離戦が得意な武豊騎手が乗るゴーイントゥスカイを、
本命にした私と完全に消したAIで真っ向から意見が割れる形になりました。
レース結果と予想の答え合わせ
レースが終わってから公式の結果を集計してもらうと、
1着は私が本命にしたゴーイントゥスカイ、2着は8番人気のバステール、
3着は2番人気のダノンヒストリーという結末でした。
断然1番人気のロブチェンは14着に敗れ、お互いが軸にしていたアウダーシアも9着に沈みました。
アウダーシアが敗れたため、馬券の収支はお互い払戻なしの引き分け(回収率0%)に終わりました。
ただ、AIが完全に消していた馬が見事に1着になり、
上位人気の取捨選択も含めて、予想の中身としては人間側の圧勝と言っていい結果でした。
AIからも素直に惨敗を認めるレポートが返ってきて、少しホッとした気分になりました。
自分の予想手順を話して見えた機械学習のヒント
レース後の振り返りでは、私がどういう手順で今回の本命馬を選んだのかを、
種明かしも兼ねてAIにそのまま話してみました。
実はそこまで複雑なことをしていたわけではなく、普段使っている競馬サイトの有料会員向けデータにある、
タイム指数という数字をベースに以下のような順番で絞り込んでいました。
・直近5走のタイム指数が右肩上がりになっている成長中の馬を高く評価する
・その中から、追い切りなどの調教の数字やコメントが良い馬をさらに上に置く
・候補に残っても、有名な人気騎手が乗っていて実力以上に買われている馬は妙味が薄いので外す
この手順に当てはめた結果、一番上に残ったのが1着のゴーイントゥスカイでした。
言葉では「1番人気と2番人気を外した」と言ったものの、
1番人気のロブチェンは人気だから嫌ったわけではなく、
最初の「直近5走の指数が右肩上がり」という条件の時点で、自動的に候補から消えていました。
一方で2番人気のダノンヒストリーは最後まで候補に残っていたのですが、
ルメール騎手が乗っていてオッズが吸われすぎていると感じ、個人的な判断で消していました。
これを聞いたAIからは、その選び方はそのまま今後作る機械学習モデルの、
特徴量(学習させる判断材料)として非常に優秀だと言われました。
着順という表面の数字ではなく指数の上昇傾向を見ることや、
人気騎手によるオッズの歪みを差し引いて考えることは、回収率を狙う上で理にかなっているそうです。
自分では半ば感覚や好き嫌いも交えてやっていた絞り込みでしたが、
こうして言葉にしてAIにぶつけてみると、ツール開発に直結するルールとして整理できるのだと分かりました。
言語を扱うAIは、一度失敗しても反省点をルールとして積み重ねていける強みがあります。
本格的な機械学習ツールの開発を進めつつ、しばらくは週末の予想対決も続けて、
自分の予想ロジックの整理とAI側の精度検証を並行して楽しんでいこうと思います。