地方競馬 ROI 検証プロジェクト
地方競馬の公式データと機械学習で、控除率を超えて ROI 100% を上回れるか—— それだけを確かめる検証プロジェクトです。
問い
競馬の馬券は、売上の一部(券種により約 20〜25%)が控除されたうえで払い戻されます。 つまり参加者全体では必ず負ける設計で、無作為に買い続けたときの回収率(ROI)は 100% を大きく下回ります。この控除という向かい風の中で、 公式データと機械学習だけを使って、長期の ROI 100% を上回ることはできるのか。 それがこのプロジェクトの問いです。
- データ源: 地方競馬全国協会(NAR)が公式に配布しているデータ (データダウンロード機能で提供される CSV)だけを使います。非公式なスクレイピングや 有料の外部データは使っていません。
- 実際には賭けません: 過去データに対するオフライン検証(バックテスト)の 記録であり、実際の投票は行っていません。
手法の概要
詳細な特徴量やモデルの中身は公開していませんが、検証の枠組みは次のとおりです。
時系列 walk-forward 検証
「過去のデータだけで学習し、その先の 1 年で成績を測る」を年ごとに前進させながら 繰り返します(評価は 2016 年以降)。ランダムにデータを分ける方式は、未来の情報が 学習に混ざるため使いません。
リーク(未来情報の混入)防止
学習に使う値は、必ず「そのレースの時点で既に分かっていた値」に限定します(as-of 原則)。 さらに、学習のたびにリーク検査一式(学習と評価の時間分離、結果由来の列の混入、 単独で当たりすぎる特徴の検出など)を全て実行し、1 つでも落ちたら検証を進めない 運用にしています。
判定の物差し
モデルの ROI は単独では評価せず、次の 2 つと比べます。
- 人気順ベースライン(B1): 単勝オッズの人気順に機械的に買った場合。 「モデルは人気順以上の何かを学べているか」を測ります。
- 控除率の基準線: 無作為に買い続けた場合の期待 ROI(券種ごとに約 75〜80%)。 「そもそも偶然でもこのくらいにはなる」という下敷きです。
また ROI の点推定だけでは偶然と区別できないため、レース単位のブートストラップで 95% 信頼区間(CI)を出し、「B1 を上回り、かつ 95%CI の下限が 100% を超える」 ときだけ「価値あり」と判定します。
現時点の結果
成績データを読み込んでいます…
検証期間は評価対象の全レース(約 15 万レース)。本命モデルは毎レース、 予測の上位に 1 点だけ買い続けた想定です。オッズは確定オッズを使っているため実運用より 有利に出やすく、手数料などは含まない理論値です。数値は検証記録から自動転記され、 検証が進めば更新されます。
買うレースを選ぶ実験
本命は毎レース買います。いま試しているのは、予測1位が 2〜5番人気のレースだけ買う戦略です。買う馬は変えていません。 帯は事前に固定しており、後からいちばん良かった帯を選んではいません。
学習が終わり公開記録に載ると、下の「実験の記録」に
実験名 pop-band-2-5 の行が出ます。その行のレース数は全期間より少なくなります。
同じレースを人気順(B1)で買った ROI に勝って初めて、モデルの寄与と言えます。
実験の記録
本命モデル(champion)に対して、改善候補(challenger)を 1 実験ずつ試しています。 採否は「同一条件で champion の ROI を上回り、かつ人気順ベースライン(B1)も上回る」 ことを機械的に判定して決めます。
記録を読み込んでいます…
免責
本プロジェクトは検証記録の公開であり、投票(馬券の購入)その他の行為を 推奨するものではありません。掲載している数値は過去データに対するオフライン検証の理論値で、 将来の結果を保証しません。個々のレースの予想は公開していません。