Cloud&BigData/Machine Learing

몬테카를로 시뮬레이션~

루키~ 2015. 1. 26. 08:05

분석을 하면서 "몬테카를로 시뮬레이션"을 한번쯤은 들어봤을 것이다. 

몬테카를로는 무작위 값을 활용하여 확률적으로 계산하는 알고리즘을 이야기한다. 

이렇게 확률적으로 계산함으로써 원하는 수치의 확률적 분포를 구할 수 있게 된다. 

이를 위해 많은 수의 실험을 바탕으로 한 통계를 이용해 확률적 분포를 알게 되므로, 이것을 바로 몬테카를로 시뮬레이션이라고 한다. 


몬테카를로 시뮬레이션 개념

몬테카를로는 통계 자료가 많고 입력값의 분포가 고를수록 정밀하게 시뮬레이션 할 수 있다. 

그래서 컴퓨터를 이용해 시뮬레이션을 주로 한다. 

또한 이론적 배경이나 복잡한 수식으로 계산해야 하는 경우, 근사치를 계산하기 위해서도 몬테카를로를 많이 사용한다. 


몬테카를로 시뮬레이션은 모나코의 유명한 도박 도시이름을 따서 만들었다고 한다. 

초기 도박사들이 여러번의 임의 추출을 바탕으로 특정한 카드 조합이 나올때까지 계산했다고 한다. 



또한 폰 노이만은 원자폭탄 개발 계획인 맨해탄 프로젝트에서 중성자 확산 시뮬레이션에 이 기법을 사용했다고 한다. 

최근에도 위험관리, 품질관리, 금융공학 등에서도 몬테카를로를 널리 사용한다. 


몬테카를로 시뮬레이션 예제

몬테카를로는 임의의 수를 반복적으로 발생시켜서 계산하는 방식이다. 

위키피디아에 따르면 몬테카를로 시뮬레이션은 다음과 같은 절차를 따른다고 되어 있다. 


1. Define a domain of possible inputs. (입력값의 범위를 정한다.)

2. Generate inputs randomly from a probability distribution over the domain. (확률분포에 따라 입력값을 랜덤하게 만든다.)

3. Perform a deterministic computation on the inputs. (입력값에 대한 계산을 한다.)

4. Aggregate the results.(계산 결과를 통합한다.)


절차만 보면 그리 어려워보이지 않지만, 실제 적용하려면 난감한 것이 사실이다. 

그래서 위키피디아의 원주율 파이를 구하는 예제를 통해서 설명해 보려고 한다. 



원주율 파이 값을 구하기 위한 많은 수학적 알고리즘이 있다. 

"아르키메데스의 부등식", "비에타의 공식", "라이프니츠 급수", "마친의 공식", "오일러의 공식", "BBP 공식"등 ...


그리고 실제 값은 다음과 같다고 한다. 

π=3.141592653589793238462643383279502884197169399375⋯


몬테카를로 시뮬레이션으로 파이 값을 어떻게 구할까?

1. 정사각형을 그리고 그 안에 원을 그린다.  

2. 정사각형 안에 수많은 점을 고르게 분포한다. 

3. 분포한 전체 점의 개수와 원 안에 분포한 점의 개수를 센다. 

4. 전체 점의 개수(N)과 원 안의 점 개수(n)의 비율로 원주율 파이를 계산한다. 


다음 그림을 보면 쉽게 이해할 수 있을 것이다. 

가로와 세로의 길이가 2인 정사각형을 그리면, 사각형의 넓이는 2x2 = 4가 된다. 

그리고 수많은 임의의 점을 만들어서 원점으로부터 거리가 1이내인지를 확인하면 원 안에 분포하는지를 알 수 있다. 

원의 넓이는 "파이 x 반지름의 제곱"이므로 위 예제에서는 반지름이 1이므로 원의 넓이가 곧 파이값이 된다. 

그러므로 사각형의 넓이와 원의 넓이의 비율을 계산하면 원주율 파이가 나온다는 것이다. 


1개 점으로 하면 0 또는 4가 나올 것이다. 

그러나 100,000 정도의 점으로 하면 원주율 파이와 비슷한 3.14xxx 값이 나오게 된다. 


몬테카를로 시뮬레이션은 불확실성을 확률 분포에 의해 해결하기 위해서 데이터 분석에서도 많이 사용한다. 

이것도 일반적인 데이터 분석과 마찬가지로 미리 가정을 수립하고, 시뮬레이션과 같은 실험으로 이를 증명해 나가는 것이다.