モンティホール問題をベイズ推定で解いてExcelシミュレーションで検証する
モンティホール問題とは?
人は時として直観により誤った判断をしてしまいます。
大金が転がり込む確率が2倍になるというのに、見す見すそのチャンスを放棄してしまうのです。
モンティホール問題は、そのような人間の愚かさを気づかせてくれます。
ここに3枚の抽選券があります。
1枚が当たりで、当たり券を引けば100万円がもらえます。
あなたは熟慮の末、そのうちの1枚を引きました。
プロ野球のドラフトの券と同じで、当たりかどうかは開封するまで分かりません。
ここで主催者が、残りの2枚のうちの1枚を引きます。
開封したら外れです。
主催者はどれが当たり券か知っているのです。
そこで主催者がもう一度チャンスを与えてくれます。
「残った1枚と取り換えてもいいですけど、どうします?」
と。
あなたは取り替えますか?
普通の人なら、
「これで2枚のうちの1枚が当たり券になった。確率は50%だ。今持っている券でも、残っている券でも同じだ」
と考えるのではないでしょうか?
管理人もそう思いました。
ところが、残った券に乗り換えると、当たる確率は2倍になるのです。
この理由についてはいろいろな解釈が知られていますが、管理人が一番すっきりした解釈は以下の通りです。
***************************
最初にあなたが引かなかった2つに当たりが含まれる確率は2/3です。
そのうちの1つは主催者が外れといってくれるので、もう1つが当たりである確率は2/3です。
最初にあなたが引いたのが当たりである確率は1/3なので、乗り換えれば当たる確率は2倍になります。
***************************
モンティホール問題をベイズ推定で解く
これをベイズ推定するために、まずは問題を単純化します。
3枚ある抽選券を左から1、2、3とします。
1が当たりの場合に、最初にあなたが1を引いて、次に主催者が2を引いて、、、
と、すべてのシナリオについて虱潰しに調べるのは大変です。
そこで、一つのシナリオについてだけ調べます。
どのシナリオでも、どうせ同じ確率になるからです。
これを、特定のシナリオに固定しても「一般性を失わない」といいます。
特定のシナリオとして、最初にあなたが1を引いて、次に主催者が2を引くとします。
すると、当たりは1か3です。
2が当たる確率はゼロだからです。
P(Y)を当たりの確率とすると、1が当たる確率はP(Y=1)、3が当たる確率はP(Y=3)と書け、P(Y=1)とP(Y=3)のどちらか大きいかという問題に帰着できます。
最初にあなたが引く時は、
P(Y=1)=P(Y=3)=1/3
ですね。
これが事前確率になります。
この事前確率が、主催者が2を引いた後にどう変わるかを知りたいわけです。
主催者は2と3から2を引きますので、これも確率事象になります。
主催者が引く券の確率をP(X)とすると、P(X=2)が2を引く確率、P(X=3)が3を引く確率というように表せます。
ところで、主催者が2を引く確率は、1が当たりの時と3が当たりの時とでは異なります。
1が当たりの時は、2と3両方を選べる中で2を選ぶので、2を選ぶ確率は1/2です。
1が当たりの時の条件付き確率ですから、P(X=2|Y=1)=1/2と書けます。
一方、3が当たりの時は、2しか選べません。
確率は1ですので、確率記号で書くと、P(X=2|Y=3)=1となります。
これらが下記のベイズの公式における尤度になります。
>> 「ベイズの定理」の使い方を具体例を使ってわかりやすく解説【初心者向け】
正規化定数は、何も縛りがない中で主催者が2と3から2を選ぶ確率ですから1/2です。
確率記号で表すと、P(X=2)=1/2です。
これでP(Y=1)とP(Y=3)の事後確率P(Y=1|X=2)とP(Y=3|X=2)が求められます。
ベイズの公式に代入すると、
P(Y=1|X=2)
= P(X=2|Y=1) P(Y=1) / P(X=2)
= 1/2×1/3/1/2
= 1/3
P(Y=3|X=2)
= P(X=2|Y=3) P(Y=3) / P(X=2)
= 1×1/3/1/2
= 2/3
つまり主催者が2を引くなら、あなたは手元にある1から3に乗り換えれば、当たる確率が1/3から2/3に上昇するのです。
ここでのミソは、何をX、何をYにするかです。
ベイズの公式では、事後確率はP(Y|X)と表されています。
これはXを知った時のYの確率です。
XとYを決めるためのコツは、
X:観察できる事象
Y:観察できない事象
を基準に選ぶことです。
このモンティホール問題の場合、どれが当たりか観察できませんので、これがYになります。
一方、主催者が何を引くかは観察できますので、これがXになります。
ベイズの公式の本質は、目に見える事象から目に見えない事象を推定することなのです。
モンティホール問題をExcel+VBAシミュレーションする
モンティホール問題は、Excelでシミュレーションすることもできます。
乱数を使っていろんな条件でシミュレーションして、残った券が当たりになる回数を数えればよいからです。
いろいろなやり方があると思いますが、例えば次のようにシミュレーションできます。
まず、3枚の券1、2、3のうちどれが当たりかという乱数と、あなたが最初にどの券を引くかという乱数の2つを作ります。
そして、
あなたが最初に引く券=当たり券 >>> 主催者は残り2枚のうち1枚をランダムに選ぶ(ここでも乱数を作る)
あなたが最初に引く券≠当たり券 >>> 主催者が選ぶ券は自動的に1つに決まる
として、主催者が引く券が決まります。
すると残りの券も自動的に決まるので、その券が最初に乱数で決めた当たり券と同じかどうかを判定します。
これで、残り券が当たり券になる回数をシミュレーションできます。
後は、その回数を試行回数で割ればよいだけです。
Excelでやると次のようになります。
残り券が当たりの場合はC14セルに1が、外れの場合は0が入力されます。
これを新しい乱数を作って何回も繰り返せば、残り券が当たりになる確率の近似値を求めることができます。
下記のようにExcel VBAを使えば、1,000回繰り返した結果がI列に書き込まれます。
Sub Macro1()
Dim I As Long
For I = 1 To 1000
Range(“C14").Select
Selection.Copy
Range(Cells(I + 2, 8), Cells(I + 2, 8)).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next I
End Sub
書き込まれた1,000個の結果を合計すると668になりました。
確率にすると約2/3です。
この結果からも、残り券に乗り換えると当たる確率が2/3になることが分かりました。
モンティホール問題をExcelだけでシミュレーションする
Excel VBAが苦手という方はExcelだけでシミュレーションすることもできます。
1行に1回のゲームの結果をまとめます。
それを1万行コピペすることにより、1万回のシミュレーションができます。
下記ではドアを変えずに当たったのが3,296回、ドアを変えて当たったのが6,704回になりました。