「オッズの理論」シリーズの2番目は「単勝オッズから他のオッズを推定する」です。

前回の記事よりも長いです。
書こうと思っていた内容の中心に当たる部分になります。


前回の記事はこちら



単勝のオッズのみから他の券種のオッズを推定したい事って、結構多いのではないか?と思います。
もちろん買い目に関係する全部のオッズを確認するのがベストなのですが、締め切り間近だったりネットワークが不安定だったりで、難しいこともあります。
今回はそういう話です。

コメントや問い合わせなどウェルカムです。


まず、難しい話を抜きにしてすぐ使えるテクが知りたい!という方へ。

以前の記事と同じ内容ですが、馬連に関しては私が実際に使っている簡単な経験則があります(外のどこかにも書いてあるかもしれませんが)。

それは
(馬1-馬2の馬連オッズ)=(馬1の単勝オッズ)×(馬2の単勝オッズ)÷2
です。

6倍と12倍の馬なら6×12÷2=36倍。
10倍と40倍の馬なら10×40÷2=200倍。

物凄くシンプルですが、割と使えます。
私はよく使っています。是非どうぞ。


・・・
・・・

0.前提

もちろんこの記事はこれで終わりではありません。ここからが本題です。

式を持ち出さざるを得ないので、数学が嫌いな人は説明を我慢して読むか、次の記事の「応用」に飛んでください。
*気が向いた頃にMathMLで書き直します。

単勝以外のオッズを推定するには、ある馬が2着もしくは3着になる確率が必要です。
ある馬が1着になる確率は、統計的にはその馬の支持率(オッズではありません)に概ね等しくなる事が知られています。人気やオッズに関わらず、単勝の回収率がほぼ一定であることとほぼ同義ですね。
以降は
「ある馬が1着になる確率は、その馬の単勝馬券における支持率と等しい」
として考えます。

しかし、2着や3着となると話は別です。1着になる確率は2,3着になる確率と直接は関連しません。なので、何かしらの仮定を置いて、ある馬が何着になる確率がいくらか、というのを計算するモデルを構築する必要があります。



1.確率を推定するモデル

まず一番単純なモデルとして考えられるのは
「ある馬Xが2着になる確率は、1着になった馬A以外の単勝の支持率のうち、Aの支持率が占める割合に等しい。3着も同様」
というものです。

例として、馬Aの単勝支持率を20%(~4.0倍)、馬Bを5%(~16.0倍)、馬Xを10%(~8.0倍)としましょう。
Aが1着になった場合、Xが2着になる確率は
 0.1/(1-0.2)=0.125
で12.5%となります。
また、Aが1着、Bが2着になった場合、Xが3着になる確率は
 0.1/(1-0.2-0.05)=0.133...
で約13.3%となります。

ある事象の起こる確率をπと書くことにしましょう。1着がaになる確率をπa、1,2,3着がa,b,cになる確率をπabcとして式にすると
eq1
こう書けます。

実はこのモデルはHarville(1973)で提案されているモデルと同一です。
私は最初このモデルで各種オッズを推定するプログラムを書いて使ってみましたが、
・ 馬連と三連複は割と上手く行く
・ 馬単や三連単はあまり精度が良くなさそうだが破綻はしていない
・ 複勝やワイドは使えない

という感じでした。複勝やワイドのオッズの計算はクセがあるのですが、オッズは馬券購入者が感じている実現確率を反映しているので、そこまでずれるというのは変です。

ただし、このモデルには大きな利点があります。それは
「1-3着の馬のオッズ以外の情報が必要ない」
という事です。
後述するモデルは、1-3着馬以外のオッズを必要とするため、それらを全て入力する必要に迫られます。18頭立てで全部入れるのは、はっきり言って面倒くさい。逆に言えば、Harvilleのモデルはより正確なモデルでは利用すべき他の馬の支持率の情報を利用できていない、という事になりますが。



2.確率を推定するもう少し良いモデル

もう少し良いモデルを考えます。

先のHarvilleのモデルでは、1-3着馬以外の存在を考えていませんでした。これを考えたモデルが、Stern (1990)のモデルやLo et al. (1995)のモデルです。

これらのモデルは、個々の馬のレースにおけるパフォーマンスがガンマ分布に従うと仮定し、そのレースでのパフォーマンスの順に着順が決定される、というモデルです。
支持率が高い馬は低い馬に比べて平均のパフォーマンスが高いですが、パフォーマンスが平均値の周りでガンマ分布に従って不確実性を持つため、一部のレースでは逆転が起こる、という仕組みです。ガンマ分布はいくつかのパラメータを有しているため、実際のレースのデータを元にそれらのパラメータを推定することになります。
ただ、このモデルを厳密に扱おうとすると計算コストがかなり高くなるので、計算コストの低い、より簡便な式がLo et al. (1995)で考案されています。

式で表せばこのようになります。
eq2

現実のレースからこの式の2つのパラメータ(λ2とλ3)を推定すれば、ある1-3着の組み合わせが出現する確率を推定する式の完成です。

