こんにちは、アオキ(@aoki_eng)です。
今回、競馬における競走馬の強さを数値化してみたので、この記事にまとめます。
githubはこちらです(https://github.com/katsuomi/keiba-BTmodel)
はじめに
僕は競馬が大好きです。
毎週末、重賞レースと呼ばれる大きなレースは全てテレビで観ていて、少額ですがお金も賭けています。
そこで、よく競争馬の過去のレース結果を見るのですが、その馬がどれくらい強いのか具体的に分からないなと感じていました。
例えば、
この馬はどれくらい強いでしょうか?
1着になっているレースがまぁまぁ多く、そこそこ強そうですね!
この馬はどうでしょうか?
1着になっているレースがまぁまぁ多く、そこそこ強そうですね!
と、まぁだいたい強い馬なのか弱い馬なのかは、直感的にわかるのですが、
具体的にどれくらい強いのか分かりません。
馬の強さを具体的に表してみたい!!という好奇心によって今回、数値化してみることにしました。
Bradley-Terryモデルの利用
Bradley-Terryモデルとは
となるπiを導入する.式(1)の関係式を Bradley-Terry(BT)モデルという BTモデルにおいてπiは,要素iの強さを表すと考えることができる. BTモデルは,直接の対決が無い場合にも,第三者との対戦を媒介として勝敗を決することが可能であるとされている ([こちら](http://www-mcs.c.oka-pu.ac.jp/pdf/abstract/2006_SatoshiNishimoto_MasterAbstract.pdf)より引用)n 個の要素 (チームや個人) があり,何らかの対戦を行うものとする.
対戦は1要素対1要素のマッチで行われ,その結果は片方の要素の対して勝利,または敗北しか生じないとする.
何回か対戦した結果から各要素の「強さ」をはかるとする.ここで要素iが要素jに勝利する確率をPijとしたとき,すべての組み合わせに対して,
この記事では、BTモデルに関して詳しく解説はしません。
簡単に言うと、
1対1で対戦していくようなものに対して、合理的にそれぞれの要素の強さを出せるモデルです!
(じゃんけんなどの得意不得意があるものは表現できません)
よくある例で、
・セリーグ・パリーグの球団の強さを出してみる!
・Jリーグのチームの強さを出してみる!
みたいなのがあります。
では、競馬のレースについて考えます。
例えば、あるレースの結果が以下のような場合
2番の馬に着目すると、
・1番の馬に対して、負けた
・3~18番の馬に対して、勝った
ということが言えます。
このようにして、競馬のレースにおいて
"競争馬vs競走馬の試合が行われている"
とみなすことで、BTモデルを適用しようと考えました。
実装
・JRAの公式HPから、2014~2018年のレース結果をスクレイピングし集計
・その結果にBTモデルを適用させる
具体的な実装方法は、こちらに載せてあります(https://github.com/katsuomi/keiba-BTmodel/blob/master/pointToHorseStrength.py)
結果
現役馬で、もっとも強い競争馬は、アーモンドアイ様ということになりました!
おわりに
今回、BTモデルを使って、競争馬の強さを出してみました。
やはり、今も活躍している馬や過去に活躍していた馬の数値は高く、特にこれといって得られたものはありません。(笑)
おっと
今週末、現役馬で、もっとも強い競争馬であるアーモンドアイ様が出走予定のヴィクトリアマイルというレースが行われます。
例年荒れているレースですが、はたして...!!!!
[参考]
Bradley-Terryモデルについて https://www.gavo.t.u-tokyo.ac.jp/~mine/japanese/IT/2017/toukei171211.pdf
馬の成績に関して https://www.netkeiba.com/
過去のレース情報に関して http://www.jra.go.jp/