AIでJRAの回収率110%を目指す検証(第14回)|信号が出た、と思ったら消えた

信号が出た、と思ったら消えた 実験ログ

これまで16の系統を試し、すべて「市場に上積みできない」という結果でした。今回、目的関数を変えたところ差が出ました。しかしその数字は、検証する期間を変えると縮みました。この検証で4度目になります。

これまで何を最大化していたか

この検証で使ってきたモデルは、着順の尤度を最大化していました。つまり「どの馬が3着以内に来るか」をできるだけ正確に当てにいく設計です。

結果はすべてゼロでした。市場のオッズにモデルを足しても、上積みが出ない。16回繰り返して16回とも同じでした。

ここで、目的関数そのものを疑う理由がひとつあります。

50倍の馬の確率を1パーセント読み違えたとき、尤度への影響はほぼ無視できます。しかし回収率への影響は壊滅的です。

尤度は「当たったかどうか」を見ますが、賭けの損益は「いくら返ってきたか」で決まります。同じ1パーセントの誤差でも、配当が高い馬ほど金額への影響が大きい。尤度で測ってゼロでも、回収率で測ると構造が残っている可能性があります。

判決文に残された手法

もうひとつ、方向を決める材料がありました。

日本には、継続的に回収率100パーセント超を達成したことが裁判記録として残っている事例があります。課税をめぐる訴訟の判決文で、購入額と払戻額が認定されているためです。

そのうちのひとつでは、手法がこう記録されています。

過去10年分のデータで約40のファクターを検証し、回収率に着目した独自の計算式で購入する馬を決めた

着順予測ではありません。回収率です。 公表されている指数の考え方も「100を基準として、市場に過小評価された馬が100を超える」という、オッズに対する相対値でした。

加点方式にする

これまでの検証で、条件を重ねる試みは一度やっています。ただしそのときは絞り込みフィルタでした。条件を満たさない馬を落としていく形です。

その方向で進むと、堅い馬に収束します。実際、回収率は96パーセントまで上がりましたが、そこで頭打ちになりました。複勝には元返し1.0倍という配当の下限があるため、当たりやすい馬を突き詰めても100パーセントの手前で釣り合ってしまうからです。

そこで今回は加点方式にしました。

条件をフィルタではなく点数として扱います。すると人気薄でもプラス要因が重なれば高得点になりえます。配当の下限から離れた価格帯に候補が出てくる、という点が違いです。

設計上の落とし穴を二つ

素朴にやると失敗する箇所が二つありました。

単純な足し算は二重計上になります。 ファクター同士は互いに相関しています。「前走大敗」と「人気薄」は大きく重なる。個別に測った乖離を足すと、同じ効果を何度も数えることになります。

そこで、全ファクターを同時に回帰しました。説明変数にオッズの水準も入れています。こうすると「同じ人気構成の対照との比較」が回帰の中で自動的に行われ、相関も処理されます。得点にはオッズ水準の寄与を含めていません。含めてしまうと、ただの人気順になるからです。

もうひとつは選択の偏りです。 20のファクターを測り、成績の良かったものを採用すれば、それはノイズを選んでいる可能性があります。この検証では過去にその罠で一度騙されており、そのときは上積みが0.371から0.042まで落ちました。

対策として、得点は学習期の中でアウトオブフォールドで作り、判定には推定に一切使っていない期間を用いています。

資金の配分について、先に計算しておく

「エッジが102パーセント程度でも、資金配分を工夫すれば105パーセントを狙えるのではないか」という考え方があります。これが成り立つ条件を、実験の前に確認しました。

集計の回収率は、賭け金で重み付けした期待値の平均です。

母集団 均等に買う 期待値に比例して配分 上位10%に集中
期待値が全部102%で均一 102.0% — 102.0%
期待値が94〜110%に分散(平均102%) 102.0% 104.5% 108.9%

期待値に分散があれば成立します。均一なら何をしても動きません。

つまり資金配分はエッジを作り出す装置ではなく、すでにある分散を増幅する装置です。順序としては、分散を見つけるほうが先になります。

もうひとつ、注意すべき性質も確認しました。同じ母集団でも、期待値の推定に誤差を混ぜると結果が落ちます。標準偏差8ポイントのノイズを加えたところ、「推定上位10パーセント」の本当の平均期待値は108.9パーセントから105.3パーセントまで下がりました。

上位を選ぶという行為そのものが、推定誤差のプラス側を拾ってしまうからです。過去に競馬で成功した実践者が、資金配分に控えめな係数を使っていた理由がここにあります。

結果

判定に使ったのは、得点の推定に一切使っていない期間です。24,148頭、1,722レース。

対象 買い目 回収率 95%信頼区間
母集団(全馬) 24,148 71.0% 68.1〜73.9%
得点上位10% 2,477 85.5% 74.7〜96.2%
得点上位5% 1,234 86.9% 74.5〜99.3%

14.5ポイントの差がつきました。 得点の十分位で見ても、最下位62.9パーセントに対して最上位85.4パーセントと、22.5ポイントの開きがあります。

資金配分の比較も、計算どおりの動きになりました。

配分 回収率
均等に買う 70.8%
得点に比例して配分 71.6%
上位10%に集中 87.0%

この時点でこちらは、16回続いたゼロがようやく動いたと受け取りました。その判断が正しかったかは、後述します。

人気順ではないことの確認

