본문 바로가기
Statistics

넷플릭스 DP에 나온 몬티홀 문제와 베이즈 정리에 대한 완벽 정리.zip

by 슬통이 2021. 9. 27.
반응형

요즘 넷플릭스의 D.P. 드라마가 아주 핫하다. 개인적으로 군대의 기억이 새록새록나서 너무 재미있게 봤다. (아.. 이제는 지나가버린 잊고싶은 시간들...ㅠㅠㅠㅋㅋㅋ) 그렇게 재미있게 드라마를 보던 나에게 호기심을 자극했던 에피소드가 있었으니, 바로 4편의 허치도 병장이 나오는 몬티홀 게임에 대한 역설이었다. 정해인이 연기했던 안준호 이병! 구교환이 연기했던 구교환 상병(연기 무엇..? 개인적으로 너무 "호"인 배우ㅋㅋ)도 풀지 못해서 끙끙거렸던 몬티홀 문제를 한번 풀어보자. 참고로, 몬티홀 문제는 여러가지 이름으로 불리는데, 몬티홀의 역설, 몬티홀의 딜레마 이런 것들이 결국 하나의 문제를 이야기하는 것이다. 영상 보기전 아래쪽 강의안 다운받아 보면 좋을 것이다. 참고로 영상의 R코드는 아래쪽에 있다.

몬티홀 (Monty-hall) 문제에 대하여.pdf
1.33MB

몬티홀 문제를 3가지 방법으로 푸는 방법

먼저 몬티홀 푸는 방법에는 여러가지가 존재한다. 베이즈 정리 (Bayes' theorem, Bayes' rule) 로 푸는게 능사가 아니라는 사실을 명심하자. 영상에서는 1번째 영리하게 직관으로 풀기, 2번째 코드로 풀어보기, 3번째 베이즈 정리를 사용해서 풀어보기 3가지 방법을 제시했다.

 

 

어이없게 영상찍기 바로 전날 머리를 망쳤는데, 졸지에 군대 머리가 되어버려서, 국방색 티셔츠까지 맞춰입어버림. 컨셉이 지려버려따.. 여기에 넷플릭스는 영상을 녹화하는 것을 막아놓고, 카피라이트를 걸어놔서 몹쓸 목소리 연기까지 함..

소름이 돋거나, 손발이 없어져도 그냥 모른채 하고 넘어가자.. 

시뮬레이션 R코드

영상의 2번째 방법 풀이인 몬티홀 시뮬레이션에 대한 코드이다. 복붙하셔서 돌려보시길. 실제로 손으로 계산한 것과 시뮬레이션의 계산 결과가 동일하게 나올때의 재미가 쏠쏠하다.

monti_hall_game <- function(){
    # 차 위치 생성
    car_position <- sample(1:3, 1)
    car_position
    
    # 첫 선택 생성
    my_choice <- sample(1:3, 1)
    my_choice
    
    if (car_position == my_choice) {
        # 차를 맞춘 경우
        cat(paste("Car position:", car_position, "\n"))
        cat(paste("Initial choice:", my_choice, "\n"))
        
        open_door <- sample(c(1:3)[-car_position], 1)
        cat(paste("Door No.", open_door, "opened \n"))
        
        final_choice <- c(1:3)[-c(open_door, my_choice)]
        cat(paste("Final choice:", final_choice, "\n"))
        
        result <- car_position == final_choice
        cat(paste("Result: Sorry, no car. ;( \n"))
    } else {
        # 차를 못 맞춘 경우
        cat(paste("Car position:", car_position, "\n"))
        cat(paste("Initial choice:", my_choice, "\n"))
        
        open_door <- c(1:3)[-c(car_position, my_choice)]
        cat(paste("Door No.", open_door, "opened \n"))
        
        final_choice <- c(1:3)[-c(open_door, my_choice)]
        cat(paste("Final choice:", final_choice, "\n"))
        
        result <- car_position == final_choice
        cat(paste("Result: You win a car!!\n"))
    }
    result
}

monti_hall_game()
result <- replicate(100000, monti_hall_game())
sum(result)
mean(result)
반응형

댓글