データ分析

機械学習(重回帰分析)を利用して競馬予測に挑戦します!【過去データからタイムを予測】

2019年3月24日

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

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

【数式なしで徹底解説!】機械学習の基本!回帰分析(単回帰分析・重回帰分析)について解説します!

この回帰分析を活かして何を分析できるかを考えた結果、2019年のプロジェクトとして、競馬予測に挑戦してみることにしました。

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

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

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

 

機械学習(重回帰分析)を利用して競馬予測に挑戦します!【過去データからタイムを予測】

機械学習(重回帰分析)を利用して競馬予測に挑戦します!【過去データからタイムを予測】

1. 分析手法について

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

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

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

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

【数式なしで徹底解説!】機械学習の基本!回帰分析(単回帰分析・重回帰分析)について解説します!

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

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

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

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

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

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

よろしくお願いします!

まとめ

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

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

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

【数式なしで徹底解説!】機械学習の基本!回帰分析(単回帰分析・重回帰分析)について解説します!

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

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

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

また、こちらでご紹介した予測についてはプログラミング言語であるPythonで書かれています。

Pythonはデータ分析や機械学習などのAI関連に強く、世界中で人気急上昇中の言語です。

【いますぐ始められます】データ分析をするならPythonが最適です。【学習方法もご紹介します!】

Pythonを独学するにはオンライン動画学習サービスを提供しているUdemyがおすすめです。

プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】
【目的別】Pythonが学べるUdemyのおすすめコースを紹介します【随時更新】

Udemyの中でもキカガクが提供しているこちらのコースがおすすめです。

僕もこちらのコースで基本を学びました。

→ 【キカガク流】人工知能・機械学習 脱ブラックボックス講座 - 初級編 -

ただ、Udemyは定期的に大バーゲンセールを行なっているので、定価では購入せずにセールまで待ちましょう!

Udemyで講座を探す

【2020年5月6日追記】

こちらの競馬予測は2019年12月31日をもって終了しました!

2019年に算出した全ての予測結果をこちらの記事でまとめました。

全て単勝でかけていたらトータルで3倍のリターンでした!

【プラス収支達成!】2019年に機械学習(重回帰分析)で競馬予測をかけた結果をまとめました。
【プラス収支達成!】2019年に機械学習(重回帰分析)で競馬予測をかけた結果をまとめました。

Python独学ならUdemyがおすすめ

Pythonの独学ならUdemyがおすすめです。

動画教材なので、書籍などに比べて圧倒的にわかりやすいです。

セール中なら90%オフとかで購入可能で、書籍を買うのと変わりません。

僕は社会人になってからUdemyでPythonを独学して転職にも成功しました。

\30日返金保証/

Udemyを詳しく見る

セール中なら90%オフとかで購入可能です!

プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】
【決定版】Python独学ロードマップ【完全初心者からでもOKです】
【決定版】Python独学ロードマップ【完全初心者からでもOKです】

プログラミングスクールもあり

独学に自信がない方、独学で挫折した方は、プログラミングスクールも検討の余地があります。

いつでも講師に質問できる環境が整っていたり、オリジナルの教材が利用できたり、たくさんのメリットを享受することができます。

ただし、料金は安くないので、無料体験レッスンなどを受けたうえで判断するのがおすすめです。

【まとめ】Pythonが学べるおすすめプログラミングスクール

Aidemy(アイデミー)

AidemyはPythonに特化したプログラミングスクールです。

AIやデータサイエンスに興味のある方におすすめです。

\PythonでAIや機械学習などが学べる/

Aidemyを詳しく見る!

完全オンライン完結型でプログラミング初心者から上級者にまで対応

SAMURAI TERAKOYA

SAMURAI TERAKOYAは、月額2,980円から利用できるサブスク型のプログラミングスクールです。

Pythonを含む28種類の教材が学び放題です。

プログラミングスクールので最大のデメリットである料金の高さをうまく克服したサービスです。

個人的にはこれがコスパ最強です。

月額2,980円のサブスク型

「SAMURAI TERAKOYA」を詳しく見る

入会金不要で違約金なしでいつでも退会可能!気軽に始められます!

-データ分析
-, , , , ,

© 2022 気ままなブログ