競馬AIを作る方法について説明しています。競馬AIを作るために使える無料ツール「R」と「RStudio」、そして競馬AI作成の中核となる「データ収集」「AIモデルの作成」といった作業についても具体的に紹介しています。
競馬AIを作るための4ステップ
競馬AIに限らず、AIをつくるための手順は大きく捉えると以下の4つになります。
- AIの活用内容を決める
- 目的のデータを集める
- AIモデルを作成する
- 学習したモデルをシステムに組み込む
AIの活用内容を決める
今回、競馬AIと謳った記事なので1つめの活用内容はおおよそ決まっていますね。「当てること」もしくは「勝つこと」でしょう。「当てる」を優先するのか「勝つ」を優先するのかで、どういうデータを取得するのか、どのようなモデルを考えるのかが変わってきますので、データを集める前に、活用内容を決めておきましょう。
目的のデータを集める
AIに学習させるデータを収集します。AIのモデルは何度も見直しながら精度を高めていくものです。見直しの中で追加したいデータが出てきた時に対応できない、なんてことのないように、データ収集の段階では、コスト・時間の許す範囲でできるだけ多くのデータを収集することをお勧めします。データの集め方についてはこちらのページにまとめています。この方法なら、ダウンロードしたデータをcsv形式で保存することも簡単にできます。
AIモデルを作成する
入力変数、出力値の選択
AIモデルという言葉を使ってはいますが、結局のところ、ある入力値に対してある値を返す関数です。どういう入力値どういう出力を返す関数(AIモデル)を作るのかは人間が考える必要があります。入力としては、過去の走破タイム、そのときの距離、競馬場、馬場状態、騎手、斤量、…、血統、などがあるでしょう。入力変数の数を増やしたからといって、必ずしも、予測精度が高くなるわけではありませんので、適切な変数を選ぶ必要があります。
また、出力としても、走破タイム、単勝確率、複勝確率、…などが考えられます。特に出力については、後述の機械学習モデルの選択とも関わってきますので、適切な変数・モデルを選ぶ必要があります。
入力変数、出力変数のどちらも「適切に」選ぶ必要があります。「適切に」選べない場合は、場合によっては(毎回?)、トライアンドエラーで行っていくこともあるかと思います。
機械学習モデルの選択
出力したい変数や、モデルの特徴を考慮して、「適切に」モデルを選択する必要があります。モデルの選択も「適切に」行えない場合は、トライアンドエラーで行っていくことになるでしょう。
- ロジスティック回帰
- ランダムフォレスト
- 勾配ブースティング
- サポートベクターマシン(SVM)
- k近傍法(CNN)
- ニューラルネット、ディープラーニング(CNN、RNN)
など
モデルの訓練・検証・テスト
入手したデータをもとにAIモデルを作成するわけですが、AIモデルの訓練の具体的な方法は、モデルごとの方法によりますが、一般に、入手したデータを「訓練用」「検証用」「テスト用」の3つに分けてAIモデルの精度を向上させていくことが多いです。
- 訓練データ: パラメータ(※)の学習に利用する
- 検証データ: ハイパーパラメータ(※)の性能を評価するために利用する。
- テストデータ: 汎化性能をチェックするために、最後に一度だけ利用する。
(※)パラメータ、ハイパーパラメータとは
- パラメータ : 機械学習が学習する値(重み、バイアス等)
- ハイパーパラメータ: モデル構築者が設定する値(学習率、ネットワークの層数、等)
学習したモデルをシステムに組み込む
学習したAIモデルを企業内の活動やWebアプリケーションなどで利用する場合、学習したモデル(= モデルに対応する数値列)を使い易い形で実装する必要があります。Web系サービスに利用するなら、HTML/CSS, JavaScript、スマホアプリなら、Swift、Kotlin、業務システムに実装するならそれに応じたプログラミング言語を用いて、AIシステムを実装します。
無料ツールを利用してAIモデルをつくる
競馬AI作成の中核となる「データ収集」「AIモデルの作成」といった作業についても具体的に紹介します。ツールとしては、無料で使える「R」と「RStudio」を使います。
利用するツール(無料)
競馬AI作成のためのツールとして、R, RStudioを利用します。RはPythonと並びデータサイエンスの分野でよく使用される言語です。RStudioはRの開発環境としてほぼデファクトスタンダードになっているIDE(統合開発環境)です。R、RStudioのインストールはこちらを参照してください。
データ収集(スクレイピング)
JRA-VANデータラボの会員になれば、公式データをcsv形式でダウンロードすることができるのですが、年間約24,000円(月額2,090円(2022年1月現在))もかかります。が、高すぎます!そんなことにお金を使えません!だって、一手間かければ、無料でデータを入手できるんですから。
データ入手の方法は一択。netkeiba URL: https://www.netkeiba.com/ からのスクレイピングです。この方法でデータを無料で入手しましょう。
また、競馬場、距離、馬場状態の異なる状況での走破タイムをもとに評価しても、推定精度が高くならない可能性が考えられます。これらの影響を加味して馬の能力を評価した「スピード指数」も無料でアクセスできるサイト(競馬新聞&スピード指数(無料)URL : http://jiro8.sakura.ne.jp/)から、入手できます。
スクレイピングして入手したデータはこんな感じです。表形式のデータになっていますから、csv形式のようなデータで保存することも簡単にできます。
スクレイピングをするためにはスクレイピング用のパッケージであるrvestとHTML/CSSの理解も必要。とりあえず、これだけ知っていればスクレイピングは始められます。
競馬データの分析
AIモデルを作るにあたり、どういう変数(特徴量)から何を予測するのかを設定する必要があります。そのためには、まず分析。データから少しでも多く傾向を見つけましょう。
特徴量
- 走破タイム
- 距離
- スピード指数
- 斤量
- 競馬場
- コース(芝、ダート)
- 馬場状態(良、稍重、重、不良)
- オッズ
など
予測対象
- 走破タイム
- 着順
- 1着確率
- 連対確率
- 複勝確率
など
データの分析例
例えば、オッズと着順の関係など。
データの可視化
データ分析の第一歩は可視化。集めたデータを可視化してグラフィカルな出馬表を作るだけでも、情報が整理できて予想がしやすくなります。
AIモデルの作成
AIと聞くとまずディープラーニングを思い浮かべるのではないでしょうか。Pythonによるディープラーニングでよく目にするのがKeras/TensorFlowの組み合わせだと思います。RでもRStudio社からKeras/TensorFlowを使うためのパッケージ(keras)が出されています。このパッケージはPythonで動くKerasに対するインターフェースとして機能するので、これを導入することにより、RからPythonのKeras/TensorFlowを使うことができます。
RとKeras/TensorFlowを用いて、手書き文字認識のディープラーニングを実装した例はこちら。全部で50行くらいのコードで識別率約98%のAIモデルが簡単に作れちゃいます。
スクレイピングにより集めたデータを用いて、kerasパッケージを利用することで競馬の予測についてのディープラーニングが行えるようになります。
ですが、ここから先は秘密の部分も多く、申し訳ありませんが、現段階では公表することはできません。上の文字認識のモデルでは簡単すぎるので、これだけでは競馬予測には不十分ですが、この延長線上に、あなたの求めているものがあるはずです。ぜひ、自分なりのAIモデルの作成を試してみてください。
まとめ
競馬AIをつくるための4ステップとその中心となる「データ収集」「可視化」「AIモデルの作成」について整理しています。リンク先ではソースコードも示しているので、興味がある方はぜひ活用してみてください。
スピード指数を作る過程を公開中
データ収集
可視化
AIモデルの作成