競馬予想AIの作り方 無料ツールのみで作成する方法

R

競馬AIを作る方法について説明しています。競馬AIを作るために使える無料ツール「R」と「RStudio」、そして競馬AI作成の中核となる「データ収集」「AIモデルの作成」といった作業についても具体的に紹介しています。

競馬AIを作るための4ステップ

競馬AIに限らず、AIをつくるための手順は大きく捉えると以下の4つになります。

  1. AIの活用内容を決める
  2. 目的のデータを集める
  3. AIモデルを作成する
  4. 学習したモデルをシステムに組み込む

AIの活用内容を決める

今回、競馬AIと謳った記事なので1つめの活用内容はおおよそ決まっていますね。「当てること」もしくは「勝つこと」でしょう。「当てる」を優先するのか「勝つ」を優先するのかで、どういうデータを取得するのか、どのようなモデルを考えるのかが変わってきますので、データを集める前に、活用内容を決めておきましょう。

目的のデータを集める

AIに学習させるデータを収集します。AIのモデルは何度も見直しながら精度を高めていくものです。見直しの中で追加したいデータが出てきた時に対応できない、なんてことのないように、データ収集の段階では、コスト・時間の許す範囲でできるだけ多くのデータを収集することをお勧めします。データの集め方についてはこちらのページにまとめています。この方法なら、ダウンロードしたデータをcsv形式で保存することも簡単にできます。

競馬 過去データcsvをnetkeibaから無料で入手する方法
JRA-VANを無料で使えるのはお試し期間のみ。競馬のデータ分析を継続して行うには、どうしても過去の競馬レース結果データを自前で収集する必要があります。netkeibaからのスクレイピング方法やデータを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のインストールはこちらを参照してください。

R言語とは?Rでできること。現役Rユーザーが語る。
R言語は、データ分析、統計解析に特化した言語であるとよく言われます。しかし「データ分析」「統計解析」しかできないと考えてしまっては損をしています。C/C++のような汎用のプログラミング言語同様の制御構造を備えていますし、CRANで公開されているパッケージを利用すれば、はるかに簡単に望みの機能を実装することができる言語です。

データ収集(スクレイピング)

JRA-VANデータラボの会員になれば、公式データをcsv形式でダウンロードすることができるのですが、年間約24,000円(月額2,090円(2022年1月現在))もかかります。が、高すぎます!そんなことにお金を使えません!だって、一手間かければ、無料でデータを入手できるんですから。

データ入手の方法は一択。netkeiba URL: https://www.netkeiba.com/ からのスクレイピングです。この方法でデータを無料で入手しましょう。

競馬 過去データcsvをnetkeibaから無料で入手する方法
JRA-VANを無料で使えるのはお試し期間のみ。競馬のデータ分析を継続して行うには、どうしても過去の競馬レース結果データを自前で収集する必要があります。netkeibaからのスクレイピング方法やデータをcsv 形式で保存する方法について記述しています。

