AI(人工知能/ディープラーニング)

サイコロの確率って本当に1/6?面白シミュレーションゲームを作成して確かめてみました!

この記事は約8分で読めます。

サイコロの確率って本当に1/6?今回は、ちょっと面白い試みをご紹介したいと思います。皆さんは、サイコロを振った時にそれぞれの目が出る確率が1/6になる、ということをご存知ですよね。でも、本当にそうなるのか、何回くらい振ればその確率に近づくのか、気になりませんか?
私も以前から気になっていたので、ChatGPTの力を借りて、サイコロの出目の確率をシミュレーションするプログラムを作ってみました。

サイコロシミュレーションゲームをChatGPTで作成

プログラムの概要

このプログラムは、指定した回数だけサイコロを振って、それぞれの目(1から6)が出た回数をカウントし、その割合を計算するというシンプルなものです。理論上は、振る回数が多ければ多いほど、それぞれの目の出る割合は1/6(約16.67%)に近づくはずですよね。

▼実際に作ったプログラムはこちらです
https://www.dm2.co.jp/aigame/dice.html

興味ある方はこのリンクからシミュレーションゲームを試してみてください。このページを右クリックして「ページのソースを表示」とするとhtmlが確認できますよ。

実際に試してみた結果

せっかくなので、私もこのプログラムを使って、いくつかの回数で試してみました。その試行錯誤の様子を皆さんにも紹介します。

100回振ってみた場合

100回振った時点では、けっこう大きなばらつきがあります。例えば、「4」の目が多く出たり、「2」の目や「5」の目が少なめだったりしています。上記の例では「4」が出た回数は「2」や「5」の回数の2倍以上あります。
ですから、100回くらいだと均一な確率とはいえないですね。

1000回振ってみた場合

1000回振った時点でも、まだ少しばらつきが見られますね。例えば、「4」の目が多く出たり、「3」の目が少なめだったりするようです。理論値である16.7%の点線に、まだ全ての棒グラフが揃っているわけではありません。

1万回振ってみた場合

次に、1万回まで増やしてみました!1000回に比べると、各目の割合がグッと理論値に近づいてきたのが分かります。それぞれの割合が16%台に収まってきていて、統計の力が感じられますね。

10万回振ってみた場合

さらに桁を増やして10万回!ここまで来ると、棒グラフの高さがほとんど同じに見えます。16.7%という理論値に、かなり忠実に近づいていますね。この辺りから、「本当に1/6なんだ!」という実感が湧いてきます。

100万回振ってみた場合

そして、ついに100万回です!もはやグラフ上では、全ての棒グラフが理論値の点線とほぼ重なっているように見えます。数値を見ても、ほとんどの目が16.6%や16.7%といった、ほぼ完璧な均等に近い状態になっています。

実際にサイコロを100万回ころがすというようなことをリアルにするのは現実的ではありませんので、このようなシミュレーションで何度も試せるのは有効だなと感じました。

ChatGPTで作成したプログラム

このシミュレーションゲームはChatGPTで作成しました。そのプロンプトは以下のとおりです。

どもども遠田
どもども遠田

1から6までの目がある普通のサイコロを転がして、それぞれの目が出る確率を実際にシミュレーションするゲームを作ってください。
ユーザーは、サイコロを何回転がすかを選択できます。その回数は、1から10000回まで可変です。
その結果は分かりやすくグラフにて表示されます。
さらに続けてサイコロを転がしてシミュレーションの数をどんどん増やすことによって確率やグラフがどのように変化するかを視覚的に記録できるようにしてください。

AIの回答
AIの回答

このコードでは、

  1. DieSimulatorクラス でサイコロの累計カウントと履歴を管理し、

  2. simulate(n) メソッドで指定回数サイコロを振り、

  3. plot(total_rolls) で現在までの出現確率を棒グラフ表示。

  4. main(cumulative_steps) に累計回数のリストを渡すと、その各ステップごとに追加振り分とグラフを自動で生成します。

  • 振る回数を変更したい場合は、if __name__ == "__main__": 以下のpython

    cumulative_steps = [100, 1000, 5000, 10000]

    のリストを、1~10000の範囲で増やしたい回数に置き換えてください。

  • たとえば [500, 2000, 8000] のように指定すれば「500回→2000回→8000回」と順にシミュレーションが実行されます。

  • 実行後、sim.history に各ステップの累計カウントが NumPy 配列で保存されているので、あとから振り返れます。

このように、任意の回数を繰り返しシミュレーションし、グラフで確率の収束過程を視覚的に確認できるゲームを実現しています。ぜひお試しください!

どもども遠田
どもども遠田

サイコロを振る回数を10万回まで増やしてください。
そして、このサイコロシミュレーションゲームをWEBサイトにアップするので、html形式にしてください。

AIの回答
AIの回答

以下のHTMLをそのままファイル(例:dice_simulator.html)として保存し、WEBサーバーにアップロードしてください。JavaScriptとChart.jsを使って、サイコロを振る回数を指定・追加しながら累計確率をグラフ表示できます。

