Friction River Software

  • お問い合わせ

CakePHP5入門【WebAPI編㉑】ナンバーズ3を予想⑤

A子

そういえばさ

ナンバーズ3って、三つの数字が全て異なる場合と、ダブルやトリプルがあるよね?

C菜

ダブルというのは、三つの数字の内、二つが同じやつですね~

例えば、112や575みたいなのです~

B美

トリプルは、三つの数字が全て同じ数字になるやつね

111や777って感じ…

A子

ダブルやトリプルの出現確率の理論値って、どうなるのかな?

これまで考えた予想アルゴリズムではダブルやトリプルをサポートしてないから、ちょっと気になっちゃって…

C菜

トリプルは簡単ですね~

000、111、222、333、444、555、666、777、888、999
という10通りしかありませんから、1000分の10で確率1%です~
(分母が1000なのは、000~999まで1000通りですからね~)

B美

ダブルだけど…
例えば「00」のダブルでは

・001~009までの9通り
・010~090までの9通り
・100~900までの9通り

なので、合計は27通り

A子

あぁ、それが10種類分あるってことか
(「00」~「99」まで)

…ってことは、ダブルの総数は27×10で270通り
確率は、1000分の270で27%ってことになるね

C菜

ですね~
三つの数字が全て異なる場合を「シングル」と呼ぶとすると…

 出現確率の理論値
シングル72%
ダブル27%
トリプル1%

…ってことでしょうか~

A子

うーん

ということは、4回に1回はダブルが出るってことになるね(確率的には…)

B美

そうとも限らないわよ

前回の結果に影響されることはない」ってのが基本的な考え方だから、シングルが10回以上連続することもあるわ
(抽選結果は「マルコフ性」を持つと考えられるからね)

A子

ん?

まるこふせい?

B美

マルコフ過程」とも言うけどね

未来の状態は過去の履歴に依存しない
…つまり、前回や前々回の抽選結果は、今回の抽選に影響を及ぼさないってことよ

C菜

え~?

それって「引っ張り」理論を全面否定しているってことでしょうか~?(苦笑)

B美

私の持論では「引っ張り」が生じているように見えるのは偶々たまたま

あ、でもそれが「引っ張り」を否定するものではないわ

A子

どういうことよ

B美

「予想の手掛かり」になっていることは確かだからね

理論的には無関係であっても、実績としては関係があるように見えていて、それが予想の一助になっている
ならば、それは実質的に「ある」と言っても良いんじゃないかと思うわけよ

A子

なるほどね

んじゃ、話を戻すけど、シングルが連続していてもダブルやトリプルの発生確率が向上するってことは無いんだよね?

C菜

パチンコ台と同じですね~

たとえ1000回転以上回していても、大当たり確率は向上しないってことです~
(例えば300分の1の確率で大当たりする台ならば、パチンコ玉がチャッカーを通過するたびに毎回300分の1の確率で抽選が行われるんですよね~)

B美

そういうこと
例えば、先端が白い棒を7本、赤い棒を3本入れた筒から1本を抜き出すとき、7割の確率で白い棒になるわよね

でも、抜き出された棒は毎回筒へと戻されるってわけ
(2回目以降であっても「白い棒を抜き出す確率は7割」ってこと)

A子

理論値としては、4回に1回はダブルになるはずだけど、毎回毎回72%の確率でシングルになるわけだから、何十回もシングルが連続する場合もあるってことか…

ダブル(トリプルも)の出現を予想するのは難しいってのが結論?

B美

そうなるわね

まぁ、確率は収束していくはずだから、理論値から乖離している場合は(理論値に近づくように)出現頻度が変わる可能性もあるけど…
(とは言っても、試行回数が7000回程度では全然収束しないけどね(苦笑))

C菜

ところで~

2026年7月16日時点での予想的中状況はどうなっているのでしょうか~?
(7月って23回の抽選がありますけど、半分の12回が終了したので~)

A子

こんな感じだね

的中確率の理論値としては33%だけど、実績値は50%だよ
(ただし、収支としてはマイナスだけどね(笑))

C菜

▲はマイナスという意味ですからね~

それにしても、予想順位を考えるのに「古いものを上位にする」って方法をとりましたけど、問題がありそうですね~

A子

そうなんだよ(苦笑)

ここまでの結果を見た限りでは、「出現頻度」のほうが揃っている印象が強いんだよね

B美

あと、パターンBの勝率が(パターンAやパターンCに比べて)低いわよね

スコアありの数字が5つのとき(パターンB)って、宝くじ(ナンバーズ3)を購入しないほうが良いかもしれない…

A子

