에듀테크 프로젝트 대시보드
몬티 홀 문제
문 3개 중 하나 뒤에는 자동차, 나머지 둘 뒤에는 염소가 있다. 문을 하나 고르면, 진행자가 정답을 알고 나머지 중 염소 문을 열어 보여준다. 이제 선택을 바꿀 것인가, 그대로 둘 것인가? — 답은 직관과 정반대다.
문을 하나 클릭해 선택하면 진행자가 염소 문을 열어준다. 그다음 유지할지 바꿀지 골라 결과를 확인하고, 여러 판을 반복해 두 전략의 누적 승률이 어떻게 벌어지는지 지켜보자.
손으로 몇 판 해서는 확률이 잘 안 보인다. 버튼을 누르면 10만 판을 즉시 시뮬레이션해서 "유지" 전략과 "바꾸기" 전략의 실제 승률을 비교한다.
처음에 A를 골랐다고 고정하고, 자동차가 어디 있는지 세 경우를 모두 따져보자. 진행자는 항상 정답을 알고, 염소 문만 연다.
| 자동차 위치 | 내 선택 | 진행자가 여는 문 | 유지하면 | 바꾸면 |
|---|---|---|---|---|
| A | A | B 또는 C (염소) | 당첨 | 꽝 |
| B | A | C (염소, 유일한 선택) | 꽝 | 당첨 |
| C | A | B (염소, 유일한 선택) | 꽝 | 당첨 |
세 경우 모두 똑같이 일어날 확률(1/3)인데, 유지는 1승 2패, 바꾸기는 2승 1패다.
import random def simulate(switch, n=100_000): wins = 0 for _ in range(n): car = random.randint(0, 2) pick = random.randint(0, 2) # 진행자는 pick도 car도 아닌 문 중 하나를 연다 (결과에 영향 없음) if switch: # 바꾸면: 처음에 틀렸을 때만 승리 → 곧 2/3 if pick != car: wins += 1 else: # 유지하면: 처음에 맞혔을 때만 승리 → 1/3 if pick == car: wins += 1 return wins / n print("stay: ", simulate(switch=False)) # ≈ 0.333 print("switch:", simulate(switch=True)) # ≈ 0.667
문이 100개 있고 그중 하나에만 자동차가 있다고 해보자. 하나를 고른 뒤, 진행자가 나머지 99개 중 염소 문 98개를 모두 열어 딱 하나만 남긴다. 처음 고른 문이 정답일 확률은 여전히 1/100 — 나머지 99/100의 확률이 진행자가 남겨둔 단 하나의 문에 몰린다. 바꾸지 않을 이유가 없다.