brunch

You can make anything
by writing

C.S.Lewis

로또, 주사위, 자주 나온 수에 걸어야 할까?

큰 수의 법칙에 대해 자주 하는 착각

통계학에 대한 지식이 있는 사람이라면, 이렇게 포스트 하나씩 들여가며 뭘 그리 당연한 소리를 하나...할 수도 있다. 그렇지만 종종 많은 이들에게 통계적으로 정립된 사실과 현실 속에서 직관적으로 인식하는 방식 사이에 괴리가 생기기 마련이고, 또 종종 '큰 수의 법칙'에대한 오해로 인해 미신같이 다음과 같은 생각을 하기도 한다. 



A: 3이 많이나왔으니까 3에 걸자

B: 아니야, 5가 적게 나왔으니까 5에 걸어야지



사실 많은 이들이 '어차피 다 확률은 똑같아, 다 운이야'라고 말하면서도, 그래도 '조금씩은 더 유리한 숫자가 있지 않을까?' 하는 생각을 한번씩 해보기 마련이다. 그래서, 나처럼 직접 해보고 눈으로 봐야 적성이 풀리는 사람들을 위해, 숫자를 뽑는 프로그램을 짜서 눈으로 분포를 직접 살펴보기로 했다. 


사실 현실적으로 '완벽한 무작위'를 재현하기란 매우 힘들다. 이상적으로 윳놀이는 모든 윳이 50프로의 확률로 앞, 아니면 뒤가 나와야 하고, 주사위는 정확히 6분의 1의 확률로 각각의 숫자가 나와야 하지만, 보통 사람이 주사위를 던지거나, 윳을 던질 때, 혹은 로또 추첨기에서 공을 뽑는 실행을 할 때는 우리도 모르는 미세한 'Bias'가 개입될 수 있다. 이러한 'Bias'들은 (비록 우리가 의도적으로 조절할 수 있을 정도가 아니더라도) 확률이 미세하게 치우치도록 만들 수도 있다. 전자 방식의 추첨의 경우, 수학적인 확률대로 '무작위'적으로 선별되도록 프로그래밍이 되겠지만, 그게 아니라면 약간의 변수들이 (예를 들어, 로또 추첨기의 외벽에 미세한 구멍이 생겨 한쪽으로 바람이 샌다던지, 특정 숫자 공의 무게가 미세하게 다르다던지) bias를 만들어낼 것이다. 



그럼에도 불구하고, 매 번 독립시행으로 이루어지는 추첨은 조금의 편차가 있더라도, 사실상 무작위에 가까운 확률을 매번 보여주게 되고, 따라서 이전의 시행 결과를 아무리 분석해보아도 이후 시행에 아무런 영향을 주지 않는다는 것을 우리는 너무나도 잘 안다. 그렇기에 '3이 많이 나왔으니까 3에 걸자'라는 방식의 생각은 사실 아무런 의미가 없다.


그렇다면 '5가 적게 나왔으니 5에 걸자'라는 생각은 어떨까? 그게 그거라고 생각할 수도 있겠지만  문득 어느날, 로또 추첨을 보다가 문뜩 이런 엉뚱한 생각이 떠올랐다. '큰 수의 법칙'에 의해 독립시행을 무한히 늘려나가면, 시행 횟수가 커질 수록 시행 결과의 분포가 수학적 확률에 수렴하게 된다. 즉, 처음엔 똑같이 확률이 1/6식인 주사위 게임일지라도 '운'에 의해 특정 숫자가 자주 나오거나, 적게 나올 수 있다. 그러나 이러한 시행을, 100번, 1000번, 10000번, 횟수를 점점 늘려가며 Barplot을 그려보면, 분포가 거의 평평해져서 1~6까지의 숫자가 거의 동등한 비율로 나타남을 확인할 수 있다. 그렇다면 


1) 100번 시행한 시점에서 특정 숫자가 적게 나왔다면 (분포가 불규칙하다면), 


그리고 


2) 1000번, 10000번으로 시행을 늘려갈 수록에 분포가 평평해질 것이라는 게 확실하다면


100번의 시행이 발생한 시점에서 적게 등장한 숫자가, 이미 많이 등장한 숫자보다 재등장할 확률이 높지 않을까? 그러니까 시행을 할 때의 수학적인 확률은 100번째이든 1000번째이든 똑같이 1/6인게 맞지만, 큰 수의 법칙이 성립하려면 적게 등장한 숫자가 더 많이 등장해야만 하는게 아닌가?


결론부터 말하면 그런 거 없다. 서로 영향을 미치지 않는 주사위와 같이 독립시행일 경우엔 무조건 매번 1/6의 확률이다. 그럼에도 종종 사람들은 '큰 수의 법칙에 의해 분포가 고르게 될 것이기 때문에, 시행이 늘어날수록 적게 나온 수가 더 많이 나오는게 맞다' 는 착각을 많이 하게되는 것 같다. 


걷으로보기엔 충분히 말이 되는 것처럼 보인다. 그래서 이번 기회에, 숫자 추첨을 해주는 간단한 코드를 짜서 큰 수의 법칙이 적게 나온 숫자가 더 많이 나오도록 보장해주지 않는 이유를 살펴보자. 




