競馬AIのバックテストで良いROIが出ても、それだけで実運用に進むのは危険です。購入数・最大ドローダウン・最大連敗・年別ROI・validationとtestの差をあわせて確認し、事前に決めた採用基準で判断する必要があります。

この記事では、シリーズ第4回として、test期間でROI 116.1%(損益+12,910円)が出た戦略を採用しなかった理由と、以前掲げていたROI 159.7%を取り下げた経緯をもとに、バックテスト結果の読み方をまとめます。

扱う数字は第3回のモデルと戦略を使った仮想シミュレーションです。10分前用として保存されたオッズCSVで候補を選び、確定した複勝払戻で精算した1点100円固定の計算で、実際の収益ではありません。

年別ROIと採用ゲート

この記事の結論

  • ROI 116.1%の戦略でも、直近の2023年がROI 96.1%で100%を下回ったため採用しなかった。
  • 的中率が最も高い「複勝1番人気」でもROIは82.3%。的中率が高い=儲かる、ではない。
  • validationとtestの片方だけで良い戦略は、期間との偶然の相性を疑う。
  • 採用基準(採用ゲート)は数字を見る前に決め、結果を見てから緩めない。
  • 再現できなかったROI 159.7%は取り下げた。

バックテスト結果の比較表(test:2022〜2023年)

最良の戦略だけでなく、比較対象やベースラインも同じ表に並べます。

モデル × 戦略test購入数的中率ROI損益最大DD最大連敗
10分前オッズあり × 3条件AND(複勝FUK 1.5–8.0)80353.5%116.1%+12,910円-4,510円7
非オッズ × 3条件AND(単勝TAN 3–30)88352.1%111.7%+10,340円-2,790円10
10分前オッズあり × EV(複勝期待値)3,07835.9%101.0%+3,070円-7,620円15
複勝1番人気ベースライン4,75162.3%82.3%-84,020円-84,130円9

複勝1番人気を毎レース買うと、的中率は62.3%で最も高いのにROIは82.3%、損益は-84,020円です。低オッズに多く賭けると、当たる回数が多くても収支は悪化します。

チェック1:validationとtestのROIを並べる

戦略validation ROI(2021年)test ROI(2022〜2023年)読み方
10分前 × 3条件AND(複勝FUK)105.5%116.1%両方で100%超。ただし直近の年が落ちている
非オッズ × 3条件AND(単勝TAN)93.5%111.7%testだけ良い。採用の根拠にならない
非オッズ × 3条件AND(複勝FUK)120.1%99.7%最後の期間で100%を割った

両方の期間で100%を超えたのは一番上の戦略だけでした。

チェック2:年別ROIで直近の成績を見る

年購入数ROI損益
2022年489128.9%+14,130円
2023年31496.1%-1,220円

合計+12,910円の中身は「2022年に大きく勝ち、2023年は少し負けた」でした。実運用で相手にするのは2023年の先の未来です。直近で100%を下回っている以上、合計がプラスでも採用できないと判断しました。

チェック3:事前に決めた採用ゲートに照らす

採用条件最良の戦略
500点以上満たす(803点)
ROI 105%以上満たす(116.1%)
直近の期間が大きく崩れていない満たさない(2023年 96.1%)

基準を先に決めておくのは、良い結果を見てから「これくらいなら」と基準を緩めないためです。合計がプラスなのを見て迷いはしましたが、基準は曲げませんでした。

ROI 159.7%を取り下げた理由(再現しなかった)

以前はROI 159.7%を掲げていましたが、現在は使っていません。調べ直すと、古い評価には次の問題が含まれていた可能性がありました。

  • 評価した期間が現在と違う
  • 壊れた rank 列で払戻を参照していた
  • 誤って結合したオッズを使っていた(第2回参照)

一貫したデータ分割、正しい goal_num、正しい結合でやり直すと、159.7%は再現しませんでした。再現できない数字を残しておくと、後で自分を混乱させます。

バックテスト指標の意味と読み方

指標意味注意点
ROI総払戻 ÷ 総投資。116.1%は80,300円が93,210円になったという意味購入数が少ないと偶然の影響が大きい
最大ドローダウン(-4,510円)途中で経験した累積損益の最大の落ち込み最後にプラスでも、途中の落ち込みに耐えられるかは別問題
最大連敗(7)連続で外れた最大回数「7回外れても次で取り返せる」意味ではない。負けたら賭け金を増やすルールは入れていない
的中率当たった割合オッズが低ければ高くても損をする

今後:条件を固定したまま未来のデータで試す

次にやるのはしきい値の微調整ではなく、条件を固定したまま、これから先のデータで疑似運用することです。ROIに加え、時点付きオッズの取得率、候補になった割合、見送り理由、競馬場別・月別の損益を記録し、固定した戦略が未来のデータでも同じ品質で動くかを確認します(この記事の時点では未実施の計画です)。

まとめ:バックテスト結果を見るときのチェックリスト

  • 比較対象・ベースラインと同じ表で見ているか
  • 購入数・最大ドローダウン・最大連敗を確認したか
  • validationとtestの両方で基準を満たしているか
  • 年別に分けて、直近の期間が崩れていないか
  • 採用基準を数字を見る前に決めていたか
  • その数字は、正しいデータで再現できるか

この記事の数字を参考にする場合は、2013〜2020年で学習し、2021年だけで条件を決め、2022〜2023年に固定して適用した、という手順とデータの時点も一緒に確認してください。手順が違えば、同じLightGBMでもまったく別の評価になります。

注意:本結果は過去データ上の固定額シミュレーションです。利益や的中を保証するものではなく、馬券の購入を勧めるものでもありません。

集計の根拠と追試時の注意

2026年10月15日に、保存済みの honest_strategy_comparison.csv と honest_yearly_with_10min_3cond_FUK.csv を照合しました。803点×100円=80,300円、払戻93,210円、差額12,910円、回収率116.077%という算術は一致します。比較表の集計CSVから、回収率と損益を計算し直せます。CSVの roi は割合で、1.16077が約116.1%です。

元の評価処理は evaluate_current_strategy_honest.py、記録された実行引数は --min-bets 200 です。この200はvalidationで条件選択に必要な最低件数で、運用判断の500点とは別です。学習器はLightGBM、乱数シード37、450本の木、学習率0.035です。validation内をレース単位のランダムな半分に分け、校正と条件選択に使っています。

  • 今回行ったのはコードと保存済み集計の照合です。元データからの再学習・全バックテスト再実行ではありません。公開CSVは集計の算術確認用で、元データ一式の代わりにはなりません。
  • 過去の評価コードでは取得時刻が8〜12分以内かを検査していません。列名だけで購入可能時点を証明することはできません。
  • 3条件ANDは順位3位以内・正規化スコア・オッズ帯です。レース内で最大3頭になる条件はありますが、この集計には日次購入上限や日次損失停止を適用していません。
  • 掲載した最大ドローダウンは保存済み集計値です。コードは累積損益の先頭に開始資産0を追加せず、日付だけで並べています。初回損失や同日内の順序に依存するため、運用資金を決める前に時刻順と開始資産を含めて再計算する必要があります。

以上の制約から、この表は過去の比較実験として扱います。実際の売買可能性や最新モデルの性能を保証する結果ではありません。