AIでJRAの回収率110%を目指す検証(第24回)|市場より当てられるようになった。それでも回収率は83%だった

市場より当てられるようになった。それでも回収率は83%だった 実験ログ

この検証では74回実験して、一度も市場を超えられませんでした。「市場はすでに全部織り込んでいる」というのが、その時点での作業仮説でした。今回はじめて、その反例が出ました。ただし超えたのは「当てる」ほうだけで、回収率は83%のままです。

これまでの結論は「市場はもう織り込んでいる」だった

競馬のオッズは、参加者全員の予想の集計値です。この検証で何度も起きたのは、新しい情報を見つけたと思っても、その情報はすでにオッズに入っていたという結末でした。

見つけた要素を足すと、たしかに当たるようになる。しかし当たった馬は例外なく人気で、配当が小さい。差し引きゼロ。これが70回以上続きました。

なので作業仮説はこうなっていました。

公開データから読み取れることは、すでに全部オッズに反映されている。

今回はこれに反例が出ました。そして反例が出たうえで、それでも儲からないことが分かりました。この2つは別々の事実です。

使ったのは調教データだけ

作った指標は、追い切り(レース前の調教)の記録だけを入力にしています。

  • オッズを使わない
  • 人気を使わない
  • 過去の着順を使わない
  • 血統も騎手も使わない

入れたのは調教コースの時計だけです。ここまで削ったのには理由があります。オッズや人気を入れると、その指標が「市場の写し」になってしまい、市場を超えたのか市場をなぞったのかが区別できなくなるからです。

期間の分け方はこうしました。

指標を作る(学習)   2021〜2022年
成績を測る(評価)   2023〜2024年   ← 学習には一度も使っていない

さらに、その先の期間は封をしたままにしてあります。ここは開けるのは1回だけと決めてあり、今回は触っていません。

対照の作り方が、この検証でいちばん重要な部分でした

「当たった/当たらなかった」を数えるだけでは、何も分かりません。人気馬を選べば的中率は勝手に上がるからです。

なので比較の相手を、こう決めました。

同じ単勝オッズ帯にいる馬。

1倍台の馬を選んだのなら、比較相手は「1倍台の馬ぜんぶ」です。オッズ帯をそろえてから差を取れば、市場の評価では説明できない分だけが残ります。

この作り方をしないと、「市場を超えた」の中身が「人気馬を多めに買った」になります。この検証では過去に何度もそれをやって、そのたびに対照をそろえると差が消えました。

結果:当てるほうは、たしかに超えた

指標1位の馬(複勝)
  的中リフト   +2.01pt   95%区間 [+0.99, +3.01]
  指標1位〜5位まで、すべて同じ向き

区間の下限がゼロを超えています。同じオッズ帯の馬と比べて、2ポイント弱だけ余計に来ている。そして1位だけの偶然ではなく、2位、3位、4位、5位と順に薄れながら同じ向きに出ています。単調に効いているということです。

公開されている調教データの中に、オッズが吸収しきれていない情報が残っていました。これは74回の実験ではじめての反例です。

しかし、儲からない

同じ買い方の回収率です。

  回収率  83.0%   95%区間 [78.5, 87.7]

100%どころか、控除率を引いた水準とほとんど変わりません。当てる力はある。それでも払い戻しは増えていません。

理由は単純でした。この指標が「来る」と言う馬は、市場も「来る」と言っている馬とかなり重なるからです。調教が良い馬は人気になります。人気になれば配当が下がります。当てた分だけ配当で持っていかれる。

ここから引き出せる整理はこうです。

「よく当たる」と「儲かる」は、別々の軸で測らないといけない。

当たりが増えると、体感としては強くなった気がします。しかし体感が拾っているのは的中率のほうで、口座の残高を決めているのは回収率のほうです。2つの数字を並べて出す形にしていなければ、今回も勘違いしていたと思います。

「割安さ」と組み合わせると、あと1.4ポイント届かない

この検証にはもともと、オッズが実力に対して割安な馬を探す指標があります。そちらは当てる力は弱いのですが、当たったときの配当が大きい。

性質が逆なので、重ねてみました。

割安さの上位のみ                 98.9%
  + 調教が良い馬に絞る          109.3%   (95%区間の下限 98.6%)

