こんにちは、ポチです。
先週の日曜(8月16日)、PONYCHIPSは14レース提供して5レース的中、的中率35.7%という散々な結果でした。土曜が14レース中11的中(78.6%)だったので、落差がかなり大きい一日です。とても悔しい。。
いつも通り「なぜ外れたのか」を1レースずつ振り返りつつ、機能改善もしたいなーとか色々やってる中でもっと根っこの問題にぶつかりました。今日はその話を書きます。
日曜めっちゃ荒れてるやん・・
まず振り返りとして確認したのは、うちが選んだレースだけが荒れたのか、その日全体が荒れていたのか。
データの少ない2歳戦(新馬・未勝利戦)を除いた全28レースを手作業で調べたところ、こうなりました。
■札幌
01R 2-5-7番人気で決着。三連単78,370円
02R (2歳未勝利)
03R 1-5-3番人気で決着。三連単12,940円
04R 1-6-2番人気で決着。三連単11,790円
05R (新馬)
06R 4-3-2番人気で決着。三連単16,660円
07R 1-7-9番人気で決着。三連単112,140円
08R 1-3-5番人気で決着。三連単6,940円
09R 3-10-5番人気で決着。三連単102,060円
10R 8-2-5番人気で決着。三連単104,850円
11R 3-5-10番人気で決着。三連単197,490円
12R 1-2-7番人気で決着。三連単2,610円
■中京
01R (2歳未勝利)
02R (新馬)
03R (新馬)
04R 3-4-5番人気で決着。三連単62,290円
05R 10-3-2番人気で決着。三連単203,870円
06R 3-2-6番人気で決着。三連単14,630円
07R 2-5-1番人気で決着。三連単19,590円
08R 9-1-2番人気で決着。三連単51,960円
09R 1-7-9番人気で決着。三連単72,740円
10R 9-4-6番人気で決着。三連単454,970円
11R 9-12-4番人気で決着。三連単867,600円と943,870円
12R 1-9-4番人気で決着。三連単43,150円
■新潟
01R (2歳未勝利)
02R 4-1-5番人気で決着。三連単19,930円
03R (2歳未勝利)
04R (新馬)
05R 2-5-3番人気で決着。三連単25,060円
06R 1-5-4番人気で決着。三連単9,640円
07R 6-5-4番人気で決着。三連単148,420円
08R 13-5-8番人気で決着。三連単1,411,780円
09R 3-6-9番人気で決着。三連単109,320円
10R 7-1-2番人気で決着。三連単37,480円
11R 6-2-9番人気で決着。三連単200,320円
12R 2-1-10番人気で決着。三連単25,290円
対象28レース中三連単5万越えが15レース。そのうち10万越えが11レースと、全体的に大荒れな日でした。
的中率特化のため1番人気推奨多めなので、こういう日は地獄ですね。。
根拠がないのに4番手な問題
荒れる日だったのは納得。仕方なし。問題はその先です。
PONYCHIPSでは最近、買い目に選んだ馬の推奨理由をレースページに表示するようにしました(対応したてなのでまだ表示されたりされてなかったりですが)。
AIが「なぜその馬を上位に置いたのか」を、データから日本語に翻訳して出す機能です。
対応してる中で、日曜にSとして提供した札幌12レース。推奨4番手の馬だけ理由が1つも表示されないという状態になっていました。その馬は10番人気。人気があるから上位に来たわけでもない。まじで謎。
理由が書けないのに、なぜ4番手なのか。ここが引っかかりました。
おいClaude、どうなってんだい!
PONYCHIPSには、AIの予測を分解して「どの要素がどれくらい効いたか」を見るツールがあります。これでその馬を調べたところ、こうなっていました。
odds_win(単勝オッズ) 寄与 -0.661
past_count(過去の出走回数) 寄与 +0.429 ← 最大のプラス
jockey_count(騎手の出走数) 寄与 +0.174
jockey_rank(騎手のランク) 寄与 +0.171
10番人気なのでオッズは大きなマイナス。それを打ち消していたのが「過去に25戦走っている」という事実でした。
たくさん走っているから強い、という理屈は、上のクラスならまだわかります。でも条件戦では、勝てないから走り続けているケースの方が多いはずです。走るほど強くなるなら地方馬最強理論が成立してしまう。
そして、もっと妙なものが目に入りました。jockey_count(騎手の出走回数)が 124,762 になっていたのです。この馬に乗っていたのは古川吉洋騎手ですが、実際の騎乗回数は1万2千回ほど。桁が一つ違います。レジェンドでさえ2万5千回少々なのに。。
騎手のランクが「逆」だと・・
同じレースの他の馬も調べてみて、はっきりしました。
| 馬 | 騎手ランク | AIへの寄与 |
|---|---|---|
| 2番人気の馬 | 1位(リーディング上位) | -1.151 |
| 4番人気の馬 | 2位 | -0.627 |
| 10番人気の馬 | 8位 | +0.171 |
まさかのトップジョッキーが乗っているほど評価が下がる。しかもこのマイナスはそのレースで最大の要素でした。
2番人気だったジュンツバメガエシがAI評価6番手まで落ちていた理由がこれです。
いやいやさすがにおかしい。。データを直接調べました。
騎手IDが空のデータ : 193,957件
全データ : 193,957件 ← 100%
騎手名の種類 : 1,303
騎手IDが1件も保存されていませんでした。嘘だろ・・
19万件が「1人の騎手」として集計されていた
AIの学習データを作るとき、騎手の成績は「騎手IDごとにグループ分けして集計」しています。ところがその騎手IDが全部空だったため、19万件すべてが1つのグループとして扱われていました。
おいClaude!
その結果、
- 騎手の出走回数 → 全騎手の合計(12万)が入る
- 騎手の勝率 → 全体の平均勝率になり、全馬ほぼ同じ値
- 騎手のランク → 同じ値を順位付けするので、実質的に意味のない数字
騎手に関する3つの要素が、まるごとノイズになっていたわけです。しかもAIは、そのノイズに「-1.15」という大きな重みを与えて予測していました。
ということで騎手情報がこれまでずっと壊れたまま使われており、原因はデータを取り込む処理で騎手のコードを拾い忘れていたことでした。なにやってんだい!
直して、全部やり直した
修正自体は数行で終了。1,303人分の成績が、これで正しく集計されるようになりました。
ただ、直したあとが大変でして。。AIを学習し直すと予測の傾向が変わるので、グレードとか買い方とかもろもろ見直す必要があります。
① グレードの基準を引き直し
新しいAIは以前より自信のある数字を出すようになりました。同じ基準のままだと、これまでなら見送っていたレースまで提供してしまいます。増えること自体はポジティブですが、提供多いとどうしても的中率下がるんですよねぇ。
ということで過去1,820レースで区間ごとの成績を測り直して、S・A・B・Cの線を引き直しました。
② 「混戦は見送る」を追加した
上位数頭の評価が接近しているレース(=AIから見て混戦)を調べたところ、面白いことがわかりました。
Bランクの混戦だと的中率81.2%、回収率74.6%
Cランクの混戦だと的中率89.2%、回収率95.5%
同じ混戦でも、ランクによって正反対だったんです。
ざっくりイメージとして、Bは実際のオッズでも1番人気が売れてて、でもAIは混戦評価。これだと1番人気は飛ぶかもしれないし、来ても払い戻しが安い。
一方Cは実際のオッズでも混戦でAI評価も混戦。Bより的中が高いのかはよくわからないけど、実際のオッズが混戦の分、単勝当たれば配当高いしワイドもそれなりに付くので回収率はBより高め。
そこでBの混戦だけ見送ることにしました。該当するレースには「上位数頭の評価が接近した混戦のため見送りました」と表示されます。基準は満たしてるんで当たる可能性もまあまあありますが、実際運用しててトータル負け傾向なのでこういうレースの提供はやめておきます。
③ 買い目をランクごとに変えた
以前「AとBに複勝を組み込む」という変更をしたのですが、AIが変わったので前提も変わりました。測り直した結果、こうなっています。
- A: 単勝400円 + 複勝300円 + ワイド3頭BOX — 本命が勝ち負けするタイプなので単複中心
- S・B・C: 単勝400円 + ワイド4頭BOX — Bは勝ち切るより3着内に来るタイプ、Cは混戦から配当を狙う
SはAIの変更前も変更後も問題なさそうなのでそのまま維持してます。
Bはワイド5頭BOXとか含めて検証しましたが、結局この単勝とワイドの組み合わせが一番的中率も回収率も良さげでした。
ということで調子の悪かった日で確認
理論上は改善したものの、本当かなぁ?なので、実際に成績の悪かった日で計算し直してみました。同じ日、同じレースを、新しいAIと新しい基準で判定してみました。頼むぞClaude..
8/2(的中率55.6%)→新AIだと88.9%
8/8(的中率58.3%)→新AIだと85.7%
そして先週の地獄、、
8/16(的中率35.7%)→新AIだと73.3%
倍以上の改善!!
もちろんこれは後から計算したシミュレーションで、実際のオッズのタイミングとは条件が違います。それでも、壊れたデータで学習していたAIと、正しいデータで学習したAIの差は本物だと思ってます。これでさすがに改善するはず・・・・
まとめ
日曜的中率36%に絶望していたものの、改善方法考えなきゃなー、これ続いたらまずいなーで止まってました。
風呂に入りながら思い付きで「予想提供画面に馬のイラスト出し分けて載せたら直感的にわかりやすくなるかも!あと重賞のブログでAIの根拠出せてるなら他のレースも出せばいいじゃん!」って浮かびました。改善より思い付きを優先して素材作ったり見せ方考えたり。。
思い付きの対応をするために選んだのがたまたま日曜にSランクで提供した札幌12レースでした。
そこでデザイン調整のためClaudeとごにょごにょしながらAIのコメントを表示してたら4番手推奨だけコメントないことに気づき。
なんでコメントないのかClaudeに聞いたら「強調する材料がないから」と。じゃあなんで推奨しとんねん!ってそこで偶然発見したのが今回のバグです。
結果的に的中率の改善対策も出来て良かったです。いろいろやってみるものですね。
サイトを出してから1ヵ月少々経ちましたが、このタイミングで拾えたのは大きかったかもです。
前のAIモデルが凄い悪いわけではなかったけど、知らないうちに意味わからんバグのせいで全体の数値を下げるところでした。
これで良くなるといいなぁ。あ、ぽにぃ。ってことでおしまい。
本記事の内容は機械学習モデルによる参考情報であり、的中を保証するものではありません。馬券の購入はご自身の判断でお願いします。(20歳未満の方は馬券を購入できません)