← ブログ一覧

ミニロト「当たりやすい予測」を20手法×1188回で実験した結果、ロト6と真逆の答えが出た

Overdue・冷えスコア・頻度Z・ホット追いなど20種類の予測アルゴリズムをウォークフォワードバックテストで徹底比較。なぜミニロトだけロト6と逆の結論になるのか、確率論と実験結果で解説。


登場人物

  • リナ社長 … 高校生なのに会社経営するやり手ギャル。テックにも強くてAI活用が得意。
  • タクヤ … 入社3年目の男性社員。真面目で少しだけコードが書ける。

タクヤ「社長、前にミニロトの予測機能を実装しましたよね。あのアルゴリズム、ちゃんと効いてるんですか?」

リナ社長「鋭いじゃん。実はあたしも気になってたんだよね。“Overdue+冷えスコア”って組み合わせ、ロト6で効果あったやつをそのままミニロトに使ってたんだけど——ほんとに有効かって検証してなかった」

タクヤ「……使ってたんですか、確認なしで」

リナ社長「そこは反省してる(キリッ)。で、ちゃんと調べた結果がやばかったから聞いて」


バックテストって何?

タクヤ「バックテストって競馬の予想検証みたいな感じですか?」

リナ社長「ほぼそれ。“過去のデータで予測して、正解と照合する”ってやつ。ただし一個だけルールがある——ウォークフォワード方式ってやつ」

タクヤ「ウォークフォワード?」

リナ社長「たとえば第500回を予測するときは第499回までのデータしか使わない。第501回を予測するときは第500回までのデータしか使わない。未来のデータを覗き見しない、ってルール」

タクヤ「なるほど。それをやらないと後付けで”当たってた”って言えちゃいますよね」

リナ社長「そゆこと。後出しジャンケンにならないための工夫ね」

今回は 第201回〜第1388回の1188回分 を使ってバックテストした。 プールサイズは10(1〜31の中から10個に絞って予測)、ランダムで選んだときの期待的中数は 1.613個/回


試した20種類の手法

タクヤ「どんな手法を試したんですか?」

リナ社長「20種類。ざっくり分けるとこんな感じ」

カテゴリ手法の考え方
Hot系最近よく出てる番号を追いかける
Cold系最近出ていない番号を狙う
Overdue「平均間隔を超えて出ていない=そろそろ来る」
FreqZ長期的に出現率が高い番号を信頼する
Bayesian全体の出現率をpriorとして直近データで更新
Comeback個人最長記録に近いほど”追い込まれてる”番号
Heartbeat最も規則正しいリズムで出る番号

タクヤ「Heartbeatとかめちゃくちゃ詩的な名前ですね」

リナ社長「“時計みたいに規則正しく出る番号”ってイメージ。統計的には出現間隔のCV(変動係数)が低い番号のこと」


結果:ロト6と真逆の答えが出た

タクヤ「で、結果はどうだったんですか」

リナ社長「見て。これが1188回バックテストのランキング」

手法平均的中/回ランダム比
🥇 1FreqZ80% + Hot20%1.679+0.066
🥈 2FreqZ70% + Hot30%1.664+0.051
3FreqZ 全期間のみ1.653+0.040
4Hot 直近20回1.624+0.011
5ランダム(基準)1.617± 0
6Bayesian β=0.51.613±0.000
7Cold301.605−0.008
10B+C 50:50(旧アルゴリズム)1.602−0.011
20TripleBlend(3要素混合)1.572−0.041

タクヤ「……旧アルゴリズム、ランダムより悪いじゃないですか」

リナ社長「うん。ランダム以下(笑)。しかもロト6では”FreqZ”が最下位だったのに、ミニロトでは堂々の1位。真逆になった」

タクヤ「え、なんで真逆になるんですか?」


なぜ真逆になるのか

リナ社長「これが今回いちばん面白かったところ。比べてみると見えてくる」

ミニロトロト6
選択範囲1〜311〜43
本数字5個6個
出現率(1番号あたり)16.1%14.0%
平均出現間隔約6.2回約7.2回

タクヤ「ミニロトのほうが番号の”回転”が速いんですね」

