力ずくで確率を算出するモンテカルロ法の魔力


この記事の所要時間: 320秒 〜 420秒程度(1900文字)


中小企業診断士の佐々木孝です。
 

 2つのサイコロを投げて、出た目の合計が3となる確率を求めなさい。

学生時代、確率の授業でこんな問題がよくありました。
2つのサイコロの目の組み合わせが 6 × 6 で36通り、その中で合計が3となるのは1と2、2と1の2通りなので、求める確率は 2/36 = 1/18 となります。
 
この程度の問題ならすぐに解けますが、少し条件が複雑になるとなかなか歯が立ちません。また、問題が解けたとしても解答に自信を持てないのが確率独特の難しさです。この問題でも、サイコロの数が5つ、出た目の合計が18となったらお手上げという人がほとんどでしょう。もちろん、書いた本人も解けません。
 
確率の問題は、単純な理屈を積み重ねて解く場合でも、起こり得る組み合わせがたくさんあり過ぎてただただややこしくなることがあります。その結果、理論はわかっていても、問題がうまく解けないことが起こります。
そんな困った状況に役立つのが、今回紹介するモンテカルロ法です。
 

photo credit : Profound Whatever via photopin cc

 


コンピューターの活用でモンテカルロ法が身近に!


簡単に言えば、モンテカルロ法とは乱数を使ったシミュレーションで確率や近似値を計算することです。「ランダムな事象を生成するのをバーチャルなカジノになぞらえて」、「モンテカルロなんていう豪勢な名前がついて」います(参考:『まぐれ』ナシーム・ニコラス・タレブ/ダイヤモンド社)。
 
先程のサイコロの問題を解くために、サイコロを10万回も投げれば大体正しい答えにたどりつくであろうとこは誰でも想像できるでしょう。でも、実際にサイコロを投げるのは現実的ではありません。1回の試行(サイコロを投げて、結果を記録する)に5秒掛かるとして 5秒 × 10万回 = 50万秒 = 8333.3分 = 138.9時間 = 5.8日。これを試すには、多大な時間と精神力が必要です。
 
しかしながら、今どきのコンピュータを使えば、このような力ずくの試算も簡単に行なうことができます。このことが、モンテカルロ法をより身近なものとしているのです。
 


エクセルでもシミュレーション可能


モンテカルロ法で本当に複雑なシミュレーションを行なおうと思えば自分でプログラムを書く必要があります。でも、ある程度のレベルまでならエクセルで代用が可能です。
 
例えば、サイコロをシミュレーションするなら以下の関数で実現できます。

 = randbetween ( 1 , 6 )

randbetweenという関数名で想像つくでしょうが、これは最小値(この場合は1)から最大値(この場合は6)までの整数をランダムに発生させる関数です。この数式をA列とB列に入力し、C列で合計値を求め、D列でその合計が3になっているかどうかを判定すれば(3だったら1、そうでなかったら0)、1回分のシミュレーションが完了となります。
 

 
この4セルのセットを、例えば10万行にコピーすれば、モンテカルロ法による力ずくの確率算出を行なっていることになります。
 


実際にやって感じるリアリティ


せっかくなので、上記の数式を10万行にコピーして、それを10回試行しました。
 
3の数は、1回目から順に

 5566個、5571個、5637個、5578個、5551個、
 5600個、5532個、5552個、5511個、5561個

という結果です。普通の方法で確率を計算すると、10万回の試行での3が出現する期待値は 100000 × 1/18 = 5555.6個 ですから、かなり近い値になることが確認できます。
 
もちろん、2個のサイコロなら確率を計算した方が簡単です。また、得られるのは近似値に留まりますし、ドン臭いやり方なのも間違いありません。しかし、このやり方には何とも言えない魅力があります。
 
それは、普通の確率計算では感じられないちょっとしたリアリティです。
計算で求めた確率はなかなか信用できなくても、それをモンテカルロ法を使って確認すれば疑いの余地はなくなるのです。
 
このリアリティが必要な場合の確率計算に、モンテカルロ法は真価を発揮します。

  1. コメントはまだありません。

  1. トラックバックはまだありません。

This blog is kept spam free by WP-SpamFree.