먼저, 주사위를 굴리는 dice라는 함수를 만들어보자. 또, 주사위를 굴려 아예 결과까지 플롯해주는 plot_dice라는 함수도 만들어보자. dice의 파라미터로 rounds를 지정하여 몇 회 주사위를 굴릴건지 설정할 수 있게 했으며, 함수를 실행하면 리턴하는 값은 각 숫자가 몇 번 나왔는지이다. 


참고로 numbers파라미터를 이용해 몇 개의 숫자 중에서 추첨할건지 설정할 수 있다. 주사위면 6, 로또면 45 등 마음대로 설정하면 된다. 

100라운드로 설정해서 함수를 실행해보니, 100번의 시행 결과를 보려준다. 


plot_dice를 실행해서 이번엔 주사위를 굴린 결과를 플롯해보자.


역시 100은 그렇게 '큰 수'라고 볼 수 없나보다. 5가 특히 적게 나온 모습을 볼 수 있다. 만일 10,000라운드를 반복한다면 어떻게될까?


모든 수들의 비율이 비슷해졌다. 그럼 과면, 다른 숫자들보다 5가 더 자주 나와서 이렇게 균형이 맞게 된 것일까? 눈치빠른 사람들은 이미 눈치챘겠지만 그렇지 않다. y축의 frequency를 보면, 100번 주사위를 던졌을 때 y의 범위는 0에서 20, 10만 번 던졌을때 y축의 범위는 무려 1750까지이다. 즉, 그래프의 상대적 비율때문에 '작은 수'일때의 편차가 '큰 수'일때보다 훨씬 커보이는 것이다. 


즉, 큰 수의 법칙은, 시행을 반복할수록에 전체 시행횟수대비 편차의 비율이 줄어들어 통계적 확률이 수학적 확률에 가까워진다는 것이지, 결코 절대적인 균형을 맞추기 위해 특정 숫자의 등장 빈도가 보장된다는 이야기가 아니다. 따라서 '5가 적게나왔으니 5에다 걸자'는, '3이 나왔으니 3에다 걸자'와 다를 바 없는, 아무 소용 없는 이야기이다. 


이왕 살펴본김에 조금 더 자세히 살펴보자. 


이번엔 정말 로또복권처럼, 1부터 45까지의 숫자중에서 추첨하는 경우를 생각해보자. 과연 앞 시행에서 '적게 뽑힌 숫자'가 이후의 시행에서 더 뽑힐 기회가 많은가? 라는 질문에 답하기 위해, 시행의 시점을 끊어서 분포를 살펴보도록 하겠다. 


우선, 10,000번의 시행을 하되, 100번째에서 한번 끊어 앞 100번의 시행동안 나온 분포를 살펴보고, 1만번 반복했을때의 분포와 비교해보도록 하겠다. 




100번 실행했을때보다 1만번 실행했을 때 훨씬 분포가 고른 것을 볼 수 있다. 그럼, 100번 시행의 시점에서부터 이후 시행에선, 처음에 적게 나왔던 숫자들이 (19, 30 등) 훨씬 더 많이 등장했다고 볼 수 있을까? 결론부터 말하면 앞서 설명했듯 그렇지 않다. 100 번 시행에서의 편차는 '100번의 시행'을 전체로 놓고 비교하면 유의미한 편차일지 몰라도, 1만으로 전체 시행의 횟수가 커지면 정말 미미한 차이가 되기 때문이다. 


100번의 시행 시점에서 4는 한 번 밖에 나오지 않았고, 6은 무려 5번이나 나왔다. 이들의 편차는 5-1 = 4로, 등장 빈도의 평균값인 2.2의 거의 2배에 달한다. 평균에서 상당히 떨어져있기 때문에 꽤 큰 편차라고 볼 수 있다. 


그럼 100번의 시행 이후에, 10만 번의 시행까지 4와 6이 얼마나 자주 나왔는지 살펴보자: 4는 196번, 6은 226번 등장했다. 이들의 편차는 30으로, 앞선 100번의 시행에서의 편차인 4보다 절대적인 수치는 크지만, 등장 빈도의 평균값이 220의 13퍼센트정도밖에 되지 않는다. 100번의 시행을 했을 때보다 훨씬 미미한 값인 것이다. 



마지막으로 첫 100번의 시행과, 이후 1만번까지 (9900번의 시행)동안의 숫자 등장 분포를 scatterplot으로 그려보자. 



먼저 상관계수가 이 둘은 거의 전혀 상관관계가 없음을 보여주고 있다. 이전의 등장 빈도는 이후의 등장빈도에 영향을 줄 리 없다. 


x축의 범위가 0~5뿐이므로, 좀더 보기 쉽게 10,000번~100만번 시행으로 다시 플롯을 그려보자





상관계후는 -0.27에, scatterplot 모양도 상당히 랜덤임을 볼 수 있다.


이쯤되면 황당하기까지 하다. 사실 모든 시행이 독립시행이라면 이전 시행이 어쨌건 당연히 확률은 항상 같다. 당연한 소리를 뭐 이렇게 장황하게 했나 싶을지도 모른다. 그러던 와중 '큰 수의 법칙을 오해해서 받아들이면, 적게 등장한 수일수록에 뽑힐 확률이 높다고 생각할수도 있겠구나'하는 막연한 생각이 들어 간단히 코드를 짜서 실험해봤다. 



큰 수의 법칙이, 공평한 등장 빈도를 보장해주는 법칙이라고 오해하면 안된다.


매거진의 이전글 네이버 API를 사용한 검색어 트렌드 크롤링 툴-2부
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari