こんな記事を見かけました。
この件、ブックマークコメントなど見ていると、いまいち問題点が理解されていないのか、あるいは分かってて揶揄しているのか、ちょっとずれた責め方をしている人が何人か見受けられました。
恐らく、分かっていてネタで言っている人も多いとは思うのですが、今回のtotoBIGの問題点は、「出目操作」とか「イカサマ」といったものでは恐らくありません。当然、「奇跡的な確率」といったものでもありませんし、totoは「奇跡的な確率で偶然一致しただけだよ」とは言っていません。
じゃあ何かというと、多分バグというか、仕様がアホだった問題、だと思います。もしかすると、そこと景表法辺りが絡むのかも知れません。
スポーツくじ自体に興味はありませんし、totoをかばうつもりもないのですが、ちょっと上記のような話を見ていて、今回の問題をなるべく分かりやすく解説してみたくなりました。
以下の文章は、「疑似乱数」とか「PRNG」とか「ランダムシード」といったものについて既にご存知の方には、時間の浪費となるリスクが高いテキストです。そういった方にはブラウザの×ボタンを押すことをお勧めいたします。多分右上の方にあると思います。
〇そもそもどんな問題なの?
今回の件、そもそもの発端は、「ランダムな筈のtotoBIGくじが、2回購入した内の5口まで完全一致した」ということのようです。
totoBIGはサッカーの試合の勝敗を当てるくじですね。
もしこれが偶然の一致だとすると、確率は0.0000000000000000000000000000001%以下だそうで。下記はねとらぼさん。
これはこれでだいぶ煽った書き方でして、運営は別に「全くの偶然」とは言ってないんですが、まあそれは後述します。
で、こんなことが偶然に起こる訳がない!ランダムな筈じゃないのか!?これは不正な操作の証跡ではないか!?と問題になったのが発端、というわけです。
〇そもそもランダムって何?
ここで、コンピューターにおける「ランダム」というものについて考えてみたいと思います。
ランダムというのは、法則性がないこと、を指します。例えばサイコロの出目のように、何回振っても次の結果を予想することが出来ない時、その結果はランダムである、と言ったりします。
ランダムに作られた数列のことを、乱数といいます。どこをとっても無作為で、幾つかの数字から他の数字を予想したり計算したりすることは出来ないよ、という数列ですね。
しかし、コンピューターは元来計算機でして、中にサイコロを持っている訳ではありません。妖精さんがサーバの中でサイコロを振ってくれるわけでもありません。
その為、コンピューターは色々な方法で、「一見ランダムと変わらないけれど、深く調べると実は法則性がある」数列を生成して、それを乱数として使います。
これは、要するに「ランダムっぽい数列」であって、実際にランダムなわけではないんですが、まあちゃんと使い方を工夫すればほぼランダムと変わらないような扱いをすることが出来ます。
これを「疑似乱数」と言います。
〇疑似乱数についてもうちょっと詳しく
ランダムっぽい数列を作るには、色んな方法があります。これらを、「乱数生成アルゴリズム」と呼んだりします。
どんな方法があるかはこちらをご参照ください。
線形合同法とか、メルセンヌ・ツイスターとかが有名だと思います。勿論、これらのアルゴリズムをシステムにそのまんま実装する訳ではなく、普通はこれらのアルゴリズムを利用した、乱数生成のライブラリなりコマンドなりを使うことになります。それら、疑似乱数を生成してくれるプログラムを、擬似乱数生成器(PRNG)と呼んだりします。
本筋と全然関係ないですが、メルセンヌ・ツイスターってすげえかっこいいですよね。名前が。白銀聖闘士のミスティ辺りが技として使いそうな名前だと思います。
ここで、「ランダムシード」という言葉が出てきます。この言葉重要。
疑似乱数は、「一見ランダムっぽいけど、実は全部計算で作っている」乱数です。その為、元になる値が一致すれば、同じアルゴリズムは毎回同じ数列を吐き出します。これでは乱数として使い物にならないので、何かしら、乱数のもとになる値を変えてやらないといけません。(参考までに、これが今回の問題の一番重要なところです)
この、「乱数のもとになる値」のことを、乱数の種、ランダムシードといいます。このランダムシードを疑似乱数生成器に食べさせてやると、疑似乱数生成器は乱数っぽい数列を吐き出してくれます。それを、いろんなランダムな結果を作る為に使うわけです。
疑似乱数の質をなるべく高める為には、つまり十分ランダムな数列を得る為には、このランダムシードの扱いが一番重要です。この値をきちんと変えてやらないと、乱数は他の乱数と一致してしまいます。だから、このランダムシードは、なるべく「その場限り」の情報を元にして生成しようとするのが一般的です。
例えば、その瞬間にしか存在しない、日時分秒のデータとか。ユーザーのIDとプログラムの起動回数と日付を組み合わせたり、だとか。
要は、このランダムシードがきちんと散らばっていれば、疑似乱数はほぼ乱数と変わらない動きをするし、ランダムシードと乱数アルゴリズムがポンコツだと疑似乱数は全然乱数っぽくならないよ、という話なのです。
〇じゃあ今回のtotoBIGでは何が起きてたの?
疑似乱数とランダムシードの何かの仕様の問題で、2回のくじの内容がかぶっちゃったんじゃないの、というのが私が考える仮説です。
これは推測するしかないんですが、totoBIGでも同じく、上のような「疑似乱数」及び、何らかの「乱数生成アルゴリズム」を使っていた筈です。そして、何らかの値をキーにして、ランダムシードを生成していた筈です。他に「ランダム」を実現する方法が、(普通に使える範囲では)存在しないからです。
このランダムシードが何を元にしていたのか、というのが、今回の件で一番重要な要素です。
これは、購入する度に毎回変わるものでなくてはいけません。でないと購入する度に数列が一致してしまいます。また、購入した人ごとに変わるものでなくてはいけません。でないと、違う人が買った数列と一致してしまいます。
仮に私が乱数生成ロジックを担当する技術者であれば、「接続元のIPアドレスやMACアドレス、及び(あるなら)ユーザーIDや住所電話番号のような個々人で独自の値と、サーバの日時分ミリ秒を組み合わせて、それをランダムシードに変換すること」を考えると思います。このシードであれば、同じ人が、ミリ秒まで完全に同じタイミングで、同じパソコンと同じネット環境で、同じくじを購入しない限りは、きちんとランダムな数列が生成され、使われる筈です。こういう場合に妥当かどうかまでは知らない。
ただ、例えばこのランダムシードが、日時分までしか使っていなければ?(実は私は、この線を割と強く疑っているのですが)
1分の間に同じ人が二回購入すれば、ランダムシードの値は一致してしまいます。当然、生成される数列も一致してしまいます。その為、今回と同じような問題が発生し得る、という訳です。バカらしいですか?私もバカらしいと思うんですけど、案外バカらしいプログラムって普通に存在するものですしね。
勿論、「ランダムシードが被ってしまう」パターンは他にもいろんなものが考えられます。もしかすると、楽天経由での注文であることも関係があるのかも知れません。なんにせよ、疑似乱数が不出来なせいでランダム性に傷が生じる、というのは全然珍しいことではないのです。
つまり、今回の問題の原因は、ほぼ「疑似乱数生成器の使い方がヘボかった」ことに集約されます。天文学的な確率がどうとかはなんの関係もありません。バグ、ないし仕様の問題です。
〇今回のtoto側の対応はどうなの?
totoは、今回の件について、こんな風に発表しています。
また、コンピューターが投票内容(「1」「2」「0」)を発番する際の仕組みにおいて、重複した投票内容の出現はあり得るものであり、この事象につきましても、システムの不具合や不正な操作等によるものではないことを確認いたしました。(発番の仕組みの詳細につきましては、セキュリティ上の観点から公表しておりません。)
要は、上記のような疑似乱数生成の問題について、「バグじゃありません、仕様通りです」と言ってるんですね。
この文章自体は、「(天文学的な確率で)偶然一致しただけだよ!!」と言っている訳ではありません。つまり、totoは「嘘をついている」わけではありません。上記のような疑似乱数生成ロジックを使っているのであって、一致することは仕組み上あり得るんだよ、けど仕組み自体は教えないよ、と言っているわけです。これに納得するかどうかはともかくとして、この説明に「嘘つき!」というのは筋違いでしょう。
じゃあこれは、今までのtotoの説明と合致するのでしょうか。
ちょっとFAQを漁ってみました。ランダム生成について、こんな記載がありました。
Q165. BIGで試合結果をコンピューターがランダムに選択するシステムはどのような仕組みですか。BIGはあくまで『くじ』として、1口ずつ「1」「0」「2」の3つの選択肢を試合ごとに1/3ずつランダムに選択する仕組みとなっています。上記のような仕組みであるため、ある特定の数字が連続して出現する可能性やその反対で出現しない可能性もあるため、結果的にくじの組み合わせに偏りが生じる場合があります。
あんまり細かいことは書いてないですね。ただ、「ランダムに選択する」とは言っているので、「今回のような不適切な疑似乱数が発生するシステムを、ランダムと言っていいのか」という争点は発生する、のかも知れません。
ただ、ヘボい疑似乱数が他に存在しないか、というとそんなこともない訳であって、今まで疑似乱数の品質由来の訴訟やら判例やら存在しないかな?と思って、ちょっと調べてみたのですが見つけられませんでした。これは単に私の探し方が悪いだけかも知れませんので、もうちょっと追加で調べてみます。
疑似乱数自体に「ランダムとは言えない」というNG判定が出ることはほぼあり得ない(そうすると、世界中のコンピューターシステムで「ランダム」という言葉がつかえなくなってしまいます)ので、法的に今回の件がNGと出るかどうか、というのは難しい問題であるような気もします。
勿論、「totoのような大規模なくじで、疑似乱数生成ロジックがヘボかった」というのは、それ自体非常に大きな問題だと思います。その為、この辺のロジックがもう少し明確にされる、ロジック周りの改良がなされる、といった動きはあっていいように思います。そういう動きがなかったとしたら、totoくじの信頼性が低下してあんまり売れなくなる、ということもあり得るでしょう。
その辺は今後観測してみたいと思います。
ということで長々と書いて参りました。結論というかまとめとしては、
・コンピューターの「ランダム」は、一般的なイメージの「ランダム」とはちょっと違うよ
・今回の問題は、作為とか不正というよりは多分疑似乱数生成ロジックがヘボかった問題だよ
・もし法的な問題が発生するとしたら、「上のようなヘボいロジックが「ランダム」という言葉に値するか」という問題になると思うよ
・カルドセプトサーガのダイス問題?イヤな事件だったね…
という感じになると思いますが、まあ最後の件はどうでもいいです。
今日書きたいことはこれくらいです。
---------------------------------------------------------------
(追記 2/21)
すいません、一点情報が抜けてました。今回購入されたくじ、同じタイミングで買ったものかと思ったら、別の日に購入されたものらしいですね。
だとすると私が書いた、「例えばこのランダムシードが、日時分までしか使っていなければ」というのは外れですね。疑似乱数生成とランダムシードの問題であること自体は変わらないと思うんですが、どんな実装だったんだろう。
これな、極端な出目の偏り等今まで色々不審な点はあったけど、今回の件で爆発したって感じ
天文学的な確率だろうと、起こりうるものは起こりうるので。
とはいえ多分、乱数側の問題だとは思いますけど。
購入時にその中からランダムで選ぶとすると一致する確率はあり得るくらいになるんでない?
乱数には種(シード)がある
種の大きさは乱数生成器によって違うが
例えば32ビットだとすると43億通りしかない
ねとらぼに書かれているような天文学的な確率ではなく、1等当選確率の高々1000倍程度でしかないので絶対に起こり得ないとまでは言えない
通常は前者の方が確率が低いと考えてしまう。
1が三回も続くなんて!高確率、などと観念的にとらえてしまう。
それを特異なケースだと考えてしまう。
1,1,1,1,1となる確率も
1,4,2,6,5と(一見バラバラに)なる確率も同じなのだが。
そう、「確率」という言葉がわるい、組み合わせと読み替えると分かりやすい。
で、totoBigというのは480万通りの組み合わせしか無い。
480万面のサイコロを転がす事を想像すると分かりやすい。
1〜4800000の数字が書いてある超多面サイコロ。
さてこのサイコロを振るわけだが、最初に1が出て、次も1を出す確率は
480万分の1だ。
1も2も3も4444444も26451873も
確率は全て同じで、つまり面数が480万なのだから480万分の1でしか無い。
6面サイコロの話に戻すが
1の次に1を出す確率は6分の1である。
2も3も4も同じく6分の1。
最初に振った目と次に同じものを出せる確率は6分の1でしかない。
話を変える、
これから二度サイコロを振る。続けて1を出す確率。
組み合わせは36通りしかないのだから36分の1である。
「2を二回」も「3を二回」も
「1の次に6」を出す確率も全部36分の1。
36通りしかないのだから。
この辺の話を多くの人が勘違いしている。
件の話は”これから”480万面のサイコロを”二度”振る話では無いのだ。
再度480万面のサイコロの話に戻すが、
なにか数字を出して、次に同じ数字が出る確率、は480万分の1でしかない。
くどいようだが480万面しかないのだから。
さて、480万分の1というと途方もない数字のように思えるが、
これはtotoBigの勝利確率と同じであり、毎週誰かが当たっており、
つまり同じ数量のくじが売られているのであり、
次の週も同じ数字を引き当ててしまう確率、なんてのは意外と小さいのである。
別の言い方をすれば「ランダム購入で同じ数字が続く確率」は「totoBIGに当たる確率」と同じなのだ。
ゼロが何個も続くような確率ではなく、結構ありえる、
おそらくしょっちゅう起きているはずである。
見過ごすか、仲間内で盛り上がって終わり。
ちなみに言えばtotoBigでも当然不正は行われているのだが、
全ての試合が終わったあとに、つまり出目が決まったあとに、「田中角栄(仮名)がそれ賭けてたわ」と購入記録を改ざんすることにより、あるいは中曽根さんの親戚や森さんのお友達に当選をプレゼントする仕組みになっている。
しかしこれでは当選者が不自然に増えてしまう。
当選者数は計算で逆算できるので長期的に観察すれば当選者数は論理値に収束するのであるから、ズル当たりを続けると当選者総数が論理値から外れる。ズルがバレる。
そこでランダム購入はできるだけ外れるものを割り当て、また当選しても受け取りに来ないものなどをコツコツと内部留保し、これを権力者ギフト用に使うのである。
まぁこんな事は今時常識であるが、念のために書いておく。
今回の事象については明らかにバグだが、当たりにくい組み合わせ番号を間抜けな購入者に押し付けるアルゴリズムなりシステムがタコだったのだろう。
不正でないのならば、初歩的な線形合同程度の、学生の練習プログラムと同レベルのものしか実装・運用できない、ということ。
おとなしく /dev/random なりを使ったほうがよろしいのでは...
ジャンボは番号を事前に印刷しますから重複はありません
その為当籤金額は一人しか居ない当籤者が独り占めですね
totoBIGは購入時のランダム発行なので番号の重複はありえます
その為ざっくり言うと当籤金額は当籤者で山分けです
例えば今回キャリーオーバー含め約50億円で件の方がもし当籤していたら2口なので12億円(山分けですが1口上限6億円なので)ゲットでした
このような山分けというくじの性質から極端な話
(実際はもっと複雑でしょうが)
for ($i = 0 ; $i < 14; $i++){
print(mt_rand(0,2).',');
}
この程度でも十分なのでは?
ということで
「今回のような不適切な疑似乱数が発生するシステムを、ランダムと言っていいのか」
に対して別に不適切じゃなくね?という意見でした
> ↑本気だったらどうされますか?
横槍ですが。
接続元のMACアドレスが分かるのって(一般的に)
同一セグメントからの接続の場合のみなので
(常識的に言って)ありえ無いです。
>この文章自体は、「(天文学的な確率で)偶然一致しただけだよ!!」と言っている訳ではありません。つまり、totoは「嘘をついている」わけではありません。上記のような疑似乱数生成ロジックを使っているのであって、一致することは仕組み上あり得るんだよ、けど仕組み自体は教えないよ、と言っているわけです。これに納得するかどうかはともかくとして、この説明に「嘘つき!」というのは筋違いでしょう。
運営の公式発表は、法律の条文のように意図的に曖昧にして複数の解釈が出来るよう作成された逃げ道だらけの説明。
したがって、管理人の解釈もありなら、天文学的な奇跡を肯定したとの解釈も可能である。
しかし、管理人は自分の解釈が正解で他は誤りであるとしている。
「疑似乱数生成器の使い方がヘボかっただけ」とも発言しているがそんなことは運営側しか知る由もない。
詳細な説明が発表されていない段階で、憶測だけで、よくこれだけ断言するものだな…と。
自論の展開は結構だが、あくまで蓋然性の話であることをお忘れなく。
0.0000000000000000000000000000001%以下というのが意味不明。
どういう計算をしたのだろう。
2,503,160,000,000,000,000,000,000,000,000,000分の1というのも意味不明。
480万*480万とかしたのかな?
再度、わかりやすく書こう。
totoBigは毎週400万程度の投票口数・100万程度の投票枚数があり、
毎回0〜2人が1等当選している。
つまり当たり数は概ね論理値に収束している。
毎回毎回100万の組み合わせが購入されているのだ。
再度サイコロの話に例えるが、
これからサイコロを二回振るとして。続けて同じ数字が出る確率は
36通りのうち1−1,2−2,3−3,4−4,5−5,6−6
の6通りのうちどれかで良いのだから6/36になる。
再度書くが確率と言うからややこしくなる。「組み合わせ」なのだ。
さて、これから6人が二回サイコロを振り、"誰か"が続けて”同じ”数字を出す組み合わせ(確率)は。
(6/36)*6=1
であり、ほぼ必ず誰かが「同じ」数字を出す。
注目するのは「誰か」である。かつ、1−1でも2−2でも構わないのだ。
totoの話に戻るが。
totoBIGは480万分の1のくじ引きに過ぎない。
480万面のサイコロを振り1を出した人が勝ちとも言い換えられる。
480万回振れば一度はだいたい当たるのである。
(ちなみに多くの人が振り続ければ確率が「上がる」と観念的に誤認しがちで、パチンコをする人などに多い
くじ引きは毎回平等に480万分の1で変わらない。繰り返した場合全体を合成して確率は上がるのだが
この意味が分からない人が多い、つまりパチンコで外れ続ける、これだけハズレを引いたのだから確率は上がっており
次こそはという心理であるが、次の抽選もやはり非情にも480万分の1で変わらないのだ。
あと、スマホのガチャなどに引っかかる人も確率や算数に弱い人だなぁ。閑話休題)
100万人が480万面のサイコロを振り「誰か」が続けて「なんでもいい」同じ数字を出す組み合わせ(確率)。
(4800000/(4800000*4800000)) * 1000000 = 0.2
つまり20%である。ちっとも天文学的数字ではない。
totoBigは毎週あるわけだが、(仮に全員がランダム購入だとして)
5週に一回程度は「誰か」が続け数字になる。
ぜんぜん珍しい事ではないのだ。
もう一度書くが、ランダム購入で次も同じ数字が出る期待値はたかだか480万分の1に過ぎない。
そして全国で毎週100万も購入されているのだから、しょっちゅう「どこか」で起きてても不思議ではないのだ。
今回はたまたま購入者が気づき、Twitterに投稿し、なにかのきっかけで広まったに過ぎない。
ここまで易しく説明してあげて、まだ理解できないなら、老婆心ならがアドバイスだが、
いや、そもそも、「0.0000000000000000000000000000001%以下」という数字を鵜呑みにし
直感的、瞬時に疑えない人は
乱数発生機云々以前に、エンジニアはご卒業されたほうがよろしいのではないかと。
厳しいことを言うて申し訳ないが。
掛け算と累乗の考え方が全くわかってない。中学生からやり直して下さい。100万口買われようが、毎週抽選が行われようがそれは単なる掛け算です。5回分の番号が順番違わず一致するのは5乗です。
1回一致した程度なら数百万口を調べれば普通に起こることかも知れませんが、5回一致するのは480万分の一の累乗の確率であり、何百万口、何億口調べようが、それに掛け算分の緩和が起こるだけで天文学的確率であることに変わりありません。
あなたこの記事の元ネタの方(以降元さん)の話ちゃんと理解されてますか?
技術上ありえないですが完全にランダムな3面サイコロがあったとして
それを14回降った場合の出目の組み合わせ確率は?
3^14=4782,969ですよね?これは「1口の当選確率」です
あなたの言う480万面です
まずエンジニアどうこうと言うなら「約480万」とか「およそ480万」で書いてください
480万と4782,969は全く違う数字です
あなたの好きな6面サイコロで例えましょう
6面サイコロを5回振って[1-2-3-4-5]と順番も一致で出る確率はいくつでしょうか?
6^5ですから1/7776ですよね?
じゃあ話戻して元さんはまず「5口」買ったので(3^14)面体のサイコロを5回降って
出た数字の順番も一致で出る出る確率はいくつでしょうか?
(3^14)^5ですから1/2503155504993241601315571986085800となります
さてあなたに質問です
0.0000000000000000000000000000000399(以下省略)は
0.0000000000000000000000000000001
以上ですしょうか?以下でしょうか?
元さんは再度10口追加で購入されました
さてそのうち「頭の5口が順番含めて完全一致」する確率はいくつでしょうか?
このひとのいう確率うんぬんは正しいんですよ
「5口を2回買って一致する確率」を求められている問題に「1口が他人と一致するの確率」で答えるっていう
問題文章を読み間違えてるか文章を理解していない人なんですよ
クラスに一人は居ませんでした?
「〇も木から落ちるということわざに入る〇を漢字で書きなさい」って問題に「さる」って書く人
ちなみに私は「すげーな!とは思うけど0ではない以上あり得る」という考えです
あと不正不正という人には「アホなんじゃねーの?」という考えです
このブログの記事では不正だうんぬんについては語られていませんので書きません
さて、これから6人が二回サイコロを振り、"誰か"が続けて”同じ”数字を出す組み合わせ(確率)は。
(6/36)*6=1
であり、ほぼ必ず誰かが「同じ」数字を出す。
これ2回サイコロを振って同じ数がでない場合の6乗から求めるべきのような……
(30/36)^6=0.401878←2連続して振って「数が同じにならない」ことが6回起こる確率
その逆なので60%くらいになりません?
ある数字とかぶらない残り4,782,968通りの数値を引くようにくじを引く。
これを100万回すると約81%は1回もかぶらない。
結局19%くらいで数字がかぶる状況が生まれることになると。
81%でも5週続くのは35%なので、1ヶ月のうち65%でだれかがかぶるよと。
としさんの計算過程はともかく、現象としてありがちなことだよということで正しい。
ただそのかぶりが自分のところで起きる確率はめちゃ小さいけどね。
幽遊白書の天沼と海藤のバトルの、
クイズの問題も答えも全て順序はランダム。
に見せて実は法則がある。
というのと同じってことですよね?
今回、2回目の10口の内最初の5口が1回目に買った5口と一致したということですけど、仮に1回目も10口買っていたら2回目の10口と全て一致していたっていうことで合ってます?
自身の過去の1000口を超える購入履歴を解析して0が選択されにくい買い方を発見できたら大金持ちになれる。
何が書いてあるのか理解できない人は無理にコメントしなくてもいいですよ^^
経験のある人物が役職に就いている会社。
こんな会社が庶民からかき集めた金を確率通りに返すわけがない。
「日本ハーデス 逮捕者」で検索。
toto側はバグじゃないって言っているのでこの説明では辻褄があいません。
ところどころ説明が不適切だし、推論に基づいているはずが結局、恣意的に断定している
ちゃんと書いて欲しいなーせっかく検索結果上位に表示されてるのに問題が有耶無耶になっちゃうよ。。