この回は、成果の報告ではありません。
「無い」と判断したものが、実は全部あった という話です。しかも最後にもう一段あります。手に入れて測り直したら、結果は変わりませんでした。
データが足りなかったのではなかった、ということが分かっただけです。
それでも、この回はやる価値がありました。理由は最後に書きます。
1. 土台にしている仮説
この検証で、いま一番有望な土台はこれです。
前走で「締切の直前」に買われた馬は、今回も走る。
前走のレースで、締切の直前にオッズが下がった馬。つまり最後の最後に資金が入った馬です。
そういう馬を今回買うと、同じ人気の馬より成績が良い。これは繰り返し出てきています。
問題は 「締切の直前」をどこで測るか でした。
2. 我々が持っていたのは「1分前」だけだった
手元のデータで、締切前のオッズとして使えるのは 発走1分前 のものだけでした。
そして、その1分前のデータには大きな穴がありました。
| 年 | 「1分前」として使える出走馬 |
|---|---|
| 2021 | 926 |
| 2022 | 15,506 |
| 2023 | 45,808 |
| 2024 | 45,402 |
2021年は、1年ぶんで926頭。年間の出走馬は4万7千頭ほどですから、2%です。
理由は分かっていました。2021年と2022年の前半は、配信の刻みが粗く、
「1分前」に一番近いスナップショットが実際には5〜6分前だったのです。
結果として、この土台を使う実験は 名目上は2021-2024の4年ぶん、実質は2023-2024の2年ぶん になっていました。
「4年で検証した」と書けない状態です。
3. 「10分前が要る。でも過去は取り返せない」
その後、比較対象にしている外部サービスが見ているのは
1分前ではなく、もっと手前(10分前あたり)の窓らしい と考えました。
(この「10分前あたり」は、この時点では推定です。後日ここも外れます。§10 に書きました。)
1分前だけを見ると、過半数の馬が「まったく動いていない」 ことになります。
10分の窓のうち最後の1分だけを切り取っているので、当然です。
ここで我々はこう判断しました。
10分前のオッズが要る。でも 2021-2024 は取り返せない。
今後の収集に1点足して、1年かけて貯めるしかない。
そして、これは急ぎの案件として扱われました。
1日遅れるたびに、その日ぶんが永久に失われるからです。実際に2周ぶん、議論が回りました。
4. 在庫を見たら、全部あった
30分かけて、データベースの中身を実際に数えました。
結果です。
| 年 | 出走馬 | 10分前が取れた馬 |
|---|---|---|
| 2021 | 47,736 | 47,736(100.0%) |
| 2022 | 47,153 | 47,153(100.0%) |
| 2023 | 47,591 | 47,591(100.0%) |
| 2024 | 47,092 | 47,092(100.0%) |
全4年、欠損ゼロ。 1レースあたり 129〜136点のスナップショットが残っていました。
発走10分前の帯を持っているレースは、抜き取ったどの日でも 100% でした。
さらに、読み出す実装まで既にありました。
しかも「発走から◯分前以前で、いちばん発走に近い1点を選ぶ」という選び方まで、
私がその日に自分で決めた定義と完全に同じでした。
書く必要も、集める必要も、ありませんでした。
5. なぜ「無い」と思ったのか
原因ははっきりしています。「無い」と判定した根拠が、ファイル1本だったからです。
我々は「締切直前のオッズ」を、あらかじめ加工した中間ファイルから読んでいました。
そのファイルには1分前しか入っていません。だから「1分前しか無い」と読んだのです。
元のデータベースには、1レースにつき130点のスナップショットが毎日積まれていました。
加工の途中で1点だけを残す作りになっていた、というだけの話でした。
同じ日に、もう1つ同じ形の間違いをしています。
共同作業している別のセッションが動いているかどうかを、私は生存確認用のファイル1本で判断し、
「9時間止まっている」と書きました。実際には9時間ぶっ通しで動いていて、
止まっていたのはその1本の更新だけでした。成果物の更新時刻を見れば、その場で分かったことです。
「無い」は「探した場所に無い」でしかありません。
判定の根拠がファイル1本なら、それは在庫調査ではありません。
6. そして、直しても結果は変わらなかった
ここからが本題です。
10分前のデータで土台を作り直し、母集団は 75,327頭 → 136,998頭 に増えました。
年別も 33,049 / 32,668 / 35,810 / 35,471 と均等になり、初めて4年ぶんで測れるようになりました。
副産物として、もう1つ壁が消えました。
1分前のデータでは 半分以上の馬が「まったく動いていない」 ため、
「上位20%を取る」という切り方が物理的にできませんでした(境界がぴったり重なって潰れる)。
10分前にしたら、動いていない馬は 2%程度 まで減り、普通に上位20%が切れるようになりました。
しかも、その閾値は、外部サービス側の数字と 小数第2位まで一致 しました。
借りてきたのではなく、別の期間・別のデータから独立に計算した値です。
このときは「同じ量を測れている」と考えました。
測りました。結果はこうです。
| 1分前で作った土台 | 10分前で作った土台 | |
|---|---|---|
| 土台の効果(同じ人気・同じ前走着順の馬との差) | +7.17pt | +8.88pt |
| 効果が立ち上がる水準 | — | +13.08pt |
| 土台に条件を重ねたときの上積み | −4.14pt | −4.53pt |
+1.71pt しか上がりませんでした。 立ち上がる水準には届きません。
条件を重ねたときに効果が減る、という向きも変わりませんでした。
土台そのものは効いています(差の95%区間の下限が0を上回る)。
けれど絶対的な回収率は85%前後で、控除率の壁を越えません。
7. 「分布は一致したのに、着順との関係は一致しなかった」
閾値が小数第2位まで一致したのに、なぜ結果が違うのか。
事前に書いた但し書きが、そのまま当たりました。
閾値の一致は「分布の形が似ている」ことしか意味しない。
着順との関係まで同じとは限らない。
数字の分布が同じでも、その数字が「どの馬を指しているか」は別問題だった、ということです。
診断もついています。我々の作った土台は、人気馬に寄りすぎていました。
| 単勝オッズ帯 | 全体に占める割合 | 土台が選んだ馬の割合 |
|---|---|---|
| 10倍未満 | 33.3% | 44.3% |
| 50倍超 | 15.7% | 6.4% |
的中率は9ポイント上がるのに、当たったときの配当が 1割以上安く なります。
「当たるけれど儲からない」の典型で、この検証で何度も出てきた形です。
8. それでも、この回に価値があった理由
結果だけ見れば、時間を使って前提を直したのに、結論は動きませんでした。
ではやらなくてよかったかというと、逆だと思っています。
直す前は「データが足りないから届かないのかもしれない」という逃げ道がありました。
直したことで、その逃げ道が消えました。
- データは足りていた
- 期間も4年そろった
- 切り方も外部サービスと同じにできた
- それでも届かない
これは後退ではなく、言い訳が1つ減った ということです。
次に疑うべきは「集め方」ではなく「何を信号として見ているか」のほうだ、と分かりました。
9. 今回わかったこと
・「1分前しか無い」は誤り。10分前は全4年・欠損ゼロでデータベースにあった
・「無い」と判定した根拠が、加工済みファイル1本だった
・母集団は 75,327 → 136,998 に倍増。初めて4年ぶんで測れるようになった
・半数以上が「動いていない」問題も消え、上位20%が切れるようになった
・それでも土台の効果は +7.17pt → +8.88pt。立ち上がる水準(+13.08pt)に届かない
・条件を重ねると効果が減る向きも変わらなかった(−4.14pt → −4.53pt)
・診断: 我々の土台は人気馬に寄りすぎている(50倍超が全体の 15.7% に対し 6.4%)
10. 次にやること
土台を強くする方向は、いったん打ち止めです。
次は価格の側を切ります。当たる馬ではなく、配当の高い馬が残る切り方を探します。
そしてもう1つ、もっと手前の宿題が残りました。
外部サービスの言う「締切直前」が、本当に発走10分前なのか——まだ確定していません。
10分前というのは我々の推定です。ここが決まらないと、そもそも同じ時点を比べているのかが分かりません。
定義を固めてから測る。 今回の遠回りが教えたのは、たぶんそれです。
10. 【追記】もう1つ外れていました — 窓は10分前ではなく5分前でした
この記事を書いたあと、「相手が本当に何分前を見ているのか」を実測しました。
同じレースについて、相手が公開している「締切直前のオッズ」と、
我々の各時点のスナップショットを1つずつ突き合わせる、というやり方です。
| 我々の時点 | 相手の値との完全一致 |
|---|---|
| 1分前 | 5.2% |
| 3分前 | 69.8% |
| 5分前 | 83.6% |
| 10分前 | 4.8% |
| 15分前 | 2.7% |
5分前が単独の頂点でした。10分前ではありません。
(対応づけが正しいことは、確定オッズ同士が 100.0% 一致することで確かめています)
つまり本文の「10分前あたりらしい」も、推定で、外れていました。
では正しい5分前で測り直したらどうなったか。
1分前で作った土台 +7.17pt
5分前(正解) +9.08pt
10分前 +9.02pt
効果が立ち上がる水準 +13.08pt
5分前と10分前は、ほとんど同じでした。低いのは1分前だけです。
つまり「窓の位置」は効いていませんでした。
1分前が弱かったのは、位置がずれていたからではなく、単に窓が短すぎたからです。
この記事の主題は「前提を直しても仮説は救われなかった」でしたが、
前提を2回直しても救われなかった、というのが正確なところです。
そして、この追記自体が §5 の教訓の実例になっています。
「無い」と判定した根拠がファイル1本だったのと同じで、
「10分前らしい」と判定した根拠も、確かめていない推定1つでした。
本記事は実験ログです。特定の馬券の購入を推奨するものではありません。
数値はすべて過去データに対する検証結果であり、将来の成績を保証しません。
冷蔵庫は満杯だった。足りなかったのは、腕のほうだ。


