
モンティ・ホール問題を100万回まわしたら、司会者が中身を知らないだけで勝率が2/3から1/2に落ちた
モンティ・ホール問題は、たぶん確率の話題でいちばん有名なものだ。
ドアが3枚あって、1枚の後ろに車、2枚の後ろにヤギがいる。あなたが1枚選ぶと、中身を知っている司会者が残り2枚のうちヤギのドアを1枚開けてみせる。ここで「選び直しますか?」と聞かれる。変えるべきか、変えないべきか。
答えは「変えるべき」で、勝率は1/3から2/3に上がる。私もそれは知っている。知っているのだが、毎回どこかで引っかかる。ドアが2枚に減ったのだから五分五分ではないのか、という感覚が消えない。
そこで、引っかかっている部分を切り分けるために実際に回した。特に確かめたかったのは、「司会者が中身を知っている」という条件を外したらどうなるかだ。
実験に使ったコードの全文はGitHubに置いています。
まず100万回
3枚のドアで100万回。司会者は中身を知っていて、必ずヤギのドアを開ける。
| 戦略 | 実測 | 理論値 |
|---|---|---|
| 変更しない | 0.33397 | 1/3 = 0.33333 |
| 変更する | 0.66603 | 2/3 = 0.66667 |
教科書通りだ。ここに驚きはない。
司会者から「知識」を取り上げる
次に、司会者の設定だけを変える。司会者も中身を知らず、プレイヤーが選ばなかった2枚から適当に1枚開けるとする。当然、車を開けてしまうことがある(実測33.34%)。その回はゲームとして成立しないので除外し、残った「たまたまヤギが出た回」だけで勝率を測る。
プレイヤーから見える光景は、1本目の実験と完全に同じだ。自分が1枚選び、別の1枚が開いてヤギがいて、2枚が残っている。それでも——

0.4990。 五分五分だ。
同じ「ヤギのドアが1枚開いた」でも、それが必ずヤギを開けると決まっている人の行動なのか、たまたまヤギだったのかで、価値がまるで違う。前者では「司会者は車のドアを避けた」という情報が付いてくるが、後者には何も付いてこない。
私がずっと引っかかっていたのは、たぶんここだった。ドアが2枚に減ったこと自体には、何の情報もない。情報は司会者の制約から来ている。
100枚のドアで見る
3枚だと差が小さくて実感しにくい。ドアを100枚に増やし、司会者に98枚開けてもらう。

最初に選んだ1枚が当たっている確率は1/100だ。それは司会者が何をしようが変わらない。だから最後に残ったもう1枚が当たっている確率は99/100になる。実測でも0.9900だった。
ただし、これは「司会者が98枚も消してくれる」からこその数字だ。枚数を変えて測るとはっきりする。

司会者が1枚しか開けてくれないなら、ドアが100枚あっても変更にほぼ意味がない(0.0099 対 0.0097)。変更が得になるのは「変更先の候補が絞られているから」であって、「ドアが減ったから」ではない。
枚のうち司会者が枚開ける場合、変更したときの勝率は
になる。とを動かして眺められるようにした。
何回やれば納得できるのか
最後に、少し実務的なことを測った。この手の話は「自分で試してみればわかる」と言われがちだが、実際に何回まわせば「1/2ではない」と言い切れるのか。
勝率2/3のコインを振り続け、帰無仮説「勝率は1/2」に対する片側二項検定が初めて5%を切る試行数を、2,000回ぶん記録した。

中央値は21回。90%点でも62回だった。運が悪くても100回まわせばほぼ決着がつく。「気になるなら自分で試せ」は、この問題に関しては現実的な助言だった。
ただし、途中経過を見ると気は抜けない。

40人が同時に試したとして、序盤は勝率が1.0の人も0.3の人もいる。数十回では「たまたま」がまだ効いている。見せかけの回帰の回で見たのと同じ構図で、少ない試行から読み取れることは思ったより少ない。
まとめ
- 3枚・100万回で、変更しない0.334、変更する0.666。理論通り
- 司会者が中身を知らず、たまたまヤギを開けた場合は0.499。 プレイヤーから見える光景は全く同じ
- 情報は「ドアが減ったこと」ではなく「司会者が車を避けたこと」から来ている
- 枚に一般化すると、変更の得は司会者が消してくれる枚数で決まる。100枚でも1枚しか開かないなら0.0099で、変更しない場合とほぼ同じ
- 「1/2ではない」と5%水準で言うのに必要な試行は中央値21回、90%点62回
腑に落ちたのは確率の側ではなく、情報の出所のほうだった。
司会者が開けたドアの中身は、どちらの設定でもヤギだ。目の前の事実は同じ。違うのは、その事実が生まれた経緯のほうにある。「必ずヤギを選んで開ける」という制約のもとで出てきたヤギには情報が乗っていて、「適当に開けたらヤギだった」というヤギには乗っていない。
同じことを、私は仕事でも取り違えている気がする。誰かが「これは大丈夫でした」と報告してくれたとき、その言葉の価値は、その人が何を確認しなかったかで決まる。全項目を見た上での「大丈夫」と、目についた範囲での「大丈夫」は、文字列としては同じものだ。受け取る側からは区別がつかない。
区別する方法はひとつしかない。中身ではなく、手順のほうを聞くことだ。
このブログでは、機械学習の仕組みを実際にコードで実装して確かめた実験をテーマ別に整理しています(拡散モデル・Transformer・強化学習・多様体学習・過学習など)。


