確率における大数の弱法則をPythonで体感してみた

サイコロを振る




サイコロの目が出る確率は6分の1とは限らない

サイコロを振る

フツーに考えるとサイコロの目が出る確率って、それぞれ6分の1ですよね。でも6回振っても「1の目が1回も出ない」なんてことはザラにあります。

 

確率ってなんだったんだよって思っちゃいますね。で、最近読んだ本にそのあたりのことが詳しく書いてありました。

 

要するに「サイコロを投げる回数が大きくなればなるほど、1の目の出る確率は6分の1に近くなる」そうです。ホントにそうなのか試したくなってきました。

 

でも、さすがにサイコロを10万回とか投げたくないので、プログラミング言語Pythonで実行してみます。

 

標準モジュールのrandomを利用して、下記のような感じでサッと書いてみました。timesという変数にサイコロを投げる回数を入れています。下の例ですと10回サイコロを投げる感じです。

 

 


import time
import random


start = time.time()

times = 10
result_dict = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0}

for i in range(0, times):
	result = random.randint(1,6)
	result_dict[result] = result_dict[result] + 1

for i in range(1, 7):
	print(str(i) + "が出た回数" + str(result_dict[i]) + "回( " + str(result_dict[i] / times) + " )")

elapsed_time = time.time() - start
print("実行時間:{0}".format(elapsed_time) + "[sec]")


 

回数を増やしつつ実行してみましょう。それぞれ5回ずつ実行してみました。

 

 

 

サイコロを10回投げた時の確率

サイコロを10回投げた時の確率

 

10回投げるだけだと、バラつきがかなりありますね。1回も出ない目があったりします。出た回数の右のカッコ内の小数点の数値は、その目が出た割合を表しています。ちなみに6分の1は0.166…なので、0.5とかかなり遠いものがありますね。

 

 

 

サイコロを1000回投げた時の確率

サイコロを1000回投げた時の確率

 

1000回サイコロを投げてみると、すべての割合が0.2未満に収まりました。だいぶんバラツキが無くなってきたようです。

 

 

 

サイコロを10万回投げた時の確率

サイコロを100000回投げた時の確率

 

そしていよいよ10万回投げます。するとすべて0.16…に収まっているではありませんか!ほぼ6分の1と言ってよいと思います。

 

 

 

まとめ

こんな感じで、サイコロを投げる回数を大きくすればするほど、目の出る確率は6分の1に近づくことが体感できました。

 

ちなみに投げる回数を無限大にすると、それぞれの目の出る確率はピッタリ6分の1になるそうです。このあたりになると数学の話なのにファンタジーみたいになってきます。

 

ま、厳密な話をするとPythonが用意しているrandomモジュールがどれくらい正しくランダムしてくれてるのか、なんてことも問題になってきそうですが、目的は達成できたのでよしとします。

 

疑問に思ったことをプログラムでパパッとテストできるって、すごく便利ですね。世の中、ますます便利になっていくに違いないし、未来が楽しみです^^




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です