베이즈 통계(번외): Monte Carlo simulation

SAMSUNG CSC

마르코프 체인(Markov Chains)과 몬테카를로 시뮬레이션(Monte Carlo simulation)의 원리를 알면 MCMC 알고리즘에 대한 접근이 보다 수월하다. 이 두 가지 중 몬테카를로 시뮬레이션이 더 근본적인 측면이라고 생각되니 그것부터 먼저 소개한다.

몬테카를로 시뮬레이션을 공부하기 위해 30년 전 대학원에서 사회통계학을 배울 때 쓰던 교과서를 펼쳤다. 섹션 제목이 빨간 색연필로 둘러져 있다. “몬테카를로 방법은 크게 유용할 것입니다.”라는 Miller McPherson 교수의 목소리가 생생하게 들리는 듯하다.

빈도주의 통계학에서 몬테카를로 시뮬레이션은 무엇보다 우리가 구하려고 하는 확률변수의 표집분포(sampling distributions)를 특정하는데 사용된다. 즉, 확률변수의 표집분포가 지닌 평균과 표준오차를 구하는데 사용된다.

베이즈 통계까지 아울러서 말한다면 , 몬테카를로 시뮬레이션은 추리 통계의 원리들을 사용하여 미지의 양(unknown quantity)를 추정하는 하나의 방법이다. 여기서 추리 통계의 원리란 모집단으로부터 무작위로 표본을 추출하는 과정을 말한다. 몬테카를로 시뮬레이션의 핵심은 무작위 표본추출(random sampling)이다. 무작위 표본은 모집단을 잘 대표하고 있기 때문에 그 표본의 통계값(statistics)은 모수(parameters)에 대한 좋은 추정값이 된다. 특히 실제로 표본조사를 반복하지 않고 컴퓨터 시뮬레이션만으로 모수 추정이 가능하기 때문에 아주 편리한 방법이다. 이 때문에 몬테카를로 시뮬레이션은 수학적 계산을 통해서 구하기 어렵거나 구하기 불가능한 어떤 값(모수)을 추정하는데 널리 사용되고 있다.

구체적으로 몬테카를로 시뮬레이션을 살펴보자. 우리가 구하려고 하는 양(quantity)을 확률변수 의 기대값, 즉, 으로 놓자. 그리고 의 분포로부터, 독립적이며 무작위로,  (표본의 크기가 )을 생성하여, 다음 식처럼 그 값들의 평균을 취하여  의 추정치로 삼는다.

통상 는 확률변수 의 함수이다.  평균을 계산할 수 있는 양이면 몬테 카를로를 적용할 수 있다. 몬테 카를로 시뮬레이션의 핵심적인 논리적 기반은 대수의 법칙(the law of large numbers)이다. 수학적으로 아래와 같이 표현할 수 있다.

즉, 이 무한대가 될 때(표본 추출을 무한히 반복할 때) 오차의 절대값이 0일 확률이 1이다. IID(independent and identically distributed: 동일한 분포라는 말은 표본의 각 개별적인 관찰이 동일한 평균과 분산의 모집단을 갖는다 의미. 복원추출을 하면 그 조건을 만족하게 됨) 표집에서  은 확률변수이며, 그 자체가 평균과 분산을 가지고 있다.

의 평균은  이고, 의 분산(variance)은  이다(여기서 은 표본의 크기이다).  중심 극한 정리(CLT)로부터, 우리는 오차 가 평균이 0이고, 분산이  인 정규분포에 근사함을 안다. 오차의 크기는 표본의 갯수가 아니라 표본의 크기에 달려 있다. 표본의 크기가 5()인 표본을 100번 뽑는 대신 표본의 크기가 20()인 표본을 100번을 뽑으면 오차가 줄어들고 추정이 더욱 정교해진다. 동일한 크기의 표본()을 100번이 아니라 1,000번을 뽑으면 표집분포가 더욱 매끄러워질 뿐, 추정이 더욱 정교해지지는 않는다. 오차와 분산은 추정의 정교함(precision)을 알려준다. 몬테카를로 표집에서 오차 제곱의 평균은 인데, 를 아는 경우가 거의 없으므로 표본값들로부터 추정한다. 아래 둘 중 어느 것으로 추정해도 된다.

