前回(第41回)は「監視が4日間、異常なしと言い続けていた」という運用の話でした。
今回は数字の話です。1日で見つけて、1日で失いました。
見つけたときの数字
地方競馬の19年分を使っています。探索に2007〜2020年の14年、検証に2021〜2024年の4年。探索期で条件を作り、検証期で確かめるという順序を守っています。
その日の午後、こういう数字が出ました。
単勝1.5〜2.0倍の馬のうち、「複勝の人気が単勝の人気より2つ以上下」の馬を複勝で買う
探索 2007-2020 n=1,287 回収率 108.5% [104.1, 112.5]
検証 2021-2024 n= 208 回収率 108.9% [100.2, 118.1]
独立な2つの期間で、点推定が 0.4pt しか違いません。そして両方とも、95%区間の下限が100を上回っています。
このプロジェクトを始めてから、下限が100を超えたのは初めてでした。
なぜそれが起きるのか(当時の理解)
複勝の払戻は、その馬が複勝でどれだけ買われているかで決まります。単勝の人気と複勝の人気は普通そろいますが、ときどきズレます。
「複勝でだけ嫌われている馬」を買うと、こうなります。
配当 114.3円 → 147.6円 +29.1%
的中率 77.8% → 73.5% −5.5%
配当が29%上がるのに、実際に3着以内に入る率は5.5%しか落ちない。釣り合っていません。
しかも逆向きも確認できました。複勝で「買われている」側は、的中率が上がるのに回収率は下がります。つまり複勝の人気は的中率を正しく予測している。値段だけがズレている。
きれいな話に見えました。
1つだけ、確かめていなかったこと
この数字は確定オッズ、つまりレースが終わった後の最終的なオッズで作っていました。
買うときには、その数字はありません。
うちの自動投票は締切の2分前に判定します。だから確かめるべきことは1つです。
締切2分前の複勝人気は、確定時点の複勝人気と同じか。
これを測る前に、合格ラインを決めました。後から決めると、出た数字を都合よく読んでしまうからです。
締切2分前に「乖離2つ以上」だった馬のうち、確定でも2つ以上だった割合を「適合率」とする。
適合率が70%なら: 0.7 × 108.5% + 0.3 × 87% = 102.1%
・70%を割ると、計算上100%を割る。だから合格線は70%。
結果
適合率 28.6%
再現率 35.9%
相関 0.392
3.6頭に1頭しか残りませんでした。
移り方の表が、いちばんはっきりしています。
| 締切2分前 \ 確定 | −2 | −1 | 0 | +1 | +2 | +3 |
|---|---|---|---|---|---|---|
| +2 | 3.3% | 9.6% | 31.8% | 31.1% | 19.5% | 4.8% |
締切2分前に「+2」だった馬の3割は、確定では「0」に戻ります。1割強はマイナス側、つまり「複勝で買われている」側にまで移動します。
締切2分前の複勝人気と、確定の複勝人気は、ほぼ別物でした。
事前に書いた式に実測値を入れます。
0.286 × 108.5% + 0.714 × 87% = 93.1%
基準線より少し良いだけで、100%には届きません。
この計算を先に書いておいたことが、この日いちばん役に立ちました。もし後から基準を作っていたら、私はこう書いていたと思います。「適合率は28.6%だが、相関は0.392あるので、薄まった形では効くはずだ」。
では、締切2分前の乖離そのものはどうなのか
ここで気づきました。私は間違った問いを立てていた。
❌ 立てた問い 「確定の乖離を、締切2分前に当てられるか」
・本来の問い 「**締切2分前の乖離それ自体**に、予測力があるか」
確定の乖離はレース後にしか分からない量です。それを近似する必要なんてありません。締切2分前の乖離が、その時点での値段のズレを表しているなら、確定と一致しなくても構わない。
測りました。
基準線 84.1%
締切2分前に乖離+2以上の馬 76.0% [66.3, 85.3]
的中率 −10.9pt / 配当 +9.9円
逆でした。
確定の乖離 配当 +29.1% 的中 −5.5% → 打ち消しが**不完全** → 108.5%
2分前の乖離 配当 +20.4% 的中 −24.6% → 打ち消しが**過剰** → 76.0%
締切2分前に複勝が嫌っている馬は、実際にちゃんと弱い。市場は正しく値段をつけています。
108.5%の正体
2つを並べると、答えが出ます。
2分前に嫌われている馬 → 実際に弱い(的中 −10.9pt)→ 買っても損
確定で嫌われている馬 → **2分前以降に票が入らなかった馬**
確定時点の乖離には、「レース直前に人気が動かなかった」という結果が含まれていました。そして動かない馬は、動く馬より成績が良い。
つまり、値段のズレを見つけていたのではありませんでした。
「締切間際の資金の動きが結果と相関する」という、ごく当たり前のことを、遠回りに測っていただけでした。
そしてその情報は、判定時点には存在しません。
最後に確かめたこと
まだ1つ、逃げ道がありました。
「動かない馬が良い」なら、動きそのものを指標にすればいい。確定までの動きは見えませんが、朝一から締切2分前までの動きなら見えます。
測りました。56セルすべて平ら。下限が100を超えたセルはゼロでした。
今日わかったこと
数字は1つも前進していません。それでも、この日の測定は「なぜ届かないか」を式の形にしました。
回収率 = 的中率 × 配当
的中率は 単勝オッズがほぼ完全に決めている
(馬の条件・騎手・調教師・走破タイム・着差 — どれで切っても価格帯の中では動かない)
配当は 複勝オッズがほぼ完全に決めている
(乖離で切ると配当は上がるが、的中率がそれ以上に落ちる)
動きにも 情報が無い
判定時点で観測できる情報からは、地方競馬の複勝で100%を超える部分集合は作れない。
これは「まだ探し足りない」ではありません。1日で350を超える切り口を、事前登録つきで、3つの期間から測った結果です。
手順の話
この日、100%を超える数字は9回出ました。そのうち8回は、別の期間に当てると消えました。
残った1つも、判定時点では再現しませんでした。
1日で350の切り口を測れば、偶然だけで10前後は100%を超えます。期待値どおりでした。
だから、こうしています。
- 測る前に、合格線と根拠の計算を書いて保存する
- 片方の期間だけで数字を報告しない
- 数字を出すときは、その日に測ったセル数を必ず添える
- 件数(n)を比率より先に印字する
4番目のおかげで、この日ひとつ事故を防げました。ある測定が「6,851レース」のはずが「29レース」しか返らず、比率を見る前に異常に気づけました(原因は、早朝のオッズはレコードだけあって中身が空だったこと)。もし比率だけ見ていたら、壊れたデータの上に「不合格」という結論を書いていたはずです。
次
地方競馬の複勝は、判定時点の情報という意味では、かなり見通しが立ちました。残っているのは券種そのものです。
このプロジェクトで100%を超えたことがある券種は、いまのところ1つだけ。それは複勝ではありません。
次回はそちらを測ります。
閉店後の厨房を覗いて、旨い店だと言っていたのか。


