競馬を解析させる上で何を考慮すべきか考えてたらかなり難しいかと

趣味と実益、あとは機械学習ということでよく話題に上がるのが競馬を用いた機械学習ですが、ただ数値だけでやろうとすると結構難しいのでどうしたものかと悩む内容です。

 

駄文:競馬というものについて

エンジニアのアカウントも込のくせにだいぶやられてることしか言ってないんですが、軽く紹介したいと思います。

JRAが主催するいわゆる公営ギャンブルというもので、馬に騎手がまたがり、規定コースを走って1−3着までに入った馬とかけ方に対して資金が再分配されるものです。

JRAからお金を引き出すという言葉を好んで使っていますが、全員の掛け金からある程度JRAが元締めとして回収し、残りを再分配するので、お金をかければかけるほどJRAが得をします)

 

よく三連単という単語だけは聞くと思いますが、一番当てるのが難しい故に高配当がでます。これ以外の券種もありますが、今回は割愛します。

 

単純な学習では難しい理由

まずライトにやる場合、各出走馬の順位のデータを食わせて勝率を出すぐらいで、少し知識がつくと騎手や馬体重、上がり3Fといった数値がすでに出ているもので学習させていくと思います。が、それだと全く上手く行かないと思います。

 

ご存知のとおり、芝とダートでは条件も異なりますし、コース形態によって思いっきり枠の有利不利、更には展開とやらがきいてきます。これらを加味しないといけないのでちゃんと分けてやらないと謎のデータのみが出力されるだけになります。

 

頑張っても結局は映像を見ないと無理というところがあるので、完全に結果を出すのは難しいと考えられます。というわけで最終判断は人間に任せるとして、それに必要な材料を出すだけに焦点を変更します

 

処理をするとしたらという流れ

各馬毎の能力分析→血統・開催場での適正→最初と最後の展開

+当日の傾向

という感じになると思います。詳しく書いてみます

 

*なお私は全然あたらねえのでこのやり方で予想して当たる保証は全くございません。

 

各馬毎の能力分析

平均順位を最終出力するとして数値は書きます。そして適当です。次の中京開催芝2400mを想定して分析をしてみるとしましょう。

 

単純にやるとしたら開催場所での成績のみになります。

・東京4.9位、中山1.5位、阪神2.1位

上記のように出力されると過程した場合、次の様に細分化するほうがいいと思われます。

右回り:1.3位 左回り:4.5位 直線長:5.6位 直線短:2.9位 坂急:3.3位 坂緩:6.1位・・・・・

細かくやろうと思えばやれますが、ここはお好みかとおもいます。

あとはそこが良馬場なのか重馬場なのかの成績も加えておくぐらいでしょうか。問題はこれらの変数をどう定義して調整してやるかですが・・・。

 

一般的に使われる指数は細かいことは抜きにして同様のことを加味しています。要は一斉に同一条件でヨーイドンして誰が勝ちますかということです。

 

数値が高い低いだけだと結局その後どうするかわからんので、細分化したファクターの数値をそれぞれ出力させたほうがいいと思います。

 

あとはレース毎の位置の数値を引っ張ってきて逃げなのか追込なのかを書くぐらいでしょうか。

 

血統・開催場での適正

ブラッド・スポーツと呼ばれるので言わずもがな重要なところです。特に中央は血統の良し悪しが出やすいいい馬が多いので、流石に軽視はできません。

 

例は中京開催ですので、手っ取り早いのは1-5位までの中京開催のデータをスクレイピングしてきて統計を取るのが考えなくてもいいと思います。が、そうなると最近のデータだけでも膨大になっちゃいますし、最悪ここは人間による変数の設定でもいいかなと思います。もしくは有名な血統予想家(亀谷さんとか)を頼るのもありかなと。

 

開催場の適正も場所の要素を分解してそれを馬ごとに照らし合わせるので、適正を何段階か評価させる程度でいいでしょう。

 

最初と最後の展開

テン3Fと上がり3Fの数値が記載されているのと、馬ごとに出力した脚質をもとにすれば途中までの展開ならなんとかできそうです。できれば過去データを食わせて学習させたいところですが、どうやってやろうかというのがお悩みです。

正直なところ、最後の直線の展開だけわかればいいかなと思ってます。なぜかというと

「先頭の馬が最後の直線に入りました。2番は1馬身後ろで3番手もほぼ同位置。3馬身離れて・・・・という状態です。各馬のこの馬場での平均上がり3Fはこのぐらいの数値です。直線がOOOmあるので、先頭の馬は逃げ切れるのか、それともどれに抜かされるか」という旅人算にできるからです。その展開が当たればね・・・。

 

+当日の傾向

おそらく機械学習での精度が個人的に微妙と思ってるところの最大要因。露骨に内枠が有利とか米国血統が走るとかというのが存在してしまうので、それを加味できないと結局当たらないじゃんということになってしまいます。レース前までに計算が終わればいいのですが、どこまでいけるのかは未知数です。

 

ここまで書いていてわかると思いますが、新馬戦やそれに近いレースではあまり当てにならず、午後になるほど精度があがるものになります。

 

頑張ればできそうなところ

それぞれのレースレベル

よく「前走はレースレベルが高い中で4着だからこのレースは勝てる」ということを聞くと思います。コレ自体はそこまで難しい処理じゃないと思います。

その馬の戦ったレースに出走している馬の成績が出るので「G1:1.3着、G2:2着」みたいな順位を加味してスクレイピング・処理をさせてあげればいいからです。最終出力は

「前走はレベルの高いレース」という曖昧な表現が難しいので「G2出走馬成績4.9位」ぐらいでもいいと思います。もっと雑な結果にするなら各レベルの出走経験数の統計結果だけでもいいかなとは思ってます。

 

調教

数値が出てるのはいいとして、地方は特に出てないこともあるので、スクレイピングが難しいです。できるとしたら重賞ぐらいです。

 

無理そうなの

展開

そのレースは外差しの決まりやすいところだった、前が詰まって行かなかったとかは映像を見ないと不明なので単純な結果のみでは厳しいと思います。一応各位置の結果は出力されているので、差し決着か前残りかの判断はできますが、「上がりの数値はいいけど前に集団でいて詰まったから追込できなくて惨敗」というのは数値解析では出せない判断になると思います。

 

馬体・パドック・返し馬

パドック一応JRAでも比較できるサイトを試験運用していますが、これらも結局は映像による判断なので、難しいです。馬体の写真もG1とかなら公開してくれていますが、平場では無理ですね・・・。

 

「絶対にやっちゃだめ」ですが、グリーンチャンネルJRAのレーシングビュアーで画像を取得して・・・というのがありますが、「絶対に駄目」なのと仮にOKだとしてもわからんってなるからです。好走した馬の画像を機械学習で処理するしかないですが、短時間でできるのかは疑問視です。

返し馬はその場にいないとわからないところも多いのでそもそもがだめです。

 

むず・・・・

これらのことを加味して機械学習させて順位付けをするとなるとかなり難しいですね・・・。最終判断はやっぱり人間じゃないとまだ厳しいと思いますが、それを助けるためのツール作成にするほうが良さそうです。

 

騎手や調教師のデータは今回加味してないですし、入れようとすればするほどデータ解析が難しくなりそうです。

 

どう実現するかとか、処理するときの重さとか、スクレイピングする時間とか諸々の問題もありますが、とりあえず妄想でもいいのでデザインドキュメントでも書いてみますか。

 

なんかいいアイデアないですかね。もしくは予想する際のものが間違ってるとかあれば知りたいです。