혹은,

(이상은 Stanford 대학교 통계학과의 Art Owen 교수가 인터넷에 올려놓은 책 원고의 제2장(Simple Monte Carlo)을 크게 인용하였다.)

Wonnacott & Wonnacott(1985)의 Introductory Statistics(4th ed.)에 나온 사례를 가지고 직접 몬테 카를로 시뮬레이션을 수행해서 모집단의 평균()과 분산()을 추정해보자.

미국의 미들타운(Middletown)이라는 도시에 살고 있는 18세부터 24세까지의 젊은이 100명에 대해 그들이 희망하는 가족의 크기를 추정해보자. 다음 표는 실제 조사 결과를 보여준다.

                                         모집단 분포
                                                                                        상대빈도
x 빈도 p(x) 일련번호
0

1

2

3

4

5

6

7

2

6

49

22

15

3

2

1

.02

.06

.49

.22

.15

.03

.02

.01

01-02

03-08

09-57

58-79

80-94

95-97

98-99

100

N = 100 1.00

이산확률분포의 평균과 분산을 추정하는 공식은

이 공식을 이용하여 모집단의 평균과 분산을 추정하면 평균은 2.64명, 분산은 1.2명이다. 이렇게 공식을 사용하여 구할 수 있으면 몬테카를로 시뮬레이션을 통한 추정이 불필요할 것이다. 여기서는 몬테카를로 시뮬레이션이 모수를 어떻게 추정하는지 그리고 얼마나 잘 추정하는가를 보기 위해 공식을 이용해 모수를 계산해 두었다.

크기가 5명인 표본을 뽑아서 이 모수들을 추정해보자. 난수표(table of random digits)를 이용해서 100 이하의 수를 무작위로 뽑았더니, 77, 94, 30, 05, 39이다. 그것을 일련번호로 삼아서 그에 해당되는 희망 자녀수를 위의 표에서 찾아보면, 3, 4, 2, 1, 2이다.

일련번호 희망 자녀수 X
77

94

30

05

39

3

4

2

1

2

모수가 2.64인데, 표본평균이 2.4이니 그다지 나쁘지 않은 추정값이다.

이제 동일한 방법으로 5명의 표본()을 반복해서 뽑는다. 표본을 뽑을 때마다 평균()을 계산한다. 예컨대 이렇게 1천번을 반복하면 우리는 1,000개()의 를 얻게된다. 여기서 의 의미가 이중적이 됨에 유의할 필요가 있다. 은 개별 표본(5)의 크기가 아니라 표본의 갯수(1,000)이면서 동시에 평균()들로 구성된 표본(그것이 바로 표집분포를 구성한다)의 크기(1,000)이다. 아래 공식처럼 1,000개 의 평균을 계산하면 의 추정치()를 얻는다.

그런 다음 분산 은 아래 식을 가지고 추정할 수 있다.

이렇게 얻은 추정치는 위에서 공식으로 추정한 모평균 2.64명, 모분산 1.12에 근사할 것이다.

오늘날 난수표와 손을 사용해서 난수를 구하는 경우는 없을 것이다. Random.org에 가면 손쉽게 원하는 난수(random digits)를 얻을 수 있고, MS Excel[함수 RAND()]을 이용해도 손쉽게 난수를 구할 수 있다. 조건이나 함수를 부여하면 다양한 모습의 난수가 발생된다. MCMC도 몇 가지 조건 아래에서 난수를 발생시켜서 사용한다. 몬테카를로에 대한 설명은 이 정도로 마치겠다. 몬테카를로 하면 조건부 난수 발생(random number generation)을 통한 시뮬레이션을 떠올리면 되겠다. (2020-11-19)

