学ぶ ・ 発展

本物の予想へ — 専門家の道具箱

オッズと控除率、点数を確率に変える方法 (softmax)、Thurstone と Luce の 2 つのモデル、2 着・3 着の確率 (Harville の公式とその偏り)、予想の評価 (Brier スコア・対数損失・最尤推定)、そして賭け方の理論 (ケリー基準)。Keiba Vision をどう改善できるかまで。

このページで学ぶこと
  • オッズから「市場の予想確率」と控除率を読み取る
  • 点数を確率に変える softmax と、その裏にある Gumbel 分布
  • 正規分布の揺らぎ (Thurstone) と Gumbel の揺らぎ (Luce) の違い
  • 2 着・3 着の確率を出す Harville の公式と、その偏りを実際に測る
  • 予想の良し悪しを測る Brier スコア・対数損失と、係数 0.11 の推定方法
  • 期待値とケリー基準: 何に、いくら賭けるべきか
  • このアプリへの具体的な改善案
このページの内容は、まだアプリに実装されていません

ここでは、競馬や確率予測の専門家が実際に使う考え方を紹介し、それを Keiba Vision にどう当てはめられるかを示します。最後の節に、改善の手順をまとめています。

オッズは市場の予想確率

日本の競馬は パリミュチュエル方式 (賭け金の総額から控除した残りを、当たった人で分ける方式) です。単勝の総額を PP、馬 ii に賭けられた額を BiB_i、控除率を tt とすると、オッズは

Oi=(1−t) PBiO_i = \frac{(1 - t)\,P}{B_i}

です。qi=Bi/Pq_i = B_i / P は「お金の割合」= 市場全体が見積もった勝つ確率 とみなせ、qi=(1−t)/Oiq_i = (1 - t)/O_i と書けます。全頭の qiq_i を足すと 1 なので

∑i1Oi=11−t\sum_i \frac{1}{O_i} = \frac{1}{1 - t}

JRA の単勝の控除率は 20% なので、実際のオッズでは ∑1/Oi≈1/0.8=1.25\sum 1/O_i \approx 1/0.8 = 1.25 になります (払戻金の端数切り捨てがあるので、少しずれます)。逆に、オッズの逆数の和から控除率を推定することもできます。

アプリのサンプル出馬表のオッズ

有馬記念 (サンプル) は ∑1/Oi=1.714\sum 1/O_i = 1.714 で、控除率に直すと 42% になってしまいます。サンプルデータのオッズは雰囲気を出すための値で、実際の市場を再現していません。以下の計算例は、方法を説明するためのものです。

市場の確率は、オッズの逆数を合計で割って正規化すれば得られます。

qi=1/Oi∑j1/Ojq_i = \frac{1/O_i}{\sum_j 1/O_j}

ただし、実際の市場には「人気のない馬 (大穴) は実力以上に買われ、人気馬は少し割安になる」という favorite–longshot bias が知られていて、qiq_i は大穴ほど過大になりがちです。

点数を確率に変える — softmax

予想エンジン の総合スコア SiS_i は確率ではありません。点数を確率に変える標準的な方法が softmax です。

pi=eβSi∑jeβSjp_i = \frac{e^{\beta S_i}}{\sum_j e^{\beta S_j}}
  • 分子が正、分母が全頭の和なので、自動的に 0<pi<10 < p_i < 1、∑pi=1\sum p_i = 1 になります
  • β\beta (逆温度) が大きいほど、スコアの高い馬に確率が集中します。β=0\beta = 0 なら全頭が同じ確率
  • β\beta は、過去のレースで「実際の勝ち馬の確率の対数の合計」が最大になるように決めます (後で説明する 最尤推定)

softmax の正体 — Gumbel 分布の揺らぎ

