CakePHP5入門【WebAPI編㉒】ナンバーズ3を予想⑥
A子
過去の分、約7000回分の結果をまとめてみようよ
C菜
A子
あ、パターン別に統計を取るのも良いかもね
(パターンAからパターンCまで)
B美
ついでに、パターン別のスコア的中状況も取得してみてはどうかしら?
C菜
定量的に根拠を示すのは良いと思います~
A子
それじゃ、検証用コードだから「src/Controller/VerificationController.php」を使おう
この中に新たなメソッドを作れば良いね
C菜
|
//パターン別スコア検証
public function patternAnalyze() { set_time_limit(0); //numbersテーブルを検索(「実施回」の昇順) $numbers = $this->Numbers->find()->order(['lottery_time' => 'asc']); $numbers_array = $numbers->toArray(); $result1 = [ //正解が[][0]…0個,[][1]…1個,[][2]…2個,[][3]…3個,[][4]…合計 [0, 0, 0, 0, 0], //パターンA(スコア有り4つ) [0, 0, 0, 0, 0], //パターンB(スコア有り5つ) [0, 0, 0, 0, 0], //パターンC(スコア有り6つ) [0, 0, 0, 0, 0] //その他 ]; $result2 = [ //[][0]…シングル,[][1]…ダブル,[][2]…トリプル,[][3]…合計 [0, 0, 0, 0], //パターンA(スコア有り4つ) [0, 0, 0, 0], //パターンB(スコア有り5つ) [0, 0, 0, 0], //パターンC(スコア有り6つ) [0, 0, 0, 0] //その他 ]; //全件数分、ループを回す foreach ($numbers as $idx => $val) { //最初の4件はとばす if ($idx < 4) continue; //この回の結果を初期化 $record = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; //フラグ配列 $pre1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; //1回前に出現しているか(出現した場合「1」) $pre2 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; //2回前に出現しているか(出現した場合「1」) $pre3 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; //3回前に出現しているか(出現した場合「1」) //1回前 $num3_place1 = $numbers_array[$idx - 1]->num3_place1; $num3_place10 = $numbers_array[$idx - 1]->num3_place10; $num3_place100 = $numbers_array[$idx - 1]->num3_place100; $num3_array = [$num3_place100, $num3_place10, $num3_place1]; $num3_array = array_unique($num3_array); //重複排除 foreach ($num3_array as $num) { $record[$num] += 3; $pre1[$num] = 1; } //2回前 $num3_place1 = $numbers_array[$idx - 2]->num3_place1; $num3_place10 = $numbers_array[$idx - 2]->num3_place10; $num3_place100 = $numbers_array[$idx - 2]->num3_place100; $num3_array = [$num3_place100, $num3_place10, $num3_place1]; $num3_array = array_unique($num3_array); //重複排除 foreach ($num3_array as $num) { $record[$num] += 3; $pre2[$num] = 1; } //3回前 $num3_place1 = $numbers_array[$idx - 3]->num3_place1; $num3_place10 = $numbers_array[$idx - 3]->num3_place10; $num3_place100 = $numbers_array[$idx - 3]->num3_place100; $num3_array = [$num3_place100, $num3_place10, $num3_place1]; $num3_array = array_unique($num3_array); //重複排除 foreach ($num3_array as $num) { if ($pre1[$num] == 1 && $pre2[$num] == 1) { //1回前と2回前の両方に出現している場合、何もしない } elseif ($pre1[$num] == 1 || $pre2[$num] == 1) { //1回前と2回前のどちらかに出現している場合、3回目にも出現していれば加点 $record[$num] += 2; $pre3[$num] = 1; } } //4回前 $num3_place1 = $numbers_array[$idx - 4]->num3_place1; $num3_place10 = $numbers_array[$idx - 4]->num3_place10; $num3_place100 = $numbers_array[$idx - 4]->num3_place100; $num3_array = [$num3_place100, $num3_place10, $num3_place1]; $num3_array = array_unique($num3_array); //重複排除 foreach ($num3_array as $num) { if ($pre1[$num] == 0 && $pre2[$num] == 1 && $pre3[$num] == 0) { //2回前だけに出現している場合、4回目を見る $record[$num] += 1; } } //各数字のスコアを判定 $scoreMore = []; //スコア1以上 foreach ($record as $num => $value) { if ($value > 0) { array_push($scoreMore, $num); } } $scoreMoreCount = count($scoreMore); //この回の当選番号 $num3_place1 = $val->num3_place1; $num3_place10 = $val->num3_place10; $num3_place100 = $val->num3_place100; $num3_array = [$num3_place100, $num3_place10, $num3_place1]; $num3_array = array_unique($num3_array); //重複排除 $num3_array_count = count($num3_array); //パターン別シングル・ダブル・トリプルの個数 if ($scoreMoreCount >= 4 && $scoreMoreCount <= 6) { $pat = $scoreMoreCount - 4; } else { $pat = 3; } if ($num3_array_count == 3) { $type = 0; } elseif ($num3_array_count == 2) { $type = 1; } elseif ($num3_array_count == 1) { $type = 2; } $result2[$pat][$type]++; //パターン別正解個数(ダブルやトリプルは除外) if ($type == 0) { $hit = 0; foreach ($num3_array as $value) { if (in_array($value, $scoreMore)) { $hit++; } } $result1[$pat][$hit]++; } } //合計計算 for ($i = 0; $i < 4; $i++) { $result1[$i][4] = $result1[$i][0] + $result1[$i][1] + $result1[$i][2] + $result1[$i][3]; } for ($i = 0; $i < 4; $i++) { $result2[$i][3] = $result2[$i][0] + $result2[$i][1] + $result2[$i][2]; } $this->set(compact('result1', 'result2')); } |
「$result1」がスコア的中状況で、「$result2」がダブルやトリプルの数です~
(どちらもパターン別で取得してますよ~)
B美
(実行してみないと分からないけど)多分、大丈夫そうよ
A子
あ、見栄えは考慮してないよ
(あくまでも検証用だからね)
B美
| https://friction-river.jp/numapp/verification/pattern_analyze |
ちなみに、下記は2026年7月31日(第7039回)までの集計結果よ
(「パターン別【スコア的中】個数」については、シングルのみの集計)
C菜
あと、パターンごとの違いは見られませんね~
(2026年7月については、ダブル・トリプルが全てパターンBでしたけど~)
A子
スコア的中個数のパターンBって、「正解1個」と「正解2個」の割合が拮抗してるじゃん
(どっちも42%)
C菜
パターンBのケースは「予想不能パターン(宝くじを購入しない)」にしたほうが良いかもです~
B美
こうして数字として見ると説得力があるわよね
A子
(パターンBの占める割合が大きいから…)
B美
0.72×0.5で0.36…つまり、36%の予想的中確率になるわけよ
C菜
それを予想と言えるのでしょうか~
A子
意味ないじゃん(苦笑)
B美
パターンAとパターンCはどちらもボックス値として60通りの予想になるけど、重要なのはその全てを購入するのは現実的じゃない…ってことなの
(宝くじ購入用のマークシートを塗りつぶしていくのも大変だし…(苦笑))
要するに、予想上位の限られた個数のみを購入すればどうか…ってこと
C菜
(確率的に)3回に1回は的中する(60通りの中に当選番号が存在する)わけですから、そのときの購入口数を少なくした状態で当てることができれば、十分に利益が出るはずです~
A子
1回当たり2000円分を購入して3回に1回当てられれば、6000円の元手で1~2万円をゲットできるってことになるね
(十分に黒字だよ)
C菜
ただ、順位付けの方法ですけど、前回の「出現時期の古い順」ではうまくいかなそうですよね~
(2026年7月の結果を見ると…)
どうしましょう~?
B美
A子
B美
C菜
A子
前回、7月分を集計した結果って赤字だったじゃん?
これをパターンAとCのみに限定して、かつ予想上位の10通りだけ購入した場合をシミュレートしてみたよ
すると、わずかだけど黒字になってるんだよね
C菜
予想の上位10通りだけを購入した場合ですけど~
・パターンA・B・C全て
・パターンA及びパターンCのみ(パターンBを除外)
のどちらも黒字になりましたよ~
A子
B美
A子
まったく頭の良い人間はこれだから…(苦笑)
C菜
年末くらいまでは結果を集計してみないと、分からないと思いますよ~
B美
A子
何だっけ?
C菜
もっとも、8月については現状のやり方(出現時期の古い順)で十分でしたけどね~
・8月5日…1位
・8月26日…9位
・8月27日…10位
で、的中してますし~
B美
とりあえずは、もう少し様子を見ましょうか
A子
結果が伴っているものをわざわざ変えることもないし…(苦笑)




