JAVA_2_몬티홀 문제_1(일반적인 접근)
* 비유는 접근성을 늘릴지라도 본질을 흐리기 마련입니다.
해당 포스트는 실습 과정 중 학습을 정리하는 글이기에 주관적인 내용이 포함되어 있을 수 있습니다.
잘못된 부분이 있다면 걸러들으시거나 댓글로 남겨주시면 감사하겠습니다.
자바의 기본 문법을 대충 훑은 지금 연습문제를 풀어가며 체화하는 게 제일 우선순위에 있을 것이고
그에 더 흥미를 갖기위해 평소에 관심 있던 주제에 관련된 코드들을 하나씩 연습해가며 포스트 해보려 한다.
해당 문제를 코드로 풀이한 내용을 찾았다면 다음 포스트를 보길 바란다.
첫 번째 포스트로 흔히 몬티홀 딜레마, 역설 등으로 불리는 Monty Hall Preblem에 대한 얘기를 하고자 한다.
몬티홀 문제는 몬티홀이라는 사회자가 진행하는 미국 오락 프로그램 《Let's Make a Deal》에서 유래한 퍼즐로 유명한데 이후 많은 매체에서 소개되어 더 유명해진 케이스다. 실제 최초로 문제가 소개된 곳은 메릴린 보스 사반트라는 세계에서 IQ가 제일 높아 기네스에 등재되어 유명해진 칼럼니스트가 1990년 《퍼레이드》라는 잡지에서 Q&A를 주제로 하는 '사반트에게 물어보세요'다.
이 문제를 첫 주제로 다루려는 건 커뮤니티를 눈팅하고 있는데 이 문제에 대한 포스트가 올라온 게 시작이긴 했지만 사실 그 전에도 몇 번이나 이 주제로 커뮤니티가 불탔던 적도 있기 때문에 단지 그 이유 때문만은 아니고 평소에 수학 과외를 할 때 워밍업으로 재밌는 문제를 풀어주곤 했고 그중 하나가 몬티홀 문제인데, 그동안 풀이를 하면서 이를 프로그래밍 언어적 관점에서 접근할 생각은 아예 하지 않았지만 이번에 이 문제를 다시 접하며 위키를 읽다 코딩적 접근법을 알게 된 것이 현재 코딩을 다시 배우는 나에게 상황적으로 맞았기에 포스팅하기로 생각했다.
문제를 간략히 소개하자면
-
문 3개가 있는데 한 문 뒤에는 자동차가 있고 나머지 두 문 뒤에는 염소가 있다. 참가자는 이 상황에서 문을 하나 선택하여 그 뒤에 있는 상품을 얻는다.
-
참가자가 어떤 문을 선택하면 사회자는 나머지 두 문 중에 염소가 있는 문 한 개를 열어 참가자에게 그 문에 염소가 있다고 확인시켜준다.
-
그 후 사회자는 참가자에게 선택한 문을 닫혀있는 다른 문으로 선택을 바꿀 기회를 준다.
-
사회자는 자동차가 어느 문 뒤에 있는지 알고 있다.
-
사회자는 염소가 들어 있는 문을 임의로 선택한다.
이때, 참가자는 선택을 바꾸는 것과 유지하는 것 중에 어떤 결정이 상품을 얻는데 유리한가?
물론 유명한 문제인 만큼 아는 사람이 많겠지만 만약 처음 접하는 사람이라면 이 문제가 면접에 나왔을때 어떤 느낌을 받을까?
딱 보기에도 바꾸든 안 바꾸든 상관없어 보인다. 처음 보기엔 포스트로 작성하기엔 너무 허접한 문제 아닌가...할 수 있을만하다.
하지만 이 문제는 단순히 풀이 능력의 측정을 위해 만들어진 게 아니라 사실 인간의 직관과 논리는 한참 동떨어져있다는 대표적인 예시인데, 기초 수학적으로는 조건부 확률을 다루는 문제라고 할 수 있겠지만 풀이 그 자체보다는 접근 방법에 있어 직관과 논리의 괴리에 대해 많은 생각을 하게끔 한다. 인간의 직관으로 봤을 때 이 문제의 답은 상관없다가 되기 쉽고 나 또한 이 문제를 처음 보고 몇 초만에 나온 답은 상관없다였다. 하지만 이 문제는 그런 직관을 비웃듯 바꾸는 것이 2배나 확률이 높다.
도대체 왜? 어떻게 그런 답이 나오는데?
라는 반응을 하는 사람도 있을 수 있기에 빨리 풀이로 들어가겠다. 아무래도 수학 과외를 할 때 '이 문제의 풀이는 고등수학에서 배우는 확률론에 의존하는데, 크게 조건부 확률의 정의와 곱셈정리로 접근할 수 있다'라 해설하곤 했지만 지금은 수학 시간이 아니니 계산적인 풀이보다 논리적인 접근을 통해 풀어보는 것을 택하겠다.
1. 일반인은 확률의 정의에 대해 오해를 하고 있다.
- 우리는 고등학교 때 확률을 사건이 일어날 경우의 수/모든 경우의 수로 배운다. 우리가 확률을 일상생활에서 쓸때는 직관적으로 해당 사건/전체 사건으로 보고 접근한다. 하지만 확률의 정의에는 "같은 확률로 일어나는 사건"이라는 가정이 정의보다 훨씬 중요하다. 한마디로 이 문제를 접근할 때 선택을 바꾸나 마나 선택할 수 있는 전체 가짓수는 2이고 당첨될 가짓수는 1이라 놓기에 선택을 바꿔도 당첨은 1/2, 그대로여도 1/2로 보고 상관없다라는 결론을 내지만 실제로는 앞서서 사회자가 개입했기 때문에 "같은 확률로 일어나는 사건"이라는 가정이 위배된 것이다. 그 때는 독립사건이 아니게되어 확률 계산에 곱셈정리가 등장하게 된다. 확률에서 단순히 고른다는 행위는 확률적으로 동등하지만 고른 후에 일어나는 여러 변수로 인해서 뒤에 일어나는 사건은 종속사건(다른 사건의 영향을 받아 경우의 수가 바뀌는 사건)이 되기때문이다. 이 말대로 역설에서 사회자가 오답인 문을 여는 순간 서로 다른 3개에서 1개를 선택하는, 각각 1/3의 독립적인 확률을 갖는 단순한 수학 문제에서 온갖 조건을 다 계산해야하는 문제로 바뀌어버린 것이다.
쉽게 종속사건의 예시를 들어보겠다. 각각 당첨 확률이 33%, 50%인 기계 A,B가 있고 당신에게 기계의 각 당첨확률을 안 알려준다고 생각해보자. 당신에게 기계 중 하나를 골라서 뽑기를 시키는 게임을 할 것이다. 이 게임은 얼핏봐도 전혀 공정하지 않다. 당신이 어떤 기계를 고르건 이지선다를 찍는 것이지만 실제로 선택 후 뽑기를 했을 때 당첨 확률이 1/2가 되는지 생각만 해봐도 충분하다. 이 게임은 직관적으로도 전혀 공평하지 않고 선택 한번으로 인해 당신이 당첨되는 확률은 기계 A, B의 뽑기 확률에 종속적이다. 이제 당신이 두번째 하는 선택은 사회자의 행위에 종속적인 사건이라는 것이 이 문제에서 얼마나 중요한지 조금은 이해가 되는가?
대충 직관적으로 봤었던 풀이가 안된다고 저렇게 길게 적어놨으니 그놈의 논리적인 풀이는 무엇인지 궁금해할 것이다. 사실 종속이라는 힌트가 주어진 이상 가장 쉽게 떠오르는 풀이는 계산을 통한 조건부 확률 풀이일 것이고 실제로도 그렇게 풀 수 있다. 실제로 새로운 정보가 실제 확률에 어떤 영향을 주는가에 대한 베이즈 정리라는 것이 존재하고 수학 문제 풀이라면 그를 이용한 조건부 확률 풀이가 정석이겠지만, 아까도 얘기했듯 지금은 수학시간이 아니다. 그렇기에 우리는 구하기 쉬운 확률과 그 사건이 무엇인지 먼저 알아보고 그것을 이용하는 계산보다 논리적 접근에 기반한 풀이를 사용해볼 것이다.
우리에게 주어진 문제에서 제일 구하기 쉬운 확률은 사회자가 관여하지 않았던 처음 시점의 당첨확률이고 그것은 1/3이다. 이를 어떻게 이용할 수 있을지 고민해보니 처음에 정답을 고르고 선택을 바꾸면 무조건 꽝이라는 것이 중요해보인다. 문제에서 선택을 바꿔야 유리할까라는 말은 선택을 바꿔서 당첨될 경우가 선택을 바꿔서 꽝일 경우보다 크다는 말과 같지 않은가? 이를 종합해보면 {선택을 바꿔서 당첨될 경우 = 처음에 꽝을 골라야만 일어남}, {선택을 바꿔서 꽝일 경우 = 처음에 당첨을 골라야만 일어남}이고 두 동치에서 후자의 확률은 2/3, 1/3로 쉽게 구할 수 있다. 다른 변수가 개입할 여지가 있나 검토해봐도 선택을 바꾼 후에 일어나는 사건은 당첨과 꽝 밖에 없고 처음에 무언가 고르는 사건도 당첨과 꽝 밖에 없기 때문에 선택 이전 이후의 사건들은 더 했을때 1이 되고 인과가 확실하기 때문에 논리적으로 타당하다. 쉽게 두번째 선택의 확률을 구하라고 했던 문제를 첫번째 선택의 확률을 가지고 해결한 것이다. 조건부 확률로 계산해야했던 복잡한 문제를 이처럼 해결할 수 있는 것은 사회자가 문을 여는 행동은 나의 첫번째 선택에 개입할 수 없기 때문에 가능하다.
복잡한 조건부 확률을 계산하는 이 문제를 동치인 사건으로 쉽게 푸는 이 기법은 확률의 특성에서 기인한 것이다. 확률에서 선택이라고 하는 것은 이미 일어나지 않은 사건에 대해서만 일어날 수 있는 사건을 추리는 것이다. 이미 벌어진 일은 확률이 아무 의미없다. 내가 코인 토스를 한다고 가정했을 때 동전을 던지기 전까진 확률이 반반이지만 동전을 던지고 결과를 확인해서 앞면이 나왔으면 확률이란 걸 구할 필요가 없다. 내가 사회자의 행동이 개입된 확률을 구하는 것이 어렵다면 그걸 굳이 구할 필요 없다. 변수가 개입할 수 없는 쉬운 확률을 구하면 되는 것이다. 사회자가 무슨 짓을 하든 그 행동은 내 첫 선택에 개입할 수 없으니까.
이제 풀이 방법을 대충 살펴봤으니 처음 얘기했던 주제로 다시 돌아가보자. 예상해보건데 지금까지의 글을 보면서 문제를 이렇게 푸려고 생각하지 않았던 우리에게 의문을 품지 않았나? 물론 보자마자 푼 괴물도 당연히 있겠지만 일반적으로 상관없다고 대답했던 우리는 상관없다는 생각이 들자마자 논리적인 사고가 멈췄을 것이라 예상한다. 고등학생 때 4점짜리 조건부 확률 문제를 보고 풀다가 매우 쉬워 보이기에 왜 여기에 이런 게 있지라고 하며 쉽게 답을 적은 뒤 아무 생각 없이 채점하는데 갑자기 긴 해설과 함께 그 문제를 틀린 경험을 한 적이 있지 않은가? 그때와 이 문제를 푼 경험의 공통점은 사람은 무의식적으로 직관에 크게 의지하며 직관은 논리를 가로막는 확증편향을 일으키기에 직관은 논리적인 사고를 방해할때가 많다는 것을 말해준다.
평소 문제 해결에 있어서 직관적인 접근이 도움이 될 때도 분명 존재하지만 문제가 복잡해질수록, 다루기에 신중을 요할수록 논리적인 접근을 해야한다. 특히 고고학 같은 학문 분야는 이 점을 매우 중요시하게 받아들이는데 학자들이 경계하는 최우선 사항이 처음 어떤 유물을 발견했을때 그 대상에 대한 자신의 첫 인상이다. 자신은 현대에 살기에 대상을 해석하는 과정에서 반영되는 context가 현재에 맞춰져 있지만 발견한 유물은 그 시대의 context에 맞춰 해석되어야 하기때문이다. 예시를 들면 이집트 아비도스 사원의 벽화에 헬리콥터, 우주선 등이 그려져 있다고 생겼던 무수한 음모론을 알것이다.
실제로 아직도 이를 믿는 사람이 존재하듯 얼핏 보면 일리가 있어보이지만 우리는 헬리콥터나 우주선, 탱크 등을 무수히 접하는 현대인들이기에 저 그림들을 보자마자 '이거 뭐야?'라고 하지만 이집트의 문자를 알고 있고, 벽화들이 자주 수정되며 그 과정에서 회가 벗겨진 다른 유물들을 많이 접한 고고학자들에게 그런 음모론을 주장하면 어떻게 반응할지는 뻔하다. 이처럼 우리가 어떤 대상을 해석할때 선험적인 직관이 가장 먼저 적용되고 그 이후 논리적인 사고로 돌입하는 것을 직관에 의해 생긴 확증편향이 방해하기때문에 종종 오류를 범하고 그게 심한 사람은 대상에 대한 정확한 해석을 들어도 대상에 대한 과거 첫 느낌을 그 해석에 끼워 맞추거나 부정해버리기 십상이다.
2. 보기를 늘려본다.
- 2, 3번은 1번에서 소개한 풀이와 결국 같은 말이지만 조금 더 풀어서 설명하기 위해 작성하려한다. 위 이미지는 도박마라는 일본 만화에 연재된 내용 중 일부이다. 현재 선택할 수 있는 가짓수는 총 3개인데, 이를 100개로 늘린다면 어떨까? 내가 처음 선택에 당첨될 확률은 1%인데 두 번째 선택에 당첨될 확률은 50%이다. 처음 선택할 땐 100개 중 1개를 뽑아야 하는데 갑자기 사회자가 아닌 거 98개 다 열고 이제 다시 고르라는 말인데, 당신이 태어날 때 빼고 1%의 확률을 뚫은 경험이 얼마나 되나 생각해보자. 그렇다면 처음 선택은 거의 아닐 거니까 두 번째 선택을 준 사회자에게 감동하지 않을까? 하지만 이해를 도와주는 이 예에서 착각하면 안되는게 또 직관적으로 단순히 1%가 50%가 되서 50배 유리해졌다는 실수를 하진 말자! 단지 첫번째 선택보다 두번째 선택의 확률 싸움이 훨씬 유리하다는 것을 이해시키기 위한 예이다. 실제로 문제에 이 예시를 적용해서 풀이해보면 바꾸는 게 99배 유리해진다. (선택을 안 바꿨을때 당첨 확률은 1% , 선택을 바꿨을때 당첨확률[= 선택을 바꾸기 전 꽝일 확률]은 99%)
3. 사회자는 어떨까?
- 이 경우도 위 설명들의 이해를 돕기 위한 예시 중 하나다. 사회자의 시점에서 생각해서 만약 사회자가 첫 선택 이후 느끼는 감정을 생각해보자. 이때 당신이 사회자라면 처음에 참가자가 정답을 골랐을때와 참가자가 정답을 고르지 않았을때 어떤 경우에 선택의 기회를 주고 싶은가? 각각의 경우 당신은 처음 꽝을 선택하면 바꿀 기회를 주기 싫을 것이고 처음 정답을 선택했다면 무조건 바꿀 기회를 주는 것이 상품을 아끼는데 유리할 것이다. 위의 얘기들과 일맥상통하지만 이 경우를 생각해본다면, 참가자와 사회자의 상황은 정반대이다. 당첨된다면 상품을 줘야되고 꽝이라면 상품을 지킬 수 있다. 이 때 참가자가 당첨을 고른다면 바꾸는 기회를 주고 싶어서 안달이지 않을까? 참가자가 꽝이라면 바꿔주기 정말 싫을 것이다. 이 때 첫 선택이 꽝일 확률은 2/3이다. 사회자가 66%의 확률로 주기 싫어하는 기회를 당신은 걷어차 버릴 것인가?
지금까지 몬티홀 문제에 일반적인 접근법을 알아봤는데, 사실 이건 이 문제에 대한 접근 중 하나일 뿐이고 다음이 진짜 내가 소개하고 싶은 포스트 내용이다. 결국 위와 같은 해설은 과외하던 학생들에게 해주던 설명 중 일부였고 내 풀이 역시 위 내용에 더불어 기껏해야 ABC로 각 문을 고정하고 모든 경우의 수를 계산하는 풀이가 끝이었다. 하지만 이를 시행 횟수를 늘려 접근하는 새로운 코딩식 접근법을 알게 되었고 이를 내 첫 번째 자바 예제로 쓸 생각이다.
하지만 그 전에 포스트가 너무 길어져서...
다음 글에 이어서 소개하겠다.