はじめまして、今年の4月に入社した新人のコウイチです。
苗字が先輩と被ってしまうため、下の名前で書きます。

今日は、ぼくが入社前につくった競馬の適正オッズ計算機の話をします。

IT系の会社に就職しながら、ぼくはパソコンも弱めだし、IT、統計、数学、競馬、すべてにおいて素人ですが、そのおかげで、ほとんど前提になる知識が必要ない内容になりますので、暇つぶしにすすすーっと読んでみてください。(ぼくは四則演算ができて、期待値、分散がなんとなくわかるくらいです。)

*あとムダに前振りも長いので、中身だけ見たい方は「鞘取り的手法」からお読みください。
*ぼくの癖で常体と敬体が入り混じった文章になっています。ブログなのでこういうノリで許してください。

パドック

1年ちょっと前。初めて競馬をした。
実は初めて競馬したのって当時の彼女とのデートだったんですよね。やることなくて競馬場行ってみたという感じ。だからその時の記憶とセットでいろいろ思い出し…まあそれはいいとして馬の話ですね。

とりあえず、馬も自分と同じ動物だから見れば何かわかるだろうと思ってパドックで真剣に馬を見た。そうやっていたら何レース目かに、25倍くらいの単勝を当てて、その日は1万勝で終わった。
でもよくあるビギナーズラックみたいなパターンで、それ以降はなかなか勝てなかった。

競馬は勝てるのか?

競馬はかなり市場が甘そうだった。例えば締切直前のオッズ変動は、1分で倍や半分になることもザラにあった。
競馬の控除率高く、30%(単勝と複勝は20%)だけれど、これだけオッズ変動が荒ければ勝てる余地がありそうだと思った。

じゃあどうしたら勝てるか?

統計的に成績との相関性の高い指標をいくつか見つけて、それらの指標をもとに期待値を計算するか?→でも統計学の知識も、解析手段やその知識もない、、コレハガクシュウコストガタカイ!!(めんどくさいだけ)
とりあえず、過去のタイムを分析しよう。タイムはとても直接的な指標に思えたから、タイムに注目することにした。
血統とか馬体重とかが本当に有意なレベルで成績に影響しているのかはわからないし、もし影響していても結局はタイムに反映されるはずだから、とリあえずはタイムだけ見よう。

過去のタイムのデータ

スプレッドシートに個々の馬の過去のレースでのタイムをまとめ始めた。
具体的には、馬ごとにシートを1枚作って、レースの日付、ダートor芝、距離、出走頭数、順位をまとめ始めた。
対象レースの予想のタイム分布(何%で何秒を出すかみたいの)を作り、対象レースの勝率を計算し、その勝率*オッズが期待値プラスなら買う。
みたいなことを考えていた。でもこれもかなり手間がかかる…
(やりかけの画像)

途中で気が付いた。三連単のオッズが表示されていないところがあった。オッズが高すぎて表示できないのではなく「-」になっているのだ。
ぼくは単勝以外のオッズは、単勝オッズをもとに適正なオッズが計算されているのかと思っていたけれど、実際はそれぞれの投票法ごとに、売上の比を元にしてオッズが決まっているようだ。
それなら、もっとシンプルで確実な手法があるやん!!!
それに気が付いてここまでやったことは全部やめた。ごめんなさい、ここまで前振りです。やっと本編です。

鞘取り的手法(適正オッズ計算機の考え方)

投票法Aを元に投票法Bの適正オッズを計算すればオッズの歪みを突いて利益を上げられるはずだ。(控除率の壁は分厚いけど)
中でも単勝オッズは比較的勝率を反映していそう。これ(単勝オッズ)を軸にシンプルなアプローチを組み立てよう。
そしてできたのがこれ、(適正オッズ計算機画像)

適正オッズ計算機の使い方

まずこの適正オッズ計算機の使い方を説明すると、
1.某サイトで調べたいレースの単勝ページを開き、そのURLをP3セルに入れる。P4~P6セルにも同様にURLを入れることで、それぞれのオッズ情報が読み込まれる。
2.調べたい馬をA,B,Cの3頭に絞って、馬番をH4~J4セルに入力する。
3.資本になる金額をO15セルに入力する。
4.いろいろ計算されて最終的に、購入すべき枚数目安がH14セル辺りの表に表示される。