中略→ここにhtmlが表示されています

 

使い方

  1. ページを開くと、画面上部に「振る回数」の入力欄と「振る」ボタン、累計ロール数が表示されます。

  2. 数字を入力し(1~100000)、[振る]をクリックすると、その回数だけサイコロを振り、累計確率をグラフに反映します。

  3. 何度でも回数を追加可能なので、シミュレーションの収束過程を視覚的に確認できます。

ぜひご活用ください!

こんな感じでなんどかやりとりすると完成します。

ChatGPT - サイコロ確率シミュレーション
Shared via ChatGPT

やりとりの初期内容は上記にて公開しました。

サイコロシミュレーションゲームのまとめ

このシミュレーションを通じて、「大数の法則」というものが、身をもって体験できました。大数の法則とは「試行回数が多くなればなるほど、結果は理論上の確率に近づく」という統計学の基本的な考え方です。

サイコロの例で言うと、何回か振っただけでは偏りが出ることがあっても、何万回、何十万回と振るうちに、それぞれの目が出る確率は限りなく1/6に近づいていくということですね。

普段何気なく振っているサイコロにも、こんな面白い数学の法則が隠されているんですね!文化審議会の報告書にも、コミュニケーションにおける「正確さ」や「分かりやすさ」の重要性が述べられていますが 、今回のシミュレーションも、まさに「正確な情報」が「分かりやすく」視覚化された例と言えるかもしれませんね。

皆さんもぜひ、上記のURLからプログラムを試して、サイコロを振る回数を色々と変えてみてください。自分の目でその変化を確かめるのは、とても楽しいですよ!もしかしたら、あなたも「この数字が一番きれいに1/6に近づいた!」という回数を見つけられるかもしれませんね。

確率モデルをビジネスに応用できないか?

今回はサイコロというわかりやすい事例でプログラムを作成しましたが、これをビジネスに応用することも可能です。

サイコロシミュレーションのビジネス応用事例

このサイコロシミュレーションは、一見すると単なる娯楽的なプログラムに見えるかもしれません。しかし、その根底にある「確率」と「大数の法則」の考え方は、実はビジネスの様々な場面に応用できる、とてもパワフルなツールなんです!

例えば、以下のようなケースで役立つと考えています。

ECサイトの転換率のばらつき判断

ECサイトを運営されている方なら、「転換率(コンバージョン率)」が日によって、あるいは施策によって変動することに頭を悩ませているかもしれません。転換率が普段より低いとき、「これは一時的なばらつきなのか?」「それとも何か異常が起きているのか?」と判断に迷うことがありますよね。

このような時、サイコロシミュレーションの考え方が役立ちます。過去のデータからECサイトの平均転換率を算出し、それを「理論上の確率」と仮定します。そして、サイコロを振る回数を「サイトへのアクセス数」に見立て、シミュレーションを行います。

例えば、平均転換率が2%のECサイトで、1000回のアクセスがあったとします。この時、どのくらいの転換率のばらつきなら「通常範囲内」と見なせるのかをシミュレーションすることで、今日の転換率が「たまたま低い」のか、それとも「問題が発生している可能性が高い」のかを判断する材料にできるのです。これにより、無駄な調査時間を削減したり、問題発生時の早期対応につなげたりすることが可能になります。

小売店の来店リピート率の分析

小売店の場合、お客様の「来店リピート率」も重要な指標です。「今月のリピート率が低いけど、これは許容範囲なの?」といった疑問も、サイコロシミュレーション的なアプローチで考えることができます。

過去のリピート率を基準として設定し、それを「特定の事象が起こる確率」と考えます。そして、来店者数を試行回数としてシミュレーションすることで、どの程度の変動であれば「通常の範囲」と見なせるかを把握します。これにより、季節的な変動や一時的な要因によるものなのか、それとも店舗運営や顧客サービスに改善が必要な「異常値」なのかを、客観的に判断する手助けとなるでしょう。

マーケティング施策の効果測定

新しいマーケティング施策を打った際、その効果が「偶然の産物」なのか、「本当に施策が効いている」のかを見極めるのは難しいものです。例えば、ある広告キャンペーンを行った後、問い合わせ数が一時的に増えたとします。これも、普段の問い合わせ発生率を確率と見立ててシミュレーションを行うことで、今回の増加が「統計的に有意な変化」なのかどうかを判断する材料になります。

このように、サイコロシミュレーションの根底にある「確率的なばらつき」の考え方を理解し応用することで、ビジネスにおける様々な数字の変動が「許容範囲内」なのか「異常値」なのかを判断する客観的な材料を得ることができます。そして、よりデータに基づいた意思決定を行う手助けとなるのです。

いろんな応用が考えられます

皆さんもぜひ、上記のURLからプログラムを試して、サイコロを振る回数を色々と変えてみてください。自分の目でその変化を確かめるのは、とても楽しいですよ!そして、その原理が実は皆さんのビジネスの課題解決にも役立つかもしれない、ということを感じていただけたら嬉しいです。