Lo et al. (1995)では日本の600レースからパラメータを推定しましたが、伊藤(2010)ではより多くのレースをデータを利用し、パラメータを推定しています。
この式を元に、オッズを推定することを考えましょう。



3.全頭の単勝オッズを仮定する

ここで問題があります。Lo et al. (1995)の方法は確かにより良いのですが、出走全頭の支持率の情報を使います。全頭のオッズを毎回入力するのは大変です。
なので、3頭のオッズを入れると、残りの馬に関してはそれっぽい支持率の分布を作ってくれるという機能が欲しい。

というわけで、オッズの分布の推定を行いました。
と言っても、レースのメンバーによって色々な状況が起こるため、そこまで精度の高い推定は出来ません、というかあまり意味がありません。

N頭立てのレースの単勝支持率を以下の式のように作成します。
eq7
1,2,3着馬の勝率は入力されたオッズからP1~P3と求められるので、PBとPCというパラメータを決めておけばπkが求まることになります。

これを用いれば、3頭の単勝オッズを入力するだけで各種オッズの推定が可能です。
交流重賞やハンデ戦など、単勝支持率の分布が異なるレースではパラメータを適宜変えて対応できます。



4.複勝オッズの計算 その1

「オッズが1.0倍を切らない」という仮定は簡単に実装できます。
プログラムでは複勝・ワイド・馬連・三連複に実装しました。

ただ、JRAにはそれに加えて「JRAプラス10」という制度があります。
以下簡単のために、8頭立て以上の複勝で話を進めますが、それ以外の場合も同様です。

JRAプラス10を考慮したプログラムに改良するのはやや難儀です。
その理由は、複勝等の詳細な支持率が必要になるためです。複勝のオッズは各馬の3着内率から求められましたが、複勝のオッズの計算方法はやや特殊なため、
 3着内率=複勝の支持率 にはならない
ためです。

このため、どのような複勝支持率なら3着内率から求められたオッズが実現されるのかを計算する必要があります。
幸い複勝のオッズの計算式は明確なので、それを元に式を立てることが出来ます。
3着内率をP、支持率を二重線のPとすれば
eq8
と書けるので、
eq9

これを解けばOKですね。只の3元1次連立方程式です。
逆行列を使って解いていますが、もちろん中学で習う数学の範囲で解けます。
ここで求めた複勝支持率を元に、JRAプラス10の適用の可否を判断します。

なお、ここで求められた複勝支持率は恐らく現実と乖離があります。
他の入着馬がどういう組み合わせであっても、ある馬の3着内率は同じです。今求めた支持率は「求められた3着内率を実現するために要求される複勝支持率」なので、入着馬の組み合わせによって、複勝支持率が大幅に変わります。具体的には、人気馬が入着すると他馬の複勝支持率は下がり、逆では上がる、という事になります。
噛み砕いて言えば、「人気馬が3着以内になった場合と飛んだ場合の重ね合わせ」です。



5.複勝オッズの計算 その2

実は全ての馬について複勝支持率を求めることも可能で、それに基づいて複勝オッズの幅を計算することもまた可能です。
ただしこの場合は全ての買い目について計算をする必要があるため、計算コストがかなり高くなります。ワイドは特に買い目がO(N)でなくO(N^2)なので、頭数と実装によっては時間が掛かるかもしれません。
eq18
これを次のように変形して、
eq19
二重線のPとπは既知なので、それらを元に下の係数a11~aNNを求めれば式が立ちます。
eq20
これを計算すればOK。

これで全ての機能が実装できました。
ついでに「真の払戻率」も計算して表示できるようにしましょう。

JRAプレミアム(馬連や単勝の返還率5%UP)などはパラメータを弄ることで対応できます。



6.アルゴリズムの弱点

このオッズ推定アルゴリズムには2つの弱点があります。それは
① 単勝オッズは1円単位を切り捨てているため、支持率に不可避的な誤差が生じる
② JRAプラス10を見越した複勝への投票の集中を表現できない

というものです。

①は投票数を詳細に調べることで回避できますが面倒です。実際には少数第1位までのオッズに対し、0.05を足して支持率を計算します。例えば2.2倍なら1/2.25*0.8とします。さらに、全馬の支持率の合計が1.00になるように後から調整するとベターでしょう。単勝でJRAプラス10による投票の集中が起きることは非常に稀ですが、1番人気を2番人気以下の合計から求めるとより安全かもしれません。そもそもそんな状況下では誤差が大きすぎるのでプログラムを使う状況に無いでしょうが…

②はさらに難しく、単勝でおよそ1.4倍以下程度の馬では、JRAプラス10の適用を見越して複勝で投票が集中する傾向がありますが、このモデルではそれを考慮できません。
なので、複勝で人気が極端に集中している馬が来た場合は他馬の実際のオッズがモデルよりも安く、飛んだ場合にはモデルよりも実際のオッズが高くなります
このモデルで出てくる複勝の推定オッズは期待値的な物だと考えて下さい。他馬の結果に大きく左右されるので、現実のオッズと予測を(統計的ではなく個々の事象で)合わせるのは困難です。


上記の計算を実装したアプリがこちら。




95c309dd