投機シミュレーター

始めは枚数目安の欄が無く、勝率と期待値をみて、期待値がプラスのところから買っていたけれど、具体的に何枚買うかは大体の勘で決めていた。これでは使うにも手間だし、リスクマネジメントもテキトーになってしまう。
そこで、どれくらいの枚数を買うのが適切かをなんとなくでも掴むために投機シミュレーターというのもつくった。(投機シミュレーター画像)
勝率がいくつで期待値がいくつの馬券を何回買ったらいくらになっているか…みたいなことを、実際に乱数を使ってシミュレーションする。
1,000回後の資本がどうだとかは一つのセルでもできそうだけど、計算の仕方が分からないのと、途中の波も見れた方が生々しいので、B列をひたすら下に引っ張って計算させた。あと、L2セルの複利のとこに何か入力しておくと、複利で計算してくれる。基本は複利計算で使っていた。
これでG4セルの破産チェックが0なら、まあまあ許容できそうなリスクだなとかやって、その時は遊んでいた。
でも今見るとあんまり覚えていなくて、K8セルとかが何をしているかはほんとなぞ。

適正オッズ計算機の弱点を補う、適正オッズ計算機2.0

そーこーして、適正オッズ計算機に枚数目安の表ができた。
他の表もいろいろあるけれど、それらはこの表を作るための途中計算みたいなもので、実際に馬券を買うときにはこれだけ見れば事足りるのだ。かなりシンプルにまとまった。
それでもこの適正オッズ計算機の改良の余地はまだまだある。特に調べたい馬をA,B,Cの3頭に絞らなければいけないのは不便だ。

人気下位の馬は期待値がプラスになったところで、勝率が極端に低いので、ほとんど買い目になることがない。
でも、5番人気くらいまでは割と買い目が出たりするので、これを取りこぼしたくなければ、A,B,Cに、「1,2,3」、「1,2,4」、「1,3,4」、「1,2,5」…みたいに何度も入力しなおして確認しなければいけない。これはけっこう手間だ。
だから、全通り計算させて買い目だけ表示させる形で適正オッズ計算機を作り直したかった。
一度適正オッズ計算機を作った後だったからこれは簡単にできた。
(2.0画像)
実際作ると2.0はかなり強力だった。計算できるのはとりあえず馬単のみだけれど、全通りを一瞬で出してくれるので、買い目は一気に増えた。
画像で読み込んでいるレースは1.0と同じものだけれど、1.0では2つしかなかった馬単で1枚以上の買い目が5つも表示されている。(H列の赤色のセル)

これからの馬券市場

こんな話を無料で公開していいのか?とも少し思うけれど、どのみちAIを活用して馬券を買う人もちらほら出てきて、これだけでは勝てなくなってくると思うので、むしろ程よいタイミングかもしれない。
身近でも、元研究者で競馬予想AIを作った人や、会社を辞めて競馬予想AIで生活し出した元エンジニアの話を聞いた。
競馬は控除率が30%もあるから、こういう人が少し増えたらすぐに枯れてしまう。(長期的に勝ち越すという視点で見た場合)
競馬に限らずどんな市場でも時間がたてば枯れてしまうものだと思うから、新しいチャンスがあったらすぐに飛びつけるようにしたい。

まとめ

ただ書きたいように書いてきた文章を何とかまとめようと思います。

同じアプローチに限ったとしてもまだ改良の余地はかなりあります。
あまり詳しく書くと、日本に数十人くらいいそうな、馬券を当てて生計を立てている人達の恨みを買ってしまうかもなので濁しますが、今見返したらまた新しい改善方法も浮かんだりして、これをガチで改良しようと思ったらやることはほんといっぱいです。

でも、どれから手をつけるかが重要で、
よく検討してから最短時間で結果につながるものに絞って取組み、クリアしたら再検討し、また次に取組む…みたいな、思考と行動のサイクルが重要だと感じました。

何にでも使えそうなまとめですね。いや、本当にそう感じました。笑