リナ社長「そゆこと。回転が速いと何が起きるかっていうと、もし抽選機に微妙なクセがあったとしても——そのクセが長期データに蓄積されやすくなる。だから”歴史的によく出てる番号”の信頼度が上がる」

タクヤ「逆にロト6は回転が遅いから、“最近出ていない番号はそろそろ来る”という均衡回帰の方が効く……?」

リナ社長「そういう解釈ができる。まあ抽選は完全ランダムが前提だから”クセ”は理論上ないんだけど、統計的にはそういうシグナルが残ってたってことだね」

タクヤ「なるほど。“なぜ当たるのか”は分からないけど、“何が当たりやすいか”は実験で分かる——みたいな」

リナ社長「それめっちゃいい言い方。そういうこと」


FreqZ って何をやってるの?

タクヤ「FreqZってよく分からないんですけど、Hot(最近よく出てる)と何が違うんですか?」

リナ社長「Hotは”直近50回”みたいな短い窓だけど、FreqZは全1000回以上の全データを使う。“この番号、歴史的に平均より何回多く出てるか”を計算するやつ」

数式で書くとこう:

FreqZ(n) = 実際の出現回数 − 期待出現回数
         = freq[n] − (総回数 × 5 / 31)

タクヤ「期待値より多く出てる番号を選ぶってことですか。でも……そういう番号って今後は出なくなりませんか?“平均に戻る”みたいな」

リナ社長「それが!戻らなかったっていうのが1188回の検証結果なんだよね。少なくともミニロトの現時点のデータでは、多く出てきた番号はその後も多く出てきてる傾向があった」

タクヤ「……抽選機のクセ説、割と信じてしまいそうになりますね」

リナ社長「あくまでお遊びの統計だけどね(笑)」


窓サイズの検証結果

タクヤ「FreqZの”全期間”vs”直近N回”はどうでしたか?」

リナ社長「試した。こんな感じ」

FreqZの時間窓平均的中ランダム比
全期間(全1000回以上)1.653+0.040
直近500回1.648+0.035
直近200回1.651+0.038
直近100回1.628+0.015
直近50回1.617+0.004

タクヤ「窓が短くなるほど弱くなるんですね。全期間が最強だった」

リナ社長「長期のバイアス(クセ)を拾うには、それだけ長いデータが必要ってこと。50回くらいじゃランダムとほぼ変わらない」


新アルゴリズムに更新した

タクヤ「結果が分かったなら、予測ロジックも直したんですか?」

リナ社長「もちろん。update_miniloto.py のアルゴリズムを切り替えた」

# 旧アルゴリズム(ランダム比 −0.011)
scores = { n: 0.50 * overdue[n] + 0.50 * cold30[n] }

# 新アルゴリズム(ランダム比 +0.066)
scores = { n: 0.80 * freqz_alltime[n] + 0.20 * hot50[n] }

タクヤ「+0.066って、具体的にどれくらいの差ですか?」

リナ社長「年間約50回予測するとして、合計で 約3.3個分 の改善。お遊びなら十分大きい差かな」

タクヤ「1回当たり0.066個……地味に聞こえますけど、積み重ねると効いてくるんですね」


まとめ:ゲームと統計の教訓

リナ社長「今回の実験で分かったこと、まとめるとこれ」

  1. 同じ”ロト系”でも、数字の範囲・個数が違えば有効な手法が変わる
  2. FreqZ(全期間頻度の偏り)はミニロトに有効、ロト6には逆効果
  3. “なんとなく良さそう”でアルゴリズム決めずに、実験で確かめる
  4. ウォークフォワードバックテストで後出しジャンケンを防ぐ

タクヤ「4番が大事そうですね。普通に検証しようとするとズルできちゃいますから」

リナ社長「そゆこと。データ分析って”確かめ方”が間違ってると全部無駄になるからね」

タクヤ「勉強になりました。……で、次回の予測はなんですか?」

リナ社長「このサイトのミニロトページに載ってるから見て(笑)。外れても責任は取らないよ?」

タクヤ「それは分かってます(笑)」


バックテストスクリプト(scripts/backtest_miniloto.py)の公開は後日予定しています。

コメント