読者です 読者をやめる 読者になる 読者になる

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

ベイズの法則の利用例:モンティ・ホール問題の確率計算とPythonシミュレータ

http://blog-imgs-27.fc2.com/r/e/a/realwave/monty_hall_problem.jpg

図解・ベイズ統計「超」入門  あいまいなデータから未来を予測する技術 (サイエンス・アイ新書)
図解・ベイズ統計「超」入門 あいまいなデータから未来を予測する技術 (サイエンス・アイ新書)

はじめに

ベイズの法則が重要な役割を果たす問題として有名なものに

「モンティ・ホール問題」があります。

モンティ・ホール問題 - Wikipedia


(ベイズの法則の基本的な説明に関しては

下記の記事を参考にしてください

待ち合わせに遅れる彼女、ベイズの定理、そして例題 - MY ENIGMA)


「モンティ・ホール問題」の詳しい説明は

上記の記事を参考にしてもらうとして、

数式を使わずにこの問題のトリックを説明すると、

"扉を変えないという選択肢をすると、

3つの内1つの宝(ヤギ)を選ぶ問題になるが、

扉を変えるという選択肢をすると、

3つの内の2つのハズレを選んで宝を得る問題になるので、

(ハズレの扉を選べば、司会者がもう片方のハズレの扉を開けてくれる)

扉を変えたほうが2倍確率が高い"

ということです。


論理的には上記の説明でOKですが、

これをベイズの式を使用して数式的に計算してみようと思います。

ベイズの式を利用した確率の計算

まず初めに自分が選んだ扉をAとします。

そしてその結果、司会者が開けてくれた扉をCとします。

するとCには宝は無いので、AかBのどちらかに宝はあることになります。


ということで、AとBのそれぞれに宝がある確率を

ベイズの式を使用して計算してみましょう。

Aに宝がある確率

Aに宝がある確率をP(A)、

Cの扉が司会者によって開けられる確率をP(Copen)とすると、

上記のCの扉が司会者によって開けられて、

Aに宝がある条件付き確率P(A|Copen)は、ベイズの式より

P(A|Copen)=P(Copen|A)×P(A)/P(Copen)となります。

ここで,P(Copen|A)はAに宝があった場合に

Cが開けられる確率なので、

司会者はBとCのどちらを開けても良いことを考えると、

P(Copen|A)=1/2

となります。

そして、P(A)はAに宝がある確率なので

3つ扉のうちどれかに宝があることを考えると

P(A)=1/3

となります。

P(Copen)はとりあえずそのままにしておきます。

Bに宝がある確率

同様に、

Bに宝がある確率をP(B)、

Cの扉が司会者によって開けられる確率をP(Copen)とすると、

Bに宝がある条件付き確率P(B|Copen)は、ベイズの式より

P(B|Copen)=P(Copen|B)×P(B)/P(Copen)となります。

ここで,P(Copen|B)はBに宝があった場合に

Cが開けられる確率なので、

司会者はハズレの扉を開かなくてはならないので、

Cしか開けることができないことを考えると、

P(Copen|B)=1

となります。

(Bには宝がありますし、Aはあなたが選んでいるので開けられません)

そして、P(B)はBに宝がある確率なので

3つ扉のうちどれかに宝があることを考えると

P(B)=1/3

となります。

P(Copen)はとりあえずそのままにしておきます。

AとBに宝がある確率の比較

上記の結果より、P(A|Copen)とP(B|Copen)の確率を比較します。

上記の式より、P(A|Copen)とP(B|Copen)の分母は

P(Copen)で共通なので、無視をして分子だけを比較します。

すると、

P(A|Copen)の分子= 1/2 × 1/3 = 1/6

P(B|Copen)の分子= 1 × 1/3 = 1/3

ということで、2×P(A|Copen)=P(B|Copen)となり、

Bの方に宝がある確率の方が2倍高いことになります。


つまり、Aを最初に選んだ時に、

そのAに宝がある確率よりも

司会者が選ばなかったBの扉に変更したほうが

宝のある確率が2倍になるので、

扉を変更したほうがお得ということです。


モンティ・ホール問題のPythonシミュレータ

上記の説明を見ても、確率は変わるはずない!!と、

どうしても納得できない人のためにシミュレータを作成しました(笑)


下記のPythonスクリプトを起動すると、

指定した回数分モンティ・ホールゲームを実施し、

扉を変えなかった時と、扉を変えた時の勝った回数を表示します。


下記のスクリーンショットは

それぞれ1000回のゲームをした場合の、

シミュレーション結果の出力結果です。



このように、扉を変えたほうが勝ち数が約二倍になり、

勝率が60%ほどになっていることがわかります。


これでも信じられない人はこの問題のことは忘れましょう(笑)

参考資料

ベイズ推定に関する

基本的な概念を理解するためには

下記の本がオススメです。

図解・ベイズ統計「超」入門  あいまいなデータから未来を予測する技術 (サイエンス・アイ新書)
図解・ベイズ統計「超」入門 あいまいなデータから未来を予測する技術 (サイエンス・アイ新書)