근본없는 코딩
[확률과 통계] 확률이란? - 몬티홀 문제 본문

01. 몬티 홀 문제
. 미국의 'Let's Make a Deal'이란 TV쇼에서 알려진 퀴즈쇼로, 쇼 진행자 'Monty Hall' 의 이름을 땄다.
3개의 문 중 1개의 문 뒤에만 자동차가 있고 나머지 2개의 문 뒤엔 염소가 있는 상황.
자동차가 어딨는지 맞춘다면 상품으로 얻을 수 있다.
참가자는 1번 문을 선택했고, 사회자는 다른 문 뒤에 염소가 있는 걸 보여주며 선택을 바꾸겠느냐고 묻는다.
이 경우 참가자가 선택을 바꾸는 게 유리할까?
여기서 딜레마가 발생한다. 참가자는 총 3가지 가능성 사이에서 고민하게 된다.
① 남은 문은 2개이니, 선택을 바꾸든 바꾸지 않든 정답을 맞힐 확률은 동일하다.
② 선택을 바꾸는 게 맞힐 확률을 높인다.
③선택을 바꾸지 않는 게 더 낫다.
02. 그래서, 바꾸는게 나은가 안바꾸는게 나은가?
. 고정적인 내 생각에 갇혔다면 오류를 고르게 된다.
대부분의 사람은 원래 선택을 고수한다.
염소가 있는 문을 제외하고 정답을 맞힐 확률은 어차피 2분의 1이니 바꿀 필요가 없다고 생각한다.
하지만 사실 바꾸는 게 유리하다.
간단히 말하자면, '진행자'라는 변수를 생각하지 않았기 때문이다.

위와 같이 3개의 경우의 수가 나오게되고,
내가 선택하고 바꿀 경우 차를 선택할 경우가 2/3이 되기 때문에, 66.666...%가 되는 것!
유튜브 내용 중 아래 유튜브에서 잘 설명되어 있어서 공유해본다.
03. 실제로 66.666...% 로 수렴할까?
확률이라는게 하나의 경우만 보는게 아니라,
이와 동일한 상황이 수백 수만개의 경우가 있음을 가정으로 하게된다.
내가 저 수 만번의 선택을 직접 해볼 수 없어서, 파이썬으로 코드를 짜서 돌려봤다.
(사실 이렇게 짜면 이미 66.6%를 만들어 내기 위한 코드같아서 안되는 것 같지만, 어쨌든 결론적으로 보면...)
내가 선택한 문이 정답이 아닐 경우 선택을 바꾼다면 그건 무조건 정답이 되므로(진행자가 오답을 열어주니까!),
score +1을 하도록 하였다.
import random
n = 1000000
car_door = []
select_door = []
score=0
for value in range(0, n):
car_door.append(random.randint(1, 3)) # n개의 정답지 생성
select_door.append(random.randint(1, 3)) # n명이 문을 선택
for i in range(0, n):
if select_door[i] != car_door[i]:
score += 1
print(score/n*100)
66.6288
다른 사람들 코드를 보니 실제로 시뮬레이션 하듯 짠 코드들이 다수다.
사실 그렇게 짜는게 맞는 것 같지만, 좀 귀찮았다.
이 글의 시작은 사실, 아래 책을 공부하면서 정리하려고 시작했던 건데,
처음 나온 예시인 몬티홀만 보다가 글 하나를 작성해버렸다.
책을 한 장 넘기는게 참 어렵구만...
이 책을 완독할 수 있는 날이 오길...
프로그래머를 위한 확률과 통계 : 네이버 도서
네이버 도서 상세정보를 제공합니다.
search.shopping.naver.com