まぁ、たった12回の結果で判断するのもなんだし、もうちょっとデータを蓄積しないとね
(少なくとも年末くらいまでは…)

B美

ただ、これだけは言えるわね

予想した50~60通りを全て購入する場合、的中確率(実績値)が80%くらいは必要だってこと
収支がプラスにならないからね)

C菜

ですね~

逆に言えば、いかに上位10位までを予想するかってことにもなるんですけど~



A子

さて、あれから二週間たって、ようやく7月31日までの結果が出揃ったね

C菜

抽選結果がダブルやトリプルになったため、はずれちゃったのが5回ありますね~

全23回の28%は6回なので、ほぼほぼ確率通りです~

A子

てか、ダメダメじゃん

特にパターンBの勝率…(苦笑)

C菜

でも、それってダブルやトリプルになったときの予想が全てパターンBだった(5回全て)だけで、それを除けば4勝4敗だったはずですよ~

B美

的中確率の理論値が31%で実績値が39%だから、この予想って(確率的には)若干の改善が見られているのは確かなんだけどね

まぁ、まだまだ実用には至っていないというのが結論だけど…(苦笑)

A子

あっ、そうだ
PDFファイルの格納場所ってさ、「webroot/pdf」じゃん?

その中をさらに「年月」で区分したほうが良いんじゃない?

C菜

2026年7月分は「webroot/pdf/202607」で、8月分は「webroot/pdf/202608」ということでしょうか~?

A子

そうそう、そんな感じ

あと、一覧表示についてもまずは「年月」メニューを表示して、そこから月ごとのファイル表示に遷移するの

B美

これからどんどんファイル数が増えていくわけだから、そうしたほうが良いかもね

それじゃ、コマンドクラスである「src/Command/Num3boxCommand.php」と、一覧表示のための「src/Controller/TopController.php」を修正してみなさい

A子

OK
まずは「Num3boxCommand.php」だけど、「execute」メソッドの下記の箇所を書き換えたよ

//格納ディレクトリ
$dir = WWW_ROOT."pdf".DS.date('Ym').DS;

あ、赤字部分が追加箇所ね

C菜

「TopController.php」については、前回作った「num3Pdf」メソッドをコメントアウトして、新たに「num3PdfDir」メソッドを作りました~

//コマンドクラスで生成されたPDFファイルのディレクトリ一覧を取得
public function num3PdfDir()
{
    //PDFファイルのディレクトリ一覧を取得
    $dirs = glob(WWW_ROOT.'pdf'.DS.'*', GLOB_ONLYDIR);

    //降順ソート
    rsort($dirs);

    $this->set(compact('dirs'));
}

A子

んじゃ、ファイル一覧を取得する「num3PdfFile」メソッドを書いてみよう
(ほとんど「num3Pdf」メソッドと一緒だけどね)

//コマンドクラスで生成されたPDFファイルのファイル一覧を取得
public function num3PdfFile($ym)
{
    $result = [];
    $pdfDir = WWW_ROOT.'pdf'.DS.$ym.DS;

    //PDFファイル取得
    $files = glob($pdfDir . '*.pdf');

    foreach ($files as $file) {
        $filename = basename($file);
        $base = pathinfo($filename, PATHINFO_FILENAME);
        $dateCode = substr($base, strlen('numbers3box_'));

        //日付とパターンを取得
        $year = (int)substr($dateCode, 0, 4);
        $month = (int)substr($dateCode, 4, 2);
        $day = (int)substr($dateCode, 6, 2);
        $pattern = substr($dateCode, 8, 1);
        $week = $this->SixSevenWeek::getSeven($year, $month, $day);

        array_push($result, [$year, $month, $day, $week['week_str_short'], $pattern, $ym.DS.$filename]);
    }

    //ファイル名の降順でソート
    array_multisort(array_column($result, 5), SORT_DESC, $result);

    $this->set(compact('result'));
}

C菜

対応するビューファイルですけど、こんな感じで作ってみました~




B美

あ、開発環境も本番環境もだけど、「webroot/pdf」の下にディレクトリを作ってから既存のPDFファイルを移動しておきなさいね

その際、ディレクトリのオーナーを間違えないように!
(「Webサーバ(www-data)」ではなく、一般ユーザだからね)

C菜

了解です~

ちなみに、下記がテスト結果ですよ~
(きちんと、ディレクトリ一覧のワンクッションが入ってます~)



A子

うん、バッチリだね

あとは予想データ(及びその結果)を蓄積していくだけかー

B美

はたしてどうなるかしらね
(実のところ、私もちょっぴり楽しみなのよね(苦笑))