モンティ・ホール問題で勘違いしていた話
2017-12-15
- プログラミング
論理パラドクスという本を読んでいたら、モンティ・ホール問題について勘違いしていたことに気付かされたのでメモ。
結論としては、普通のモンティ・ホール問題についてはこの勘違いでも(たまたま)正しいが、一般的な状況でも成り立つと思っているとまずいという話。正直、長い割にはしょうもない結論になった感が拭えない。
以前作った「意識高い」タグがとてつもなくバカっぽいが、数学関係なのでつけとく。「数理系」タグにしとけばよかった…。 [2020-08-09注: 意識高いタグは削除した。]
勘違いの内容
モンティ・ホール問題で選択を変えることは「最初に選んだドア以外の2つのドアを選ぶ」ことと同じ意味だ。
確率を計算すると、最初の状態では当たりを選ぶ確率は1/3。
司会者が外れのドアを開けたあとは、ドアを変えた方が当たる確率は2/3になる。
たしかに最初に選んだドア以外の、2枚のドアを選んだときに当たる確率と同じになっている。
変形モンティ・ホール問題
なんとなく物語形式にしてみる。
モンティ・ホール問題で出てくるゲームをやることになった挑戦者。前日に猛勉強してコツ(a.k.a. 勘違い)をつかんだ。
「結局これは3つのドアのうち、1つを選ぶか、他の2つを選ぶかということだ。
司会者は必ず、挑戦者が選んだ1つのドア以外の2つのドアから、外れのドアを開ける。
ということは、選択を変えることは、他の2つのドアを選ぶのと同じだ。
1つより2つの方が当たる確率が高いのは当然だ。実際、確率は変えるときの方が変えないときの倍になっている。
簡単な話だ。選択を変えた方が勝ちだ!」
翌日、ゲームの説明を受ける挑戦者。
基本的にはモンティ・ホール問題なのだが、1つだけ違いがあった。
3つのドアA、B、Cのどれに賞品を入れるか、くじで決めるのだが、この確率が1/3ずつではなかった。
Aには\(\cfrac{9900}{10000}\)、Bには\(\cfrac{ 99}{10000}\)、Cには\(\cfrac{ 1}{10000}\)の確率で賞品を入れる。以降は同じで、司会者はどのドアに賞品が入ったか知っている。
こんなの絶対Aに決まってると思った挑戦者はあまりの興奮のため、誤ってBを選んでしまった。
だが選択を変えるチャンスが1回あるのはルールで決まっているのだ。そのときAに変えればいい…
しかし司会者が開けたのはAだった! Aは外れだったのだ。
挑戦者は思った。
「Aが外れだったのは驚きだな…奇跡的な確率じゃないか?
でもこれでBが当たりというのは確実だろう。BにはCの100倍近い確率で賞品が入るんだから。
…待てよ? 選択を変えるということは、残り2つのドアを選ぶということだったはずだ。
司会者がAを開けるまで、B以外が当たる確率は\(\cfrac{9900}{10000} + \cfrac{1}{10000}\)だった。これはBが当たる確率より100倍以上大きい。そしてそれがそっくり、Cが当たる確率になるはず…なのか?
だとすればBを選び続けるのはあまりに無謀すぎる。しかしCが当たりとはとても…」
当たる確率が高いのは選択を変える方なのだろうか、変えない方なのだろうか?
変形モンティ・ホール問題の定義
念のため、ちゃんと書いておく。この状況を変形モンティ・ホール問題と呼ぶことにする。
3つのドアA、B、Cのどれか1つに賞品が入っている(当たり)。残り2つのドアは外れ。
当たりのドアがどれか、挑戦者が当てるゲームをする。
このとき以下の条件がある。
- 賞品をどのドアに入れるかはくじで決める。A、B、Cに賞品が入る確率をそれぞれ\(P_A, P_B, P_C(0 \leq P_A, P_B, P_C \leq 1, P_A + P_B + P_C = 1)\)とする
- 司会者はどのドアに賞品が入っているか知っているが、挑戦者は知らない
- 挑戦者がドアを1つ選んだ後、司会者は残りの2つのドアのうち、外れのドアを(複数あれば無作為に選んで)必ず開け、選択肢から外す
- 司会者が外れのドアを開けた後、挑戦者は必ず選択を変えるチャンスを与えられる
以上の事項を司会者、挑戦者は共通で認識している。両者の知識に違いがあるのは、どのドアが当たりか知っているかどうかだけ。
このとき、選択を変えて当たる確率はいくらか?
そしてそれが「最初に選んだドア以外の2つのドアを選ぶ」ときに当たる確率と等しいのはどんなときか?
解く
挑戦者は常に最初にBを選び、司会者は常にAを開けるとする。
確率を計算する
ドアAに賞品が入っている事象をA、ドアBに賞品が入っている事象をB、ドアCに賞品が入っている事象をCとする。司会者がドアAを開ける事象をXとする。
選択を変えて当たる確率はベイズの定理から
\[\begin{aligned} P(C|X) &= \cfrac{P(X|C)P(C)}{P(X)} \\ &= \cfrac{P(X|C)P(C)}{P(X|A)P(A) + P(X|B)P(B) + P(X|C)P(C)} \\ &= \cfrac{1 \cdot P_C}{0 \cdot P_A + \frac{1}{2} \cdot P_B + 1 \cdot P_C} \\ &= \cfrac{2P_C}{P_B + 2P_C} \end{aligned}\]
なお、特に\[P_B = P_C\]のときは常に2/3になる。
シミュレーション
Python3.6.3で動作確認。
# Copyright (c) 2017 sankaku
# Released under the MIT license
# http://opensource.org/licenses/mit-license.php
# Simulator of the Monty Hall problem.
# The names of the three doors are 'A', 'B' and 'C'.
# The challenger always chooses 'B'.
# The host always opens 'A'.
from random import random
from functools import reduce
# Probabilities of the prize being behind the door
P_A = 1/3
P_B = 1/3
P_C = 1 - P_A - P_B
# P_A = 9900/10000
# P_B = 99/10000
# P_C = 1/10000
# number of trials
TRIAL = 100000
# Return the door the prize is hidden behind
def get_answer():
rand = random()
if rand < P_A:
return 'A'
elif rand < (P_A + P_B):
return 'B'
else:
return 'C'
def get_host_opened(answer):
if answer == 'A':
return 'C'
elif answer == 'B':
return 'A' if random() < 0.5 else 'C'
else:
return 'A'
def simulate_no_change():
answer = 'A'
while True:
answer = get_answer()
# Challenger chooses 'B', then ...
if get_host_opened(answer) == 'A':
break
# Challenger does not change the choice
return 'B' == answer
def simulate_change():
answer = 'A'
while True:
answer = get_answer()
# Challenger chooses 'B', then ...
if get_host_opened(answer) == 'A':
break
# Challenger changes the choice to the other door
return 'B' != answer
print('If the challenger does NOT change...')
num_hit_no_change = reduce(lambda x, y: x + y, [simulate_no_change() for _ in range(0, TRIAL)], 0)
print('Hit: {0}/{1} = {2}%\n'.format(num_hit_no_change, TRIAL, 100 * num_hit_no_change/TRIAL))
print('If the challenger DOES change...')
num_hit_change = reduce(lambda x, y: x + y, [simulate_change() for _ in range(0, TRIAL)], 0)
print('Hit: {0}/{1} = {2}%'.format(num_hit_change, TRIAL, 100 * num_hit_change/TRIAL))
検証
あまり自信がないので、普通のモンティ・ホール問題のときに、確率とシミュレーションが一致していることを確かめる。
このとき\(P_A = P_B = P_C = \cfrac{1}{3}\)で、
変えて当たる確率は\(P(C|X) = \cfrac{2P_C}{P_B + 2P_C} = \cfrac{2}{3}\)となる。
シミュレーションでは以下。
If the challenger does NOT change...
Hit: 33263/100000 = 33.263%
If the challenger DOES change...
Hit: 66367/100000 = 66.367%
変えて当たる確率は66.367%という結果。だいたい合ってる。
本題
冒頭の物語での答え
\(P_A = \cfrac{9900}{10000}, P_B = \cfrac{99}{10000}, P_C = \cfrac{1}{10000}\)の場合を考える。
変えて当たる確率は\(P(C|X) = \cfrac{2P_C}{P_B + 2P_C} = \cfrac{2}{101}\)になる。
シミュレーションでも同様の結果。
If the challenger does NOT change...
Hit: 98048/100000 = 98.048%
If the challenger DOES change...
Hit: 2054/100000 = 2.054%
よって、変えない方が当たる。
…実はこれは計算しなくてもすぐわかることだった。
いまは\(P_C\)が非常に小さいときを考えているが、極端な場合として0のときにはCは確実に外れだから、選択を変えない方が当たる。
「最初に選んだドア以外の2つのドアを選ぶ」のと等価な条件
これは\(P(C|X) = P(A) + P(C)\)ということだ。左辺は既に求めたので代入すると\(P_A = P_C\)または\(P_B = 0\)となる。これが答え。
2番目の場合は当然でつまらないので無視。
1番目の場合はAとCに賞品が入る確率が等しいということ。つまりAもCも同等。だから司会者がそのどちらを開けても、何も情報が増減しない。
ということは最初に選んだドアが当たる確率は前と同じ。残った1枚のドアが当たる確率は、選んでいない2枚のドアが当たる確率の合計値になるはずだ。
そう考えると納得はいく。
普通のモンティ・ホール問題のときは\(P_A = P_C\)が成り立っていたので、たまたま冒頭のような勘違いをしても正解だった。
変形モンティ・ホール問題ではこれが成り立つとは限らないので、冒頭の物語の挑戦者のように(自分のように)考えるとおかしな結果になってしまうという話だった。
補足
よくモンティ・ホール問題のわかりやすい解説で、ドアを大量に増やすというものがある。
たとえばドアを10000枚にして、挑戦者は1番目のドアを選ぶ。司会者は3172番目以外のすべてのドアを開けて、
1番目のドアのまま変えないか、3172番目のドアに変えるかというチャンスを与える。
こう考えると、選択を変える方が当たる確率が高いのは明らかだという説明だ。最初に挑戦者が選んだドアがそのまま当たる確率は非常に低く、残ったドアに当たりがあると考えてまず間違いない。
今回の変形モンティ・ホール問題はこれに似ているように見える。
9998枚のドアをグループA、1枚のドアをグループB、残りの1枚のドアをグループCと名付けて、
どのグループに賞品が入っているかという問題にすれば\(P_A = \cfrac{9998}{10000}, P_B = P_C = \cfrac{1}{10000}\)での変形モンティ・ホール問題になる。
このとき、選択を変えた方が当たる確率は2/3にしかならない…?
なぜこうなるのかというと、ドアを増やす解説で考えている状況はここでの変形モンティ・ホール問題とはまったく別物だからだ。
ドアを増やす場合、グループはあらかじめ決まっておらず、司会者がドアを開けて初めて定義できる。変形モンティ・ホール問題をグループ版にした場合は、あらかじめどのドアがどのグループかが決まっている。だからそのまま当てはめることはできない。
2020-08-09追記
移行前のブログにはコメント欄があったが移行後はなくなった。
本記事に来たコメントを残しておく。
投稿者: ベイズ
投稿日: 2019-07-06
変形モンティ・ホール問題は、3囚人問題と同じで、ドアAが開いた時にドアBかCが当たりである割合を1:2としているため、事前確率が99:1なら事後確率が99:2になるのです。
ドアCが当たりの時ドアAが100%開けられるのですが、ドアBが当たりの時ドアAが50%(ドアCも50%)開けられるかどうかは不明です。なお、本来のモンティ・ホール問題では、モンティが開けるドアは特定されていないため、最初の選択(B)が当たりの場合、モンティが開けるドア(A or C)の割合は関係ありません。