また、競馬場、距離、馬場状態の異なる状況での走破タイムをもとに評価しても、推定精度が高くならない可能性が考えられます。これらの影響を加味して馬の能力を評価した「スピード指数」も無料でアクセスできるサイト(競馬新聞&スピード指数(無料)URL : http://jiro8.sakura.ne.jp/)から、入手できます。

競馬予想AIの作り方 〜 Rでスピード指数をスクレイピング
スピード指数データは「無料」「スピード指数」で検索して、トップに出てくる下記のサイトからを入手させていただくことにしました。 競馬新聞&スピード指数(無料)

スクレイピングして入手したデータはこんな感じです。表形式のデータになっていますから、csv形式のようなデータで保存することも簡単にできます。

レース結果の取得例

レース結果の取得例

スピード指数の取得例

スピード指数の取得例

 

スクレイピングをするためにはスクレイピング用のパッケージであるrvestとHTML/CSSの理解も必要。とりあえず、これだけ知っていればスクレイピングは始められます。

Rでスクレイピングするならrvest 表もリンクもテキストも
Rでスクレイピングをするならrvestパッケージを使うのがベスト。表データ、リンク先URL、テキストなどのデータを簡単に入手できます。netkeibaのレース結果を題材にrvestパッケージの使い方をまとめています。
スクレイピングに必要な最低限のHTML/CSSの知識
スクレイピングでデータを収集するためには、HTMLで書かれたWebページの文書構造を理解し、どこに目的のデータが記載されているかをコンピュータに教えてやる必要があります。このページではスクレイピングに最低限必要なHTML/CSSの知識をまとめています。

 

 

競馬データの分析

AIモデルを作るにあたり、どういう変数(特徴量)から何を予測するのかを設定する必要があります。そのためには、まず分析。データから少しでも多く傾向を見つけましょう。

特徴量

  • 走破タイム
  • 距離
  • スピード指数
  • 斤量
  • 競馬場
  • コース(芝、ダート)
  • 馬場状態(良、稍重、重、不良)
  • オッズ

など

予測対象

  • 走破タイム
  • 着順
  • 1着確率
  • 連対確率
  • 複勝確率

など

データの分析例

例えば、オッズと着順の関係など。

競馬 単勝オッズと着順の統計。あなたが選んだ馬は何着になる?
「単勝オッズが〇〇倍だったら、1着になる確率は△△%」「単勝オッズが■■%を超えると1着になる確率よりも2着になる確率の方が高くなる」なんて情報知ってたら、もっと競馬を楽しめるようになるはず。単勝オッズと着順の関係を整理してみました。

データの可視化

データ分析の第一歩は可視化。集めたデータを可視化してグラフィカルな出馬表を作るだけでも、情報が整理できて予想がしやすくなります。

競馬予想 データを可視化 スピード指数を活用する
スピード指数を可視化して、出馬表をグラフィカルにするためのソースコードを公開します。データを可視化すれば、情報を適切に評価して、迷うことなく買い目を選択できるようになったり、競馬が上手な人にしかわからないことがわかるようになるなどの効果が得...
今週のメインレース の「血統指数」「タイム指数」「1着予想確率」
競馬予想に大切な要素である血統(父馬、母父馬)、過去の走破タイムを数値で評価。数値化することでこれまで競馬が上手い人にしかわからなかったこともクッキリ。

 

AIモデルの作成

AIと聞くとまずディープラーニングを思い浮かべるのではないでしょうか。Pythonによるディープラーニングでよく目にするのがKeras/TensorFlowの組み合わせだと思います。RでもRStudio社からKeras/TensorFlowを使うためのパッケージ(keras)が出されています。このパッケージはPythonで動くKerasに対するインターフェースとして機能するので、これを導入することにより、RからPythonのKeras/TensorFlowを使うことができます。

RとKeras/TensorFlowを用いて、手書き文字認識のディープラーニングを実装した例はこちら。全部で50行くらいのコードで識別率約98%のAIモデルが簡単に作れちゃいます。

RとKeras(TensorFlow)でディープラーニング
Keras/TensorFlowを使えばRでもディープラーニングを行うことができます。しかも、とても簡単に。Keras/TensorFlowのインストールから、簡単な例題までを、はじめてディープラーニングにトライする方に向けてまとめています。

スクレイピングにより集めたデータを用いて、kerasパッケージを利用することで競馬の予測についてのディープラーニングが行えるようになります。

ですが、ここから先は秘密の部分も多く、申し訳ありませんが、現段階では公表することはできません。上の文字認識のモデルでは簡単すぎるので、これだけでは競馬予測には不十分ですが、この延長線上に、あなたの求めているものがあるはずです。ぜひ、自分なりのAIモデルの作成を試してみてください。

 

 

まとめ

競馬AIをつくるための4ステップとその中心となる「データ収集」「可視化」「AIモデルの作成」について整理しています。リンク先ではソースコードも示しているので、興味がある方はぜひ活用してみてください。

スピード指数を作る過程を公開中

競馬スピード指数の作り方 〜 作成過程を公開(1)
競馬データの分析の目的は、競走馬の能力を適切に把握すること。そのための1つの方法として馬の能力の指数化、いわゆる、スピード指数化というものがあります。スピード指数の計算は距離、馬場等に対して、さまざまな補正がなされています。「さまざまな補正」に自分の考え方を盛り込みたい、という人はどうしても自分で指数を作る必要があります。その指数を作っていく過程をまとめています。

データ収集

競馬 過去データcsvをnetkeibaから無料で入手する方法
JRA-VANを無料で使えるのはお試し期間のみ。競馬のデータ分析を継続して行うには、どうしても過去の競馬レース結果データを自前で収集する必要があります。netkeibaからのスクレイピング方法やデータをcsv 形式で保存する方法について記述しています。

可視化

競馬予想 データを可視化 スピード指数を活用する
スピード指数を可視化して、出馬表をグラフィカルにするためのソースコードを公開します。データを可視化すれば、情報を適切に評価して、迷うことなく買い目を選択できるようになったり、競馬が上手な人にしかわからないことがわかるようになるなどの効果が得...

AIモデルの作成

RとKeras(TensorFlow)でディープラーニング
Keras/TensorFlowを使えばRでもディープラーニングを行うことができます。しかも、とても簡単に。Keras/TensorFlowのインストールから、簡単な例題までを、はじめてディープラーニングにトライする方に向けてまとめています。