몬티홀 문제

2022. 8. 22. 19:19공학,과학/확률론

반응형

 몬티홀 문제를 내가 처음 접한건 행동경제학 혹은 게임이론과 관련한 책을 오래전에 읽었을 때일거다. 그런데 이 문제에 대해 완전히 잊고있다가 오늘 친구들이 모여있는 단톡방에 해당 내용이 올라와서 다시 생각해보게되었다.

 몬티홀 문제는 다음과 같다. 당신에게 3가지의 선택안이 있고 그 중에서 2개는 꽝이다. 당신이 한가지를 선택한 후 사회자가 나머지 둘 중 하나의 결과가 꽝인것을 확인 시켜줄 때 확인 되지 않은 두개의 선택안이 남는다. 이때 기존 선택을 유지하는 것과 선택을 바꾸는 것 사이에 어느 것이 유리한가?에 관한 문제이다. 

 이 문제에 대해 대다수의 사람들은 어떤 선택을 하든 확률이 동일한 것으로 판단한다. 하지만 기존 선택안이 맞을 확률은 1/3이며 선택안을 바꿔서 맞출 확률은 2/3이다.

 아마 해당 문제를 인터넷에서 찾아보면 사람들이 보통은 베이즈 정리를 이용해 확률계산을 하여 설명을 하는 것으로 보인다. 하지만 해당문제를 후행사건의 확률간섭으로 이해하고 접근하면 불필요하게 경우의수를 고려하게 된다. 사실 해당 문제는 확률에 대해 초등학교? 과정에서 처음 배울때부터 접하게 되는 배반사건 개념만 이해하면 되는 문제이다.

 몬티홀 문제에서 처음 선택을 한 시점에서 한번의 선택으로 정답을 선택할 확률은 1/3이다. 이 사실은 뒤의 어떠한 사건이 발생한다하여도 바뀌지 않는 명제이다. 따라서 해당 사건을 배반하는 선택안이 오직 한가지라면 사건을 배반하는 순간 정답을 맞출 확률은 2/3이 된다. 얼마나 직관적인가? 이에 대해 친구들과 나눈 대화 내용을 남긴다.

몬티홀 문제에 대한 직관적 접근

 추가적으로 해당 문제를 베이즈 정리로 푸는 방법은 이 블로그의 베이즈 정리 관련 글을 읽고 시도해보면 좋을것이다.

https://gkjeong.tistory.com/8

 

Bayesian theorem

Bayesian theorem 을 설명하기 앞서 역확률에 대해 언급한다. TIP 역확률 : 어떤 시행의 결과가 있을 때 그 이전 시행의 확률 구하는 과정 ex)A,B,C 세 사람이 존재하고 세사람이 가위바위보를 할때 한명

gkjeong.tistory.com

 

https://gkjeong.tistory.com/19?category=803575 

 

베이스정리 적용 사례(Example for applying the basien theorem), 후행사건이 어떻게 확률에 영향을 끼치는

개인적으로 정한 포스팅 스케쥴 상으로는 공학 관련 포스팅과 코딩 관련 글을 올려야 하는데 막상 적으려고 보니 전공 분야 쪽이 오히려 쉽게 설명하기가 어려워 개인적으로 아주 기초적인 부

gkjeong.tistory.com

 

 

----------------------
2024.04.16 에 통계적으로 보여줄 수 있냐고 묻는 질문이 댓글로 달려서 직접 코드를 작성해서 몬테카를로 시뮬레이션을 진행하여 히스토그램을 작성해 보았다. 관련 코드와 결과를 아래에 남긴다. 그 외에도 자세한 설명은 댓글에 추가로 남겼으니 해당 내용을 참고하면 이해하기 수월하겠다.

import random
import matplotlib.pyplot as plt

def simulate_monty_hall(switch, num_trials):
    win_count = 0
    for _ in range(num_trials):
        prize_door = random.randint(1, 3)
        first_choice = random.randint(1, 3)
        remaining_doors = [door for door in [1, 2, 3] if door != prize_door and door != first_choice]
        opened_door = random.choice(remaining_doors)
        if switch:
            final_choice = [door for door in [1, 2, 3] if door != first_choice and door != opened_door][0]
        else:
            final_choice = first_choice
        if final_choice == prize_door:
            win_count += 1
    return win_count / num_trials

num_trials=10000
win_rate_no_switch = simulate_monty_hall(False, num_trials)
win_rate_switch = simulate_monty_hall(True, num_trials)

plt.bar(['Switch', 'No Switch'], [win_rate_switch, win_rate_no_switch])
plt.ylabel('Win Rate')
plt.show()

 

 
 

 

-------------------------------------------------------------------------------------------------------------------------------------------------
2024.04.17

아래와 같이 질문을 받아 그에 대한 대답을 추가한다.

질문 받은 내용의 마지막 수식에 오타가 보이지만 이해하는데 큰 지장은 없다.

 

해당문제를 베이스 정리를 이용하지 않고 비교적 간단한 조건부 확률로 계산하는 과정을 댓글에 추가로 남겼다.

(본 게시글을 쓴 이유 자체가 너무 복잡하게 생각하지 않아도 풀릴 수 있다는 것을 보여주기 위해 남긴 글이므로 가장 쉬운 배반사건 개념 하나만으로 푸는 것을 설명하였으나, 조건부 확률로 접근한다하여도 확률자체에 대한 개념을 명확하게 가지고 사건을 큰 틀에서 접근하면, 인터넷에서 주로 설명하는 내용보다 훨씬 쉽게 설명 된다.)

 
반응형