点推定は109.3%です。目標の110%にほぼ届いています。しかし区間の下限が98.6%で、100%を割っています。

この検証では、下限が100%を超えない限り「エッジ」とは呼ばないと決めています。点推定だけで判断すると、数字が良く見えた瞬間に必ず飛びつくからです。過去に5回、飛びついて消えました。

足りないのは1.4ポイントです。近いようですが、この1.4ポイントは「もう少し頑張れば埋まる差」ではありません。サンプルが足りないだけかもしれないし、実力が足りないだけかもしれない。いまのデータでは区別できない、というのが正確な状態です。

そして、この数字そのものが上振れしています

ここが今回いちばん大事な但し書きです。

指標を作る過程で、評価用の期間(2023〜2024年)の数字を見ながら、設計を6回変えました。

  • 学習には使っていません
  • しかし「どの案を採るか」の判断には、その数字を見ています

これは統計的には選択に使ったということです。6案のうち最良を選べば、その数字は上振れします。したがって上に書いた83.0%も109.3%も、「次に走らせたときの期待値」ではありません。

対処:数字を追うのをやめて、汚れていない記録を貯めはじめた

結論として、指標をこれ以上いじるのをやめました。代わりにやったことは3つです。

1. 指標を凍結した。 中身を1回だけファイルに焼き付け、毎日の記録処理はそれを読むだけにしました。毎日作り直したら、記録は「何を測ったのか分からない列」になります。

2. 毎日の記録を自動化した。 2本走っています。片方は調教指標そのもの、もう片方は「割安さ×調教」の組み合わせのほうです。どちらも金銭のやり取りは一切ありません。記録だけです。

3. 判定の条件を、記録を始める前に文書化した。 何点貯まったら見るか、合格の基準は何か、途中経過をどう扱うか。特に次の2つを明記しました。

  • 途中の数字では判定しない。「いま良い数字が出ている」とも書かない(書いた時点で判定になるため)
  • 改良したくなったら、別の記録として始める。既存の記録に混ぜたら、それまで貯めた分が無価値になる

判定までにかかる時間は、片方が約1年、組み合わせのほうは約5年の見込みです。

5年は長い。それでも今日から始める理由

組み合わせのほうは条件が厳しいぶん、買い目が年間100点ほどしか出ません。必要な件数に達するまで5年かかります。

正直に言えば長すぎます。短くする方法もいくつかあり、それぞれ一長一短です。ただしどの方法を採るにしても、記録を始めていなければ意味がありません。

始めなければ、5年後も同じ場所にいます。

今回いちばん効いたのは、この当たり前の一行でした。実は「割安さ×調教」——いちばん実戦に近い形——は、前向きには1点も記録されていませんでした。調教指標のほうだけ記録が始まっていて、本命のほうは誰も数えていなかった。指摘されるまで気付きませんでした。

まとめ

  • 公開データの中に、オッズが吸収しきれていない情報は残っていた。調教データだけで、同じオッズ帯の馬に対して的中率で有意に上回った(+2.01pt・区間の下限が0を超える)
  • それでも回収率は83.0%。当てる力は配当の小ささで打ち消される。「よく当たる」と「儲かる」は別の軸
  • 比較相手をそろえない限り、何も分からない。同じオッズ帯の馬と比べなければ「人気馬を買った」が「市場に勝った」に見える
  • 点推定ではなく区間の下限で判定する。109.3%でも下限が98.6%なら、それはまだエッジではない
  • 選択に使った数字は上振れしている。評価期間を見ながら設計を変えた時点で、その数字は期待値ではない
  • だから指標を凍結して、汚れていない記録を今日から貯めることにした。判定は1回だけ、条件は先に文書化した

次回は、この前向きの記録が最初のまとまった件数に達した時点で、探索段階で見えていた数字と、実際に前向きで出た数字の差を報告します。その差が、この記事に書いた「上振れ」の実測値になります。

当てる腕は上がった。けれど、勘定はまだ赤いままだ。

この後の実験は、地方競馬に舞台を移しています。

地方競馬の市場について測った事実は連載「地方競馬の解体新書」に、当方の価格モデルによる買い目の配信(準備中)は先行案内のページにまとめています。