モンティ・ホール問題(確率のパラドックス)
「ドアを変えるべきか?」数学者をも惑わせた条件付き確率の罠
- 1
- モンティ・ホール問題(確率のパラドックス)の本質的な定義と直感的ビジュアルをシミュレーターで体験できる。
- 2
- 公式や証明の背景にある数学的意味と、厳密な導出ステップを解説。
- 3
- 実社会における工学応用(モンテカルロ・シミュレーションによる意思決定戦略の検証)のTypeScript実装コードを収録。
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
モンティ・ホール問題(確率のパラドックス)の基礎原理を体系化し、抽象的な計算を直感的に扱うために誕生した。
身につく武器・思考力
「ドアを変えるべきか?」数学者をも惑わせた条件付き確率の罠。この考え方を身につけることで、複雑な課題を単純化して数理モデルとして解く力が養われる。
実社会・ITでの活躍現場
- •モンテカルロ・シミュレーションによる意思決定戦略の検証
- •ITシステム・アルゴリズム実装における論理設計
- •データ分析やシミュレーションにおける数理モデリング
Layer 1 — 直感・シミュレーター
3つのドアのうち1つを選んでみよう。司会者モンティが残りのドアから「ヤギ(ハズレ)」を1つ開けて見せてくれる。ここで「ドアを変える」か「そのままにする」かを選択できる。さらに、「1,000回一括シミュレーション」ボタンを押して、ドアを変えた場合の勝率が本当に 2/3 (66.7%) になるかを実験で確かめよう。
Layer 2 — 定義・受験・証明
定義
3つのドアのうち1つに新車(アタリ)、2つにヤギ(ハズレ)がいる。 1. 挑戦者が1つのドアを選ぶ(当たる確率は )。 2. 司会者モンティは残りの2枚のうち「確実にヤギがいるドア」を開けて見せる。 3. 司会者は「残ったもう1つのドアに変えますか?」と尋ねる。 直感では「残りは2枚だから五分五分(50%)では?」と思えるが、数学的にドアを変えた場合の勝率は (約66.7%)と2倍に跳ね上がる。
公式・数理モデル
証明・導出
確率の樹形図による証明: 最初に挑戦者が選んだドアの状態は、次の3通り(すべて確率 )である。 - ケース1(確率1/3): 最初から車を選んでいた ➔ ドアを変えるとヤギ(負け) - ケース2(確率1/3): ヤギAを選んでいた ➔ モンティはヤギBを開けるしかない ➔ ドアを変えると車(勝ち!) - ケース3(確率1/3): ヤギBを選んでいた ➔ モンティはヤギAを開けるしかない ➔ ドアを変えると車(勝ち!)
したがって、ドアを変えた場合に勝てる確率は (66.7%)となる。モンティが「ハズレのドアを意図的に排除してくれる」という追加の情報を与えてくれたことで、残ったドアに確率が凝縮されるのである。
押さえておきたいポイント
- 人間の直感(50%だと思い込むバイアス)が数学的確率といかに乖離するかを示す代表例
- 「最初にハズレを選んでいた確率が 2/3 もある」ため、変更するとその 2/3 の確率でアタリに化ける
- 司会者が「アタリを知っていて、必ずハズレを開ける」という前提条件が確率の偏りを生む
- ベイズの定理によっても、事後確率 として厳密に導出される
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
モンテカルロ・シミュレーションによる意思決定戦略の検証
解析的に解くのが困難な複雑なゲームや金融モデルにおいて、ランダム試行を数千〜数万回繰り返して勝率を収束させるモンテカルロ法の実装コード。
1// モンティ・ホール問題のモンテカルロシミュレーション2function simulateMontyHall(trials: number = 10000): { switchWinRate: number; stayWinRate: number } {3 let switchWins = 0;4 let stayWins = 0;56 for (let i = 0; i < trials; i++) {7 const carDoor = Math.floor(Math.random() * 3); // 0, 1, 28 const initialChoice = Math.floor(Math.random() * 3);910 // モンティが開けるドア(車でなく、挑戦者の選択でもないドア)11 const availableDoors = [0, 1, 2].filter((d) => d !== carDoor && d !== initialChoice);12 const montyOpens = availableDoors[Math.floor(Math.random() * availableDoors.length)];1314 // 変更した場合のドア15 const switchedChoice = [0, 1, 2].find((d) => d !== initialChoice && d !== montyOpens)!;1617 if (initialChoice === carDoor) stayWins++;18 if (switchedChoice === carDoor) switchWins++;19 }2021 return {22 switchWinRate: switchWins / trials,23 stayWinRate: stayWins / trials,24 };25}2627const stats = simulateMontyHall(10000);28console.log(`変更した勝率: ${(stats.switchWinRate * 100).toFixed(1)}%`); // 約 66.7%29console.log(`維持した勝率: ${(stats.stayWinRate * 100).toFixed(1)}%`); // 約 33.3%
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元