ここが重要な点です。得点が高い馬は、単に人気馬なのではないか。

的中率を見ると、そうではないと分かります。

得点の十分位 回収率 的中率
最下位 62.9% 21.1%
最上位 85.4% 23.7%

的中率はほぼ横ばいです。 人気馬を選んでいるだけなら、的中率が跳ね上がるはずです。そうなっていません。

当たりやすさは同じまま、回収率だけが22.5ポイント高い。 これは「配当に対して確率が過小評価されている馬」を拾えているという意味になります。

回帰の係数を見ても、「1番人気であること」の寄与はマイナスでした。オッズの水準を制御したうえでの値なので、「同じ価格帯の中では1番人気はむしろ不利」という読み方になります。価格からの乖離を測るという設計が、意図どおり働いていました。

それでも届かない

85.5パーセント。100パーセントまで14.5ポイント足りません。

上位5パーセントに絞っても86.9パーセントで、信頼区間の上限が99.3パーセント。100パーセントに触れてすらいません。

距離を測るとこうなります。

  • 母集団の71パーセントから100パーセントまで、29ポイント必要
  • 得点が供給したのは、14.5ポイント
  • ランキングの能力が、あと約2倍必要

事前に決めた基準は「上位帯の信頼区間の下限が100パーセントを超えること」でした。満たしていません。したがって、この結果は棄却します。閾値も、判定する帯も動かしません。

ここで終わらなかった

ここまでが最初の検証です。「17回目にして初めて信号が出た」と判断しました。

しかしこの検証には、判定に使った期間がひとつしかありません。別の期間でも同じことが起きるのかを確かめていませんでした。

そこで二つのことを試しました。判決文に残された事例が約40のファクターを使っていたことに倣い、ファクターを20から44に増やすこと。そして判定に使う期間を変えることです。

結果はこうなりました。

ファクター数 判定に使った期間 母集団 上位10% 差
20 前年 71.0% 85.5% +14.5pt
20 別の年 71.7% 76.8% +5.1pt
44 別の年 71.7% 77.6% +5.9pt

同じ20のファクターで、期間を変えるだけで差が14.5ポイントから5.1ポイントに縮みました。

ファクターを倍にしても5.1から5.9ポイントで、ほとんど動きません。つまり原因はファクターの数ではなく、期間だったわけです。

そして5.1ポイントという差は、統計的に有意ではありません。上位10パーセントの信頼区間の下限が71.2パーセントで、母集団の71.7パーセントを下回っています。

最初の判断は誤りだった

正直に書きます。最初の結果を「初めて有意な信号」と表現したのは、誤りでした。

数字を見返すと、そう書いた時点で分かるはずでした。

  • 上位10パーセントの信頼区間の下限:74.7%
  • 母集団の信頼区間の上限:73.9%

わずか0.8ポイントしか離れていません。 かろうじて重なっていないという状態です。それを「有意な信号」と呼んだ時点で、この検証が最初に決めたはずの作法を、自分の期待に合わせて緩めていたことになります。

そして案の定、別の期間では重なりました。

4度目

この検証では、有望に見えた数字が消えた経験がこれで4度目になります。

回 見かけ 正しく測ると 原因
第2回 回収率98.2%(107件) 74.5%(1,788件) 標本不足
第7回 上積み +0.371 +0.042 学習データ上の予測を使っていた
第8回 複勝率 14.6%→25.6% 消滅 3割超のレースに欠損値が混入
今回 +14.5pt +5.1pt(有意でない) 期間固有のばらつき

過去3回は、いずれもデータの扱いや測り方の誤りでした。今回は測り方は正しく、解釈が誤っていました。 質としてはこちらのほうが厄介です。手順を守っていても、結果への期待が言葉を歪めるからです。

検証の中でひとつ、余計なことをしていた

もうひとつ、こちらの設計ミスがありました。

再検証のとき、ファクターの数と判定期間を同時に変えました。これでは、差が縮んだ原因がどちらなのか分かりません。

気づいて、20のファクターのまま期間だけ変えたものを追加で走らせ、原因が期間だと特定しました。一度に一つだけ変えるという基本を外していたわけです。

残っているかもしれないもの

過大に読まないよう注意しつつ書くと、二つの期間とも差の向きは正でした(+14.5ポイントと+5.1ポイント)。小さな実効果、たとえば5ポイント程度が存在する可能性までは否定されていません。

ただし片方の期間では有意ではなく、必要な29ポイントに対して6分の1です。実用の水準からは遠い。

この検証で守るべきだったこと

目的関数を尤度から回収率に変えるという発想自体は、間違っていなかったと考えています。実際、両方の期間で差の向きは正でした。

問題は数字の読み方でした。信頼区間が0.8ポイントしか離れていないものを「信号」と呼ばない。 単純な話です。それを守れていれば、最初から「差は出たが有意とは言えない、別の期間で確認する必要がある」と書けたはずでした。

判定基準を先に決めることには意味があります。しかし決めた基準を都合よく読まないことのほうが、おそらく難しい。


本記事はAIが下書きを生成し、人間が公開可否を判断しています。掲載した数値はすべて実データによる分析結果であり、恣意的な抽出は行っていません。個別のファクターの重みや閾値は公開していません。本記事は情報提供を目的としたものであり、馬券の購入を勧誘するものではありません。

期待が箸を急がせた。数字のせいにはできないな。

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

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