참고문헌

Owen, Art. 2009-2013. Chapter 1-2. 책 초고.

Wonnacott, Ronald J. & Thomas H. Wonnacott. 1985. Introductory Statistics, 4th ed. John Wiley & Sons. Chapt 6.

(Bayes 학습)(10) Monte Carlo simulation-사례

몬테카를로 방법을 좀 더 확실히 파악하기 위해 막내와 사례를 만들어 보았다. 한국청소년 정책연구원에 2003년부터 2008년까지 수행한 한국청소년패널조사(KYPS)(중2패널) 데이터를 다운로드 받아서 사용했다.

설문조사 중 다음 문항에 대한 응답자의 반응(2003년 것만 사용)을 선택해서 시뮬레이션에 사용했다. 이 시뮬레이션은 표집분포(sampling distribution)의 학습을 위한 것이다. 시뮬레이션으로 표집분포를 구해서 그것의 분포 모양이 표본의 크기에 따라서 그리고 표본의 갯수에 따라서 어떻게 변하는가를 확인해 보는 것이다. 물론 모수()도 근사해(approximate) 보았다. 몬테카를로 시뮬레이션은 파이썬(Python)으로 했고, 그림은 SPSS를 이용해서 그렸다.

33-1) 부모님과 나는 많은 시간을 함께 보내려고 노력하는 편이다.

1. 전혀 그렇지 않다   2. 그렇지 않은 편이다  3. 보통이다   4. 그런 편이다   5. 매우 그렇다

이 조사에 참여한 학생은 3,449명이다. 시뮬레이션 공부를 위해 그것을 표본(sample)이  아니라 모집단(population)이라고 가정한다.

그 가상 모집단의 응답을 보면, 평균()이 3.24, 표준편차()가 0.950이며, 그것의 분포를 그래프로 나타내면 아래와 같다.

population

다음에는 그 가상 모집단에서 크기가 5()인 무작위 표본을  뽑아서 평균()을 구하고, 그것을 1천번 반복하였다. 그 1천개의 를 가지고 표집분포를 그리고 거기에 정규분포 곡선을 적합해 보았다. 이 표집분포의 평균은 3.2466이고 표준편차는 .43589이다. 이 표집분포는 그런대로 정규분포에 근접하고 있다.

sample5

이번에는 동일한 크기의 표본을 3천개를 뽑았다. 평균은 3.2381이고, 표준편차는 .43484이다. 즉, 평균보다 표준편차에 좀 더 큰 변화가 보인다.

sample5_3000

다시 동일한 크기의 표본을 5천개 뽑았다. 그 표집분포의 평균이 3.234이고, 표준편차는 .42823이다. 표준편차에는 별로 차이가 없는데, 평균은 또 좀 달라졌다. 한 눈에도 전체적으로 정규분포 곡선에 더욱 잘 적합하고 있음을 알 수 있다.

sample5_5000

다음에는 크기가 10인 표본을 1천개 무작위로 뽑아서 동일한 방식으로 표집분포를 구했다. 이 표집분포의 평균은 3.2492이고, 표준편차는 .30629이다. 평균은 거의 차이가 없는데 표준편차가 줄었다. 분포의 모양은 위의 것과 육안으로 구분이 잘 가지 않으나 아래 축을 자세히 보면 의 변동폭이 많이 좁아졌음을 알 수 있다. 범위가 1.00-5.00에서 2.00-4.50으로 좁아졌다.

sample10

동일한 크기의 표본을 3천개를 뽑았다. 그 표집분포의 평균은 3.2361이고, 표준편차는 .28998이다. 표집분포의 모양이 더욱 정규분포 곡선에 잘 적합한다.

sample10_3000

다시 동일한 표본을 5천개 뽑았다. 그 표집분포의 평균은 3.2364이고, 표준편차는 .29644이다. 평균은 거의 변화가 없고, 표준편차가 다소 변했다. 표집분포의 모양은 더욱 종 모양의 정규분포 곡선에 근접한다.

