この記事は、YouTubeでもご覧いただけます。映像とナレーションで内容がよりわかりやすく解説されているので、ぜひ以下のリンクからご覧ください。
■波乱レースに特化した競馬予想AIの作り方
https://youtu.be/djsKQNs65WI
特定のデータだけ学習させる
電気自動車の最大手である「テスラ」の車用AI(自動運転)の開発には、世界中を走行するテスラ車の膨大な運転映像が使われてます。そして、それを学習したAIが平均的なドライバー並みの運転にならないように、状況に上手に対応した例だけを学習に使ってるそうです。
つまり、車用AIの開発には優秀ドライバーの運転だけを学習データに使ってる、ということです。
一方、ネットでよく見かける回収率至上主義の競馬予想AIは、全てのレースを区別せずに学習させてます。テスラの例を競馬予想AIに応用するなら、万馬券を的中させるAIを作りたかったら、万馬券のレースだけ学習させろ、ということになると思います。
そこで、今回の取り組みでは「3連複万馬券」のレースだけをLightGBMに学習させてみます。3連複万馬券という選択は極端に思えるかもしれませんが、特定のレース結果に対する予測能力を向上させる点で有効かもしれません。
万馬券を狙うには、機械学習であろうが人間であろうが、本命狙いと同じ思考回路では万馬券を的中させることはできませんからね。
学習用ソースコード
学習用ソースコードの公開は省略します。「LightGBMによるAI競馬予想(二値分類)」の記事と同じ内容なので、詳細はそちらを参照してください。
学習データを作る
ということで、今回は「LightGBMによるAI競馬予想(二値分類)」の記事で使った学習データから、3連複万馬券になったレースのみをフィルターします。これはSQLにフィルターの条件を加えるだけで簡単に作れます。
学習データの集計期間は同じく、JRAの2013年~2022年までの10年間とします。説明変数も同じです。内容は「LightGBMによるAI競馬予想(準備編)」の記事を見てください。
このページの最後に、サンプルのSQLを有料会員に公開しています。ユーザーがカスタマイズして利用することも可能ですし、SQLを学習したい方の参考にもなります。
LightGBMに学習させる
この章は省略します。「LightGBMによるAI競馬予想(二値分類)」の記事と同じ内容なので、詳細はそちらを参照してください。
モデルを評価する
同じ学習用ソースコードを使うので、評価指標も「LightGBMによるAI競馬予想(二値分類)」と同じものが表示されます。
予想よりも良い結果が出て、適合率は50%でした。しかし、この評価指標はここでは参考になりません。なぜなら、特定の条件でフィルターした学習データを使ったモデルの評価指標だからです。
実際に馬券を買うときは、万馬券かどうかなんてレースが終わるまで分かりません。
特徴量重要度
特徴量重要度をざっくり言うと、重要度が高い説明変数ほど、目的変数である確定着順に対して影響力が強いということです。
しかし、今回は特定の条件でフィルターした学習データなので、波乱レースに対して影響力が強い説明変数を明らかにしています。そこで、フィルターなし(全レース)の二値分類モデルと比較して、特徴量重要度がどのように変化したのか調べてみました。
■フィルターなし(全レース)
■フィルターあり(3連複万馬券)
kako1_nyusen_juni(過去1入線順位)は、フィルターなし(全レース)では最も重要ですが、フィルターあり(3連複万馬券)では重要度が下がります。全体として、フィルターありのグラフでは、より多くのkako2_(過去2)の説明変数が上位に位置してます。これは、万馬券の予測においては前走成績がそれほど重視されないことを示してます。
フィルターの有無によるグラフの違いから、万馬券を狙う場合には馬体重など、通常の予測とは異なる説明変数が重要であることが分かります。また、過去2走以前を考慮することが、万馬券的中の鍵となる可能性があります。これらの違いを踏まえて学習データを設計することで、より精度の高いモデルが期待できるでしょう。
あくまで今回のモデルの結果に基づいているので、この説明変数だけで万馬券が的中しまくり、という話じゃありません(笑)
過学習のリスク
このように、特定の条件でフィルターした学習データでモデルを訓練することで、特定の条件を的中する予測が可能になるかもしれません。ただし、この方法は学習データの偏りによる過学習のリスクも伴うため、慎重に評価とテストを行うことが重要です。
モデルの回収率を集計するには
気になるのは、このモデルで全レースを購入した場合の回収率と的中率です。
完成したモデルで、フィルターなしの全レースを予測させた結果が、モデルの真の性能となります。
興味がある方は、他の記事も参考にしながら、自分でフィルターの条件を考えて試してみてください。