본문 바로가기
수학의 재미/시뮬레이션

순간의 선택으로 득템하자. 몬티홀 문제

by hustler78 2022. 7. 1.
728x90
반응형

확률 통계 분야에 아주 유명한 문제가 있습니다. 몬티 홀 문제(Monty Hall problem)인데요.

사실 몬티 홀은 사람 이름입니다.  미국 퀴즈 프로그램의 진행자였던 Monty Hall의 이름이 붙게 된 문제입니다.

 

Let's Make a Deal 의 진행자 Monty Hall 선생, 유명한 문제에 자신의 이름이 붙어 일약 스타가 되었음.

몬티홀 문제는 1990년 [퍼레이드]라는 잡지에 소개되면서 확률분야의 유명한 문제로 알려지게 되는데, 그 잡지에 실린 원문을 그대로 써보면 다음과 같습니다(나무위키 참조)

 

Suppose you’re on a game show, and you’re given the choice of three doors. Behind one door is a car, behind the others, goats. You pick a door, say #1, and the host, who knows what’s behind the doors, opens another door, say #3, which has a goat. He says to you, "Do you want to pick door #2?" Is it to your advantage to switch your choice of doors?

당신이 한 게임 쇼에 참여하여 세 문들 중 하나를 고를 기회를 가졌다고 생각해봐라. 한 문 뒤에는 자동차가 있으며, 다른 두 문 뒤에는 염소가 있다. 당신은 1번 문을 고르고, 문 뒤에 무엇이 있는지 아는 사회자는 염소가 있는 3번 문을 연다. 그는 당신에게 "2번 문을 고르고 싶습니까?"라고 묻는다. 당신의 선택을 바꾸는 것은 이득이 되는가?

 

결론부터 말하면 선택을 바꾸는 게 이득이 됩니다. 자동차를 얻을 확률이 높아지는 거죠.

 

간략히 살펴보면 이렇습니다.

자동차를 선택할 확률은 1/3로 같다.

그런데 Monty Hall 께서 참여자가 고르지 않은 문 중에, 자동차가 없는 방을 공개하죠. 즉 만일 참여자가 Room#1을 처음에 골랐다 하면 Monty Hall 께서는 3번 방을 폭파시키죠.

 

자동차 있는 2번문을 열어줄 순 없지!!

그런데 그림을 딱 보면,  

  • 참여자가 애시당초 자동차 방을 선택할 확률은 1/3
  • 다른 두 방 중 하나에 자동차가 있을 확률은 2/3 

입니다. 근데 Monty Hall 께서 2/3 확률을 가진 방 2개 중에 필요 없는 거 하나를 공개했죠?  따라서 위의 사실이 아래처럼 바뀝니다.

  • 참여자가 애시당초 자동차 방을 선택할 확률 1/3
  • 다른 한 방((왜냐면 한 방은 사회자가 열어버렸으므로))  중 하나에 자동차가 있을 확률 2/3

따라서 참여자는 자신의 선택을 뒤집어서 자동차를 고를 확률을 높일 수 있다는 이야기죠.

 

더 자세한 사례는 Korea 위키피디아에  있습니다. 아래 그림을 살펴보면 이해가 쉬울 겁니다.

 

 

독자를 이해시키는데 탁월한 능력이 있는 한 위키러의 역작, 출처: 위키피디아

 


사실 이문제는 답이 명확함에도 불구하고 세계 유수의 학자들이나 머리 좀 쓴다 하는 브레인 고수들을 수십 년 동안 헷갈리게 만든 악명 높은 문제입니다. 가만 생각하면, 사회자가 문 하나 열어줬다고 해서 확률이 바뀌는 건가 싶은 거거든요.  

 

이론적으로는 어쨋든 선택을 바꾸는 게 유리한데, 이게 맞는지 코드를 통해서 알아볼까요?

 

import matplotlib.pyplot as plt
import random

def Monty_Hall_Problem():

    room = ['goat', 'car', 'goat']
    switch_win_prob = []
    myway_win_prob = []
    nSimulation = 10

    switch, myway = 0, 0

    for i in range(nSimulation):
        random.shuffle(room)
        k = random.randint(0, 2)

        if room[k] != 'car':
            switch += 1
        else:
            myway += 1
        switch_win_prob.append(switch / (i + 1))
        myway_win_prob.append(myway / (i + 1))

    plt.plot(switch_win_prob, c='c', label='switch win prob changes')
    plt.plot(myway_win_prob, c='m', label='no action win prob changes')
    plt.text(nSimulation / 2, switch_win_prob[-1] * 1.1, 'switch win \nprob:{:.2f}'.format(switch_win_prob[-1]))
    plt.text(nSimulation / 2, myway_win_prob[-1] * 0.6, 'myway win \nprob:{:.2f}'.format(myway_win_prob[-1]))
    plt.title('Simulation {} times'.format(nSimulation))
    plt.show()

if __name__ == '__main__':
    Monty_Hall_Problem()

 

code를 간략분석하면 다음과 같습니다.

 

 

    room = ['goat', 'car', 'goat']
    switch_win_prob = []
    myway_win_prob = []
    nSimulation = 10

    switch, myway = 0, 0

○ room 3원소 list를 정합니다.

○ switch_win_prob 는 선택을 변경해서 자동차를 얻을 확률, myway_win_prob는 선택을 고집하여 자동차를 얻을 확률을 시뮬레이션 횟수를 증가시키며 계산하여 저장하는 변수

○ 선택변경으로 자동차 득템 횟수와 선택 고집으로 자동차 득템횟수를 각각 switch, myway라 함

 

 

    for i in range(nSimulation):
        random.shuffle(room)
        k = random.randint(0, 2)

        if room[k] != 'car':
            switch += 1
        else:
            myway += 1
        switch_win_prob.append(switch / (i + 1))
        myway_win_prob.append(myway / (i + 1))

random.shuffle 함수로 방을 막 섞음. 방1,2,3에 랜덤 하게 자동차 및 염소 배치

○ 퀴즈 참여자가 방3개에 대응하는 index 하나를 고름. k=random.randint(0,2)

○ 만일 참여자가 고른 방이 애당초 자동차 방이 아니었다면 선택 변경함으로써 무조건 자동차 득템 -> switch 증가

○ 애시당초 자동차 방이었다면 괜히 변경하면 염소 득템, 따라서 안 바꿔야 자동차 득템

○ 누적된 횟수를 $i+1$로 나눠주면(파이썬은 i=0부터 시작하므로) 시뮬레이션 횟수당 확률이 나옴

 

 

결과를 보실까요?

 

 

시뮬레이션 10번, 벌써 확률차이가 보이죠?

 

 

n=100번. 아직 확률이 요동치네요.

 

 

 

n=10만번. 이제 비로소 확률이 안정되게 나옵니다. 각가 2/3,  1/3 임.

 

 

시뮬레이션 결과에서도 볼 수 있듯이, 선택을 바꿔서 성공할 확률이 $\frac23$, 실패할 확률이 $\frac13$이므로 참여자는 선택을 바꾸는 게 현명해 보입니다. 

 

염소랑 차에 대한 자료를 찾다보니, 재밌는 사진이 있네요. 

염소 울음소리 경적을 장착할 수 도 있는 테슬라

 

728x90
반응형

'수학의 재미 > 시뮬레이션' 카테고리의 다른 글

e 를 시뮬레이션으로 구하기  (0) 2022.06.30
판별식을 시뮬레이션으로?  (0) 2022.06.09

댓글