モンテカルロ では「出来 = 平均 + 揺らぎ」で、揺らぎにほぼ正規分布を使いました。揺らぎを Gumbel 分布 (F(x)=e−e−x/β′F(x) = e^{-e^{-x/\beta'}} という形の分布) にすると、1 着の確率が積分なしで ちょうど softmax になります。

Xi=μi+εi,εi∼Gumbel(0,1β)  ⟹  P(i が 1 着)=eβμi∑jeβμjX_i = \mu_i + \varepsilon_i,\quad \varepsilon_i \sim \text{Gumbel}(0, \tfrac1\beta) \;\Longrightarrow\; P(i \text{ が 1 着}) = \frac{e^{\beta\mu_i}}{\sum_j e^{\beta\mu_j}}
さらに深く証明のスケッチ

Gumbel 分布の累積分布関数は F(x)=exp⁡(−e−βx)F(x) = \exp(-e^{-\beta x})。ii が 1 着になる確率は

pi=∫f(x−μi)∏j≠iF(x−μj) dxp_i = \int f(x - \mu_i) \prod_{j \ne i} F(x - \mu_j)\,dx

FF の積は exp⁡ ⁣(−e−βx∑j≠ieβμj)\exp\!\big(-e^{-\beta x}\sum_{j \ne i} e^{\beta\mu_j}\big) と 1 つの指数関数にまとまるのがポイントです。f(x−μi)=βe−β(x−μi)exp⁡(−e−β(x−μi))f(x - \mu_i) = \beta e^{-\beta(x-\mu_i)} \exp(-e^{-\beta(x - \mu_i)}) と合わせ、y=e−βxy = e^{-\beta x} と置換すると

pi=eβμi∫0∞exp⁡ ⁣(−y∑jeβμj) dy=eβμi∑jeβμjp_i = e^{\beta\mu_i}\int_0^\infty \exp\!\Big(-y\sum_j e^{\beta\mu_j}\Big)\,dy = \frac{e^{\beta\mu_i}}{\sum_j e^{\beta\mu_j}}

となります。経済学で「選択の確率」を表すロジットモデル (McFadden がノーベル経済学賞を受けた研究) も同じ仕組みです。

揺らぎの分布モデルの名前1 着の確率2 着以下
正規分布Thurstone モデル積分 (シミュレーションで解く)シミュレーションで解く
Gumbel 分布Luce モデル (Plackett–Luce)softmax で厳密に計算できるHarville の公式で厳密に計算できる

Keiba Vision の Zig は前者 (正規分布もどき) を使っています。

2 着・3 着の確率 — Harville の公式

馬連・馬単・3 連単を考えるには「ii が 1 着で jj が 2 着」の確率が必要です。Harville の公式 (1973) は、1 着の確率 pip_i だけから

P(i が 1 着,j が 2 着)=pi⋅pj1−piP(i \text{ が 1 着}, j \text{ が 2 着}) = p_i \cdot \frac{p_j}{1 - p_i}
P(i,j,k の順)=pi⋅pj1−pi⋅pk1−pi−pjP(i, j, k \text{ の順}) = p_i \cdot \frac{p_j}{1 - p_i} \cdot \frac{p_k}{1 - p_i - p_j}

と計算します。「ii が勝ったあと、残りの馬の中で jj が勝つ確率は、jj の確率を残りの合計で割ったもの」という考え方です。Luce モデル (Gumbel の揺らぎ) なら、この式は 厳密に正しい です。

偏りを実際に測る

では、正規分布の揺らぎを使う Keiba Vision のモデルではどうでしょう。有馬記念 (サンプル) のドウデュース (p=0.362p = 0.362) とレガレイラ (p=0.214p = 0.214) の馬連 (1・2 着がこの 2 頭) を、Harville の公式と、同じモデルで直接 40 万回シミュレーションした値で比べます。

Harville の公式直接シミュレーション
ドウデュース → レガレイラ0.12140.0977
レガレイラ → ドウデュース0.09850.0736
馬連 (合計)0.21990.1713

Harville の公式は馬連の確率を 約 28% 過大評価 しています。これは競馬の研究でもよく知られた偏りで、正規分布のように裾が軽い揺らぎでは「1 着が強い馬に決まったあと、2 着も強い馬になる確率」が Harville の想定より低くなるためです。実務では、2 着・3 着の確率を補正する方法 (Henery のモデル、Stern のモデルなど) や、このアプリのように直接シミュレーションする方法が使われます。

シミュレーションの強み

Zig のモンテカルロは「上位 3 頭」を毎回記録しているので、少し拡張すれば馬単・3 連単の確率も、公式に頼らずに直接数えられます。Harville の偏りを気にしなくてよいのは、シミュレーションの大きな利点です。

予想の良し悪しを測る

「当たったか外れたか」だけでは、確率予想の良し悪しは分かりません (勝率 30% の馬は 70% 負けるのが正しいからです)。確率予想そのものを評価する指標を使います。

Brier スコア

レース rr で、馬 ii に予想確率 prip_{ri} をつけ、実際に勝ったら ori=1o_{ri} = 1、負けたら 0 とします。

BS=1R∑r=1R∑i(pri−ori)2\mathrm{BS} = \frac{1}{R}\sum_{r=1}^{R}\sum_i \big(p_{ri} - o_{ri}\big)^2

「予想と結果の差の 2 乗」の平均で、小さいほど良い 指標です。

対数損失 (ログロス)

LL=−1R∑r=1Rln⁡pr, 勝ち馬\mathrm{LL} = -\frac{1}{R}\sum_{r=1}^{R} \ln p_{r,\,\text{勝ち馬}}

勝った馬に高い確率をつけていれば小さくなります。勝ち馬に確率 0 をつけると無限大になるので、「絶対ない」と言い切る予想を強く罰する指標です。

係数 0.11 を推定する — 最尤推定

モンテカルロ の揺らぎの係数 cc (今は 0.11) は手で決めた値でした。過去のレース結果があれば、

c^=arg⁡min⁡c  LL(c)=arg⁡max⁡c∑rln⁡pr, 勝ち馬(c)\hat c = \arg\min_c \; \mathrm{LL}(c) = \arg\max_c \sum_r \ln p_{r,\,\text{勝ち馬}}(c)

「実際の結果が最も起こりやすくなる cc」を探すことができます (最尤推定)。cc を 0.05 刻みで変えてシミュレーションし、対数損失が最小になる値を選ぶ、という単純な方法でも十分です。softmax の β\beta も同じ方法で決めます。

市場と比べる

予想の良さの基準として最も厳しいのは、市場の確率 qiq_i (オッズ) より対数損失が小さいか です。市場は多くの人の情報を集めた強力な予想なので、これに勝てなければ、その予想で賭けても長い目で見て勝てません。

期待値と、賭けるべきかどうか

単勝で 1 円賭けたときの期待値 (戻ってくる額の平均) は

E[払戻]=pi OiE[\text{払戻}] = p_i\,O_i

で、piOi>1p_i O_i > 1 のときだけ 長い目で見て得になります。控除率 20% があるので、市場の確率 qiq_i をそのまま使うと qiOi=0.8<1q_i O_i = 0.8 < 1 で、全頭が損です。期待値が 1 を超えるのは、自分の予想 pip_i が市場の qiq_i より 正確に 高いときだけです。

馬モンテカルロの ppサンプルのオッズp×Op \times O
ドウデュース0.3622.30.83
レガレイラ0.2134.10.87
スターズオンアース0.1605.40.86
アーバンシック0.1007.50.75

この例では、どの馬も 1 を下回ります。予想エンジン の妙味指数がほぼ全頭 99 になっていたのと対照的に、確率とオッズを別々に用意すれば、「今回は買わない」という判断が正しく出てきます。

ケリー基準 — いくら賭けるか

期待値が 1 を超える馬券があっても、全財産を賭けるのは危険です (外れたら終わり)。ケリー基準 は、何度も賭けを続けたときに資金の増え方 (対数の期待値) が最大になる、賭ける割合 ff を与えます。

勝つ確率 pp、オッズ OO (払戻は OO 倍、純利益は b=O−1b = O - 1 倍) のとき、資金の対数の期待値

g(f)=pln⁡(1+bf)+(1−p)ln⁡(1−f)g(f) = p\ln(1 + bf) + (1 - p)\ln(1 - f)

を最大にします。微分して 0 と置くと

g′(f)=pb1+bf−1−p1−f=0  ⟹  f∗=pb−(1−p)b=pO−1O−1g'(f) = \frac{pb}{1 + bf} - \frac{1 - p}{1 - f} = 0 \;\Longrightarrow\; f^* = \frac{pb - (1 - p)}{b} = \frac{pO - 1}{O - 1}

分子 pO−1pO - 1 は「期待値 − 1」なので、期待値が 1 以下なら f∗≤0f^* \le 0 (賭けない) という結論が自然に出てきます。例えば p=0.30p = 0.30、O=4.1O = 4.1 なら f∗=(1.23−1)/3.1≈7.4%f^* = (1.23 - 1)/3.1 \approx 7.4\% を賭けます。

確率の見積もりが外れていると危険

ケリー基準は pp が正確であることが前提です。pp を過大評価していると、賭けすぎて資金を大きく減らします。実務では f∗f^* の半分や 1/4 だけ賭ける「フラクショナル・ケリー」がよく使われます。

Keiba Vision の改善案

ここまでの道具を使うと、アプリは次のように改善できます。

  1. 画面の「勝率」をモンテカルロの確率に置き換える — 合計が 100% になり、意味のある確率になる
  2. 妙味 (期待値) を piMC×Oip_i^{\text{MC}} \times O_i で計算する — オッズとは独立した確率を使うので、循環が解消する
  3. 買い目を期待値 1 超えの馬券だけに絞り、配分をケリー基準 (の 1/4 など) で決める
  4. 馬単・3 連単の確率を、Harville ではなくシミュレーションで直接数える
  5. 過去のレース結果を集め、係数 0.11 と予想エンジンの重みを、対数損失の最小化で推定する
  6. 3D の脚質の形 ss を 1/4 程度に小さくし、最大リードを現実的な 30m 前後にする (3D の運動学)
まとめ
  • オッズの逆数の和は 1/(1−t)1/(1 - t)。正規化すると市場の予想確率になる
  • softmax は点数を確率に変える標準的な方法で、揺らぎが Gumbel 分布のときに厳密
  • Harville の公式は Luce モデルでは正しいが、正規分布の揺らぎでは馬連を約 28% 過大評価した
  • 予想は Brier スコアや対数損失で評価し、係数は最尤推定で決める。基準は市場のオッズ
  • 期待値 pO>1pO > 1 のときだけ賭け、割合はケリー基準 f∗=(pO−1)/(O−1)f^* = (pO - 1)/(O - 1)
練習問題控除率を逆算する

ある 10 頭立てのレースで、単勝オッズの逆数の和が 1.32 でした。このレースの実質的な控除率はいくらですか。

答えを見る

1/(1−t)=1.321/(1 - t) = 1.32 より t=1−1/1.32≈0.242t = 1 - 1/1.32 \approx 0.242。約 24% です (払戻金の端数処理などで 20% より大きく見えることがあります)。

練習問題softmax の温度

総合スコアが 90 と 80 の 2 頭について、softmax の β=0.1\beta = 0.1 のときの 1 頭目の確率を求めてください。β=0.3\beta = 0.3 ではどうなりますか。

答えを見る

p=1/(1+e−β×10)p = 1/(1 + e^{-\beta \times 10})。β=0.1\beta = 0.1: 1/(1+e−1)≈0.7311/(1 + e^{-1}) \approx 0.731。β=0.3\beta = 0.3: 1/(1+e−3)≈0.9531/(1 + e^{-3}) \approx 0.953。β\beta が大きいほど強い方に確率が集中します。

練習問題ケリー基準

勝つ確率 0.25、オッズ 5.0 の馬券に、資金の何% を賭けるべきですか。オッズが 3.5 ならどうですか。

答えを見る

O=5.0O = 5.0: f∗=(1.25−1)/4=6.25%f^* = (1.25 - 1)/4 = 6.25\%。O=3.5O = 3.5: pO=0.875<1pO = 0.875 < 1 なので f∗<0f^* < 0、賭けない。