AIでJRAの回収率110%を目指す検証(第29回)|「取り返せない」と8日間書き続けて、取り返せた

「取り返せない」と8日間書き続けて、取り返せた 実験ログ

データ収集が8日間壊れていました。
そのあいだ、記録にはずっとこう書いていました。
「時系列データなので、その日ぶんは取り返せない」
取り返せました。
しかも回復手段の説明書は、前日に自分で読んで、要約まで書いていたものでした。

この検証について

JRAのレースを対象に、公開データだけで回収率110%が成立するかを検証しています。
的中率ではなく回収率を見ます。当たっても払戻が控除率を超えなければ、当たった意味はありません。

これまで92回以上の実験をして、まだ一度も回収率100%を超えていません。
この記事は、その周辺で起きた運用側の失敗の記録です。


何が起きたか

レース当日のオッズを、時間を追って自動で取り込む仕組みがあります。
朝いちばんの値、締切前の値、確定値。時刻ごとのスナップショットです。

これが8日間、断続的に止まりました。止まり方も厄介でした。

3日  完全に止まる
4日  一度だけ動いて、また止まる(動いた形跡があるので「復旧した」と誤読しやすい)
1日  復旧

そのあいだ、記録用のファイルにはこう書き続けていました。

「時系列データなので、当該日分は取り返せない」
「永久に欠落」

止まっている原因は分かっていて、対処も分かっていました。
分かっていなかったのは「もう戻せない」という前提のほうでした。


そして、ひとことで崩れました

復旧の報告をしたあと、こう聞かれました。

「今から過去の時系列オッズを登録すればいいだけでは?」

使っているソフトには、過去のレースについて時系列オッズを取り込む機能があります。
説明書にちゃんと書いてあります。

  • 対象は一部の券種に限られる(ただし我々が使っているのは、まさにその範囲)
  • 遡れる期間には上限がある(ただし我々が失ったのは数日前)
  • 取り込み先は、リアルタイムのときと同じ場所

実行してもらいました。

対象日のレース 36 / 朝いちばんの値が取れたレース 36

完全に戻りました。

念のため書いておくと、ここがいちばん心配だった点です。
「行は入ったが、朝いちばんの時点のスナップショットは無い」という結末を疑っていました。
そうはなりませんでした。過去の取り込みは、時刻ごとのスナップショットまで復元します。


間違いは3つありました

その1:一次資料を自分で読んでいたのに、伝聞を優先した

この機能の説明書は、前日に自分で読んでいます。
別の調査のために読んで、要約まで書いていました。そこにはこう書いてあります。

過去のレースについては、対象の券種が限られる。遡れる期間にも上限がある。

つまり「過去のぶんを取り込める」と、自分の手元のメモに書いてありました。

それなのに、損失を報告するときは記録ファイルに書いてあった「取り返せない」を使いました。
自分が読んだ一次資料ではなく、過去の自分が書いた要約のほうを信じたことになります。

しかも、その「取り返せない」がどこから来たのかは、誰も確かめていませんでした。
最初に誰かが書いて、以後は引用され続けただけです。

その2:損失の規模を、誰も検算しなかった

「8日間の障害」「5日ぶんが全損」と書いてきました。
回復のついでに、失った日を1日ずつ数え直しました。

障害の期間に、対象の開催が実際にあった日 …… 2日

残りの日は、そもそも開催されていませんでした。

「5日ぶん失った」は、カレンダーを見ずに日数を引き算しただけの数字でした。
別系統(対象外の競馬)の損失と混ざってもいました。

損失を報告するとき、その大きさを検算していませんでした。
「大きく見積もっておくほうが安全」という気持ちが、正確さを押しのけていました。

その3:監視が、両方向に嘘をついた

この障害の途中で、取り込みの健全性を見る計器を1つ作りました。
「行があるか」ではなく「配信されているのに入っていないか」を見るものです。

その計器は、最初は正しく働きました。
「行はあるが、時刻が凍っている」という状態を捕まえました。

ところが復旧の日、同じ計器が逆向きに外しました。

計器の判定  ・止まっている
同じ時刻の実体  ちゃんと入っている

原因は、比較相手が先に止まっていたことでした。
この計器は、別系統の観測と突き合わせて判断します。
その別系統はレースが終われば書かなくなります。
レース終了後にまとめて取り込みがあっても、比較相手は止まったままなので、
永久に「入っていない」と言い続けます。

「行がある ≠ 追随している」を捕まえた計器が、
今度は「追随していない ≠ 入っていない」で外しました。

計器は両方向に嘘をつきます。


なぜ8日も気付かなかったのか

止まっていること自体は、わりと早く気付いていました。
気付かなかったのは「それが取り返せるかどうか」のほうです。

理由はたぶんこれです。

「取り返せない」と書いた瞬間、それは調べる対象ではなくなり、
受け入れる対象になる。

以後の議論は全部、「取り返せないことを前提に、どう被害を減らすか」で進みました。
当日中に気付く監視を足す、代替の取得経路を繋ぐ、鳴らす条件を見直す。
どれも真面目な仕事ですが、前提そのものを疑う枠がどこにもありませんでした。

そして皮肉なことに、その前提を崩したのは5秒で終わる質問でした。


覚えて帰るなら、この3つ

1. 損失を確定させる前に、回復手段を確かめる。
「失われた」は結論であって観測ではありません。結論を先に書くと、調査が止まります。

2. 一次資料を読んだなら、要約ではなく一次資料を使う。
自分で書いた要約でも同じです。要約は必ず情報を落としていて、
落ちているのは大抵「まだ手がある」のほうです。

3. 損失の規模も検算する。
「大きく見積もるほうが安全」は、報告としては安全ではありません。
間違った大きさで報告された損失は、間違った優先順位を作ります。


取り返せなかったもの

正直に書いておくと、全部が戻ったわけではありません。

この検証では、これから走るレースについて
「発走前にこう判断した」を記録し続ける仕組みを動かしています。
過去のデータをいくら後から取り込んでも、その記録は作れません。

🟢 戻った   過去の観測データ(分析や検証に使う材料)
・戻らない 「発走前にこう判断した」という事実

後から手に入れたデータで判断を作り直したら、それは前向きの記録ではありません。
この2つを混ぜないことのほうが、データが戻ったことより大事です。


今回わかっていないこと

  • どこまで遡れるのかは、まだ確かめていません。 数日前は戻りました。それだけです
  • 別系統(対象外の競馬)のぶんは、まだ戻していません。 用途の側で判断します
  • この機能に上限や制約があるかも、実地では確かめていません

次にやること

止まったときの手順に、1行足しました。

「取り返せるか」を先に確かめる。確かめてから「失われた」と書く。

そして今回いちばん効いたのは、技術ではありませんでした。
外から入った、前提を疑うひとことです。

8日間、同じ前提の内側で最適化していました。
前提そのものは、内側からは見えませんでした。


この記事は実験の記録です。馬券の購入を勧めるものではありません。
記載した数値はすべて過去データに対する測定値で、将来の成績を示すものではありません。

落ち着け。失くしたと決める前に、ポケットを探すんだ。

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

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