論理パラドクスという本を読んでいたら、モンティ・ホール問題について勘違いしていたことに気付かされたのでメモ。
結論としては、普通のモンティ・ホール問題についてはこの勘違いでも(たまたま)正しいが、一般的な状況でも成り立つと思っているとまずいという話。正直、長い割にはしょうもない結論になった感が拭えない。

以前作った「意識高い」タグがとてつもなくバカっぽいが、数学関係なのでつけとく。「数理系」タグにしとけばよかった…。 [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つのドアは外れ。
当たりのドアがどれか、挑戦者が当てるゲームをする。
このとき以下の条件がある。

  1. 賞品をどのドアに入れるかはくじで決める。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)\)とする
  2. 司会者はどのドアに賞品が入っているか知っているが、挑戦者は知らない
  3. 挑戦者がドアを1つ選んだ後、司会者は残りの2つのドアのうち、外れのドアを(複数あれば無作為に選んで)必ず開け、選択肢から外す
  4. 司会者が外れのドアを開けた後、挑戦者は必ず選択を変えるチャンスを与えられる

以上の事項を司会者、挑戦者は共通で認識している。両者の知識に違いがあるのは、どのドアが当たりか知っているかどうかだけ。

このとき、選択を変えて当たる確率はいくらか?
そしてそれが「最初に選んだドア以外の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)の割合は関係ありません。