sample10_5000

그래서 이번에는 크기가 20인 무작위 표본을 1천개 뽑아서 동일한 방식으로 표집분포를 구했다. 이 표집분포의 평균은 3.2363이고, 표준편차는 .20441이다. 역시 평균은 그다지 차이가 없으나 표준편차가 현저하게 줄어들었다. 의 변동폭이 2.75-3.75로 일 때보다  좁아졌다.

sample20

동일한 크기의 표본을 3천개 뽑았다. 그 표집분포의 평균은 3.2383이고, 표준편차는 .21841이다. 평균은 변화가 없고, 표준편차는 미세하게 변했다. 종 모양에 더욱 가까워졌다.

sample20_3000

다시 동일한 크기의 표본을 5천개 뽑았다. 그 표집분포의 평균은 3.2376이고, 표준편차는 .21286이다. 평균과 표준편차가 3천개의 경우와 거의 다르지 않다. 그런데 표집분포의 모양은 지금까지 살펴본 것들 중 정규분포 곡선에 가장 잘 적합하다.

sample20_5000

마지막으로 이번에는 동일한 크기()의 표본을 1만개를 뽑았다. 그 표집의 평균은 3.2371이고, 표준편차는 0.21196이다. 아주 예쁜 종 모양의 분포이다.

sample20_10000

이상의 몬테카를로 시뮬레이션을 통해서 얻은 결과를 종합해보면, 1) 모집단 평균의 근사에 영향을 미치는 요소는 표본의 갯수이다. 그러나, 그 갯수가 어느 정도를 넘어가면 표본의 갯수를 증가시켜도 별로 차이가 없다. 2) 표집분포의 표준편차를 결정하는 중요한 요소는 표본의 크기이다. 표본의 크기가 20 정도 되니 상당히 정밀한 표집분포를 얻을 수 있다. 3) 표본의 갯수가 크게 늘어나면(1,000개에서 10,000개까지 늘려 보았다), 평균과 표준편차에는 별로 변화가 없고, 표집분포가 점점 매끄러운 모양으로 정규분포 곡선에 근사한다.

이 마지막 사례를 갖고 조금 놀아보자. 이것은 20명 크기의 표본()을 10,000개 뽑아서 그것들의 평균()으로 만든 표집분포(sampling distribution)이다. 사실 이 표집분포도 하나의 표본이라고 생각할 수도 있다. 실제로 동일한 크기의 표집분포를 몇 개 구해보면 표집분포의 평균과 표준편차가 조금씩 달라지는 것을 볼 수 있다. 평균()도 하나의 확률변수이고 평균들의 평균()도 하나의 확률변수인 것이다. 그러한 표집분포를 1천개를 뽑아서 그것들의 평균()으로 만든 표집분포를 만들어 볼 수도 있을 것이다. 그러면 그것은 평균들의 평균들로 이루어진 표집분포가 될 것이다. 그러면 그 표집분포의 평균은 , 즉, 평균들의 평균들의 평균이 될 것이다.

이러한 몬테카를로 시뮬레이션은 잠깐 동안에 시행할 수 있다. 컴퓨터 환경이 열악했던 30년 전에는 상상하기 어려웠던 일이다. 지금은 프로그래밍만 좀 해주면 PC만 가지고도 그러한 시뮬레이션 놀이가 가능하다. 무한대()라는 개념을 감각적으로 느낄 수 있는 시대가 온 것이다!

그나저나 이 자료에 따르면 부모님과 함께 가급적 시간을 보내려는 청소년들이 그렇지 않은 청소년들보다 많은 것 같아 다행스럽다. 부모와 자식이 자리를 함께 해야 대화를 하게 되고, 대화를 해야 서로에 대한 이해가 깊어질 것이기 때문이다.

(막내가 아빠의 집요한 프로그래밍 요구에 응하느라 수고한다. 덕분에 공부는 좀 되겠지만.)