機械学習(重回帰分析)を利用して競馬予測に挑戦します!

スポンサーリンク

機械学習(重回帰分析)を利用して競馬予測に挑戦します! では、データ分析の新しい挑戦として競馬予測についてご紹介します。

過去の記事で機械学習の基本である回帰分析についてご説明しました。

機械学習の基本!回帰分析(単回帰分析・重回帰分析)について

2019年2月24日

この回帰分析を活かして何を分析できるかを考えた結果、第1弾として競馬予測に挑戦してみることにしました。

ここではその分析の手法や手順、予測の対象とするレースの基準などについてご説明します。

過去のレース情報の利用して、未来のレースを予測していきます!

この記事の公開以降、予測対象の基準を満たすレースの予測と結果をご紹介していこうと思います。

  1. 分析手法について
  2. 競馬予測に利用するデータについて
  3. どのような手順で分析しているのか
  4. 予測結果に表示するデータ
  5. 予測の対象とするレースの基準

機械学習(重回帰分析)を利用して競馬予測に挑戦します!

1. 分析手法について

まずは、分析手法についてご紹介します。

ここでは回帰分析、その中でも重回帰分析と呼ばれる手法を利用して競馬予測をしています。

 

回帰分析は、機械学習の中でも最も一般的な手法の一つで、その中でも単回帰分析と重回帰分析の2つに分けられます。

回帰分析に関するご説明はこちらの記事でご紹介しているので、もし詳しく知りたいという方がいらっしゃいましたらご参考ください。

機械学習の基本!回帰分析(単回帰分析・重回帰分析)について

2019年2月24日

ただこちらのページで紹介しているのは数式というよりかはイメージです。

原理をしっかり知りたいという方に記事内で紹介しているリンク先をご参考ください。

2. 競馬予測に利用するデータについて

次に競馬予測で利用しているデータについてご説明します。

重回帰分析では複数の変数をもとに予測対象となる値を予測します。

基本的には、なるべくたくさんの変数を利用するスタンスを取っていますが、その中でもこれらの変数を利用しています。

変数名 説明
枠番 出走馬を8グループに分けた番号 1, 6, 8など
馬番 出走馬に振り分けられる番号 2, 5, 8, 15など
場所 レースが行われる会場 中山、京都、中京など
年齢 出走馬の年齢 2歳, 5歳, 8歳など
負担体重 騎手や鞍などの総重量 48kg、50kgなど
騎手 騎手の名前 武豊など
馬体重 出走馬の体重。
出走時間の約1時間前に発表
486kg、502kgなど
馬体重変化量 前回レースからに体重変化量 −7kg、+10kgなど
単勝オッズ 単勝的中時の払い戻し倍率 3.7倍、8.9倍、18.6倍など
人気 人気順位 1位、7位、14位など
地面 レースが行われる会場の地面の状態 ダートあるいは芝
距離 レースの距離 1800m、2400mなど
馬場 会場の状態 良、稍重など

各出走馬に対して、過去のレースからこれらの変数とタイムの関係式を導き出して、次のレースのタイムを予測しています。

したがってこの手法の欠点としては、新馬など過去レース情報のない馬や過去のレース数が少ない若い馬についてはうまく予測値を導き出すことができません。

3. どのような手順で分析しているのか

本サイトでは、前述した変数を利用する重回帰分析により各出走馬のタイムを予測しています。

さらにそれぞれの出走馬の予測タイムを比較することで順位を予測します。

 

予測をはじき出すまでには、次のような手順を踏みます。

機械学習(重回帰分析)を利用して競馬予測に挑戦します!

 

まず、「1. 次のレースデータを取得」では、予測するレースの情報を取得します。

JRA日本中央競馬会のHPへ行くとレース予定を確認できます。

だいたいレース開始の1時間前くらいに馬体重が発表されますのでそのタイミングで情報を取得します。

取得したデータを基に、各出走馬に対して過去のレースデータを取得します。(「2. 過去のレースデータを取得」に該当)

次に過去のレースデータから不要なデータを取り除きます。(「3. 無効データおよび外挿値となる変数を除去」に該当)

この作業を怠ると予測値が大きく乖離する可能性が高まります。

ここで言う不要なデータには無効なレースデータや外挿値が含まれます。

無効なレースデータとは、過去に棄権したレースや中止となったデータなどが含まれます。

さらに外挿値については次の2通りに分類できます。

数値データ

⇨年齢、負担体重、馬体重、馬体重変化量、単勝オッズ、人気、距離

