見出し画像

機械学習で競馬予想をやってみる #1

『出来れば一生遊んで暮らしたい』というのは全人類の本音だと思う(大上段)。そこで、機械学習の勉強ついでに『AIに競馬予想させて金の雨を降らせるぜ、俺に』計画を立ててみた。

AIという用語は相当にファジーであり手法も様々なのだが、競馬データの性質からまずはロジスティック回帰を試してみようと思う。

!注意!

筆者は現在機械学習を勉強中です。有識者から見ればアホな事を書いていたり、そもそも認識が間違っている可能性があります。

記事の内容はなるべく正確を心掛けますが、正確性を保証するものではありません。もし間違い等を見つけましたら、優しく教えてください。

また、そんな方はいないと信じますが、もし本記事を見て購入した馬券が外れたとしたら、僕ではなく競馬の神を恨んでください。

=========================

1.1 データを集める(Webスクレイピング)

まずはデータを集める必要がある。競馬関係のサイトはいくつかあるが、今回はnetkeiba.comのデータを使わせていただくことにした。クローリングは設定を間違えるとサイト側に迷惑を掛けかねない為、アクセス間隔等の設定には注意したい。

今回は『JRA開催で、2000年1月~2002年12月※1までの500万下以上のレースデータ』を収集してみた。正常にデータが取得できない場合※2や出走回数が3回未満のデータ※3は捨てたものの、6.75万件のデータを取得できた。

※1: 最初は20年分のデータを集めようと考えていたのだが、時間が掛かる為、ひとまず3年分のデータで確認してみた。
※2: レースによってはラスト3Fの欄に1Fのデータが入っていたり、データ自体が存在しない場合がある。
※3: 出走回数が少ないと過去データを参照できないことから、分析の邪魔になると判断した。

今回の方針として、以下の制約を設けることにした。
・レース直前まで確定しないデータ(当日の人気、オッズ、馬体重等)は使用しない。
→馬券購入や検討の時間を確保する為。
・騎手、調教師、オーナー、血統情報は使用しない。
→データ数が膨大になることから今回はパス。将来的には使用したい。

1.2 ロジスティック回帰を試す(説明変数:1個)

ひとまず、1つの説明変数を使ってロジスティック回帰を行ってみる。取得した6.75万件のデータを学習用と予測用に8:2で分けて順位を予測し、正解率を単純に求めてみた。
今回はScikit-learnのロジスティック回帰モデル(LogisticRegression)を利用している。
[参考]sklearn.linear_model.LogisticRegression

使用データの平均出走頭数は14.45だったので、適当に予想しても7%程度は正解するはず。そこで『正解率8%以上であれば予測にポジティブな影響がありそう』と(雑な)想定を立ててみた。

結果、以下のデータで正解率が高い傾向がある事が分かった(正解率はデータの分け方で多少変動する)。

●正解率8.5%以上(になる場合が多い)
・前走のオッズ、人気、着順、着差
・前4走のオッズ、人気、着順、着差、ラスト3Fの中央値
・前走までの連対率(2着までに入線する確率)
・前走までの3連対率(3着までに入線する確率)
・過去レースにおけるレース後半の平均ペースと
各馬のラスト3Fの差の平均/中央値
・過去レースの走破速度(1F当たり)の平均/中央値
・前走までの出走回数
●正解率8%以上(になる場合が多い)
・馬の性別(牡/牝/セン)
・馬年齢
・当日の天候
・馬番
・前走レースの距離との差/差の比率
・調教師の所属トレセン
・前走までの獲得賞金総額
・前走からの経過日数

この結果だが、競馬の機械学習記事で重要とされる事が多い指標が上位に来ており、概ね予想通りの結果になったと言える。

ちなみに、馬場状態や馬体重も試してみたが、正解率は7.5~8%あたりだった。馬体重については不明だが、馬場状態については値が一部に集中している為ではないかと思われる(馬場状態は8割が良であり、稍重以下は2割に過ぎない)。

1.3 ロジスティック回帰を試す(説明変数:複数)

次に、複数の説明変数でロジスティック回帰を行ってみた。
ひとまず、前項で正解率が高い傾向が出た指標を全て入れてみる。

結果は正解率10.4~11%になった。正直、もう少し向上するのではと期待していたのだが、多少でも正解率が向上している事、対象データを競馬場や距離等で絞っていない事を考えれば、こんなものかなとも思える。

=========================

今回はここまで。次はランダムフォレストを試してみようと思う。

何だか競馬予想というよりは競馬データを利用して機械学習を勉強しているだけの様な気がしてきたが、それでもよろしければお付き合いください。


この記事が気に入ったらサポートをしてみませんか?