これらのデータは、予測に利用する変数値が、過去データの最低値より小さい、あるいは最大値よりも大きい場合に外挿値と判断します。

文字データ

⇨場所、騎手、地面、馬上

これらのデータは予測に利用する変数値が、過去のデータで一度も使用されていない場合に外挿値と判断されます。

 

ただし「距離」については外挿値と判断されても除外しません。

距離についてはタイムとの相関が非常に強い比例関係にあるので、外挿値として判断されてもそこまでの影響はありません。

実際に2018年の競馬データから距離とタイムの関係性をグラフ化してみました。

機械学習(重回帰分析)を利用して競馬予測に挑戦します!

きれいな比例関係であることがわかりますよね。

したがいまして、変数「距離」については外挿値と判断されても除外しません。

比例関係となることがすでにわかっているので、外挿値となっても比較的正確に予測できるのです。

(ちなみにタイムとの相関性が最も高い距離を除外すると予測タイムがとんでもなくずれますw)

 

不要データを取り除いた後、有効な変数値を基に予測タイムを算出します。(「4. 重回帰分析を利用して、有効な過去レースデータをもとにタイムを予測」に該当)

全出走馬の予測タイムを算出し、そのタイムから着順を予測します。(「5. 全出走馬の予測タイムから着順を算出」に該当)

 

以上のような手順で予測をしていきます。

4. 予測結果に表示するデータ

実際に予測データを公開する際には、算出した予測タイムおよび予測着順に加えて、参考値として以下のデータもまとめて表示しておきますのでご参考にしてみてください。

列名 説明
枠番 出走馬を8グループに分けた番号 1, 6, 8など
馬番 出走馬に振り分けられる番号 2, 5, 8, 15など
馬名 出走馬の名前 ディープインパクトなど
騎手 騎手の名前 武豊など
過去レース数 過去に出場したレース数 3, 10, 26など
有効データ数 過去の出場した際のレースで予測に利用可能なデータ数
(途中棄権などのレースがあればここで除外します)
2, 10, 28など
全変数を利用した予測タイム(参考値) 全変数を利用して算出した予測タイム
(外挿値があっても無視しています)
3.7倍、8.9倍、18.6倍など
外挿のため除去した変数 外挿値となるため除外された変数 [“年齢”, “馬体重”], [“騎手”]など
予測タイム 外挿値となる変数を除いて算出した予測タイム 1:20.49,  1.40.52など
予測着順 予測タイムをもとに算出した予想順位 1位, 4位, 8位など

どれくらいの差が生じるのかも個人的に見てみたいので、参考値として外挿値を無視して全変数を利用して算出した予測タイムも載せておきます。

これをレース開始1時間前(馬体重が発表されるため)を目処に更新します。

レースが終了後に予測結果と実際の結果の比較と払戻し金などについて更新します。

5. 予測の対象とするレースの基準

最後に、今後予測していくレースの基準についてご説明します。

すべてのレースを対象にするととんでもないレース数になりますので、予測するレースを以下の2つの基準を満たすレースに絞ります。

  1. G1レースであること
  2. 各出走馬の有効な過去レースが5個以上あること

以上、2つの条件を満たすレースについてのみ予測を算出していきます。

G1レースでも予測データが発表されていない場合は、いずれかの出走馬で十分な過去データがなかったために予測タイムが算出されなかったと思ってください。

またG1レースでも1頭でも過去レースデータ数が十分でない場合(5個未満)には予測は公開しません。

G1を選んだのはやはり注目度が大きいことと世間の関心度が圧倒的に高いためです。

 

この2つの基準を満たすレースについては今後予測タイムと予測着順を公開していきます!

よろしくお願いします!

まとめ

いかがでしたでしょうか。

ここでは、データ分析の新しい挑戦として競馬のタイム予測についてご紹介しました。

過去の記事で機械学習の基本である回帰分析についてご説明しました。

機械学習の基本!回帰分析(単回帰分析・重回帰分析)について

2019年2月24日

この回帰分析を活かして何を分析できるかを考えた結果、第1弾として競馬予測に挑戦します!!!

今後対象となるレースがあれば随時予測タイムと予測着順を公開していきます!

 

最後に一つお伝えさせてください。

このサイトで公開している予測は、あくまでも過去のデータをもとに算出した予測です。

当たり前のことですが、必ずしも正解するということは全くありませんので、あくまでも興味本位でにフワ〜っとみてください!!!

スポンサーリンク
スポンサーリンク