Monte Carlo Method
몬테카를로 방법 (Monte Carlo Method) 이란, 어떤 값 (또는 함수값)을 근사적(approximation)으로 계산하는데 있어 확률분포로부터 생성한 무작위 샘플(표본)들을 이용하는 방법이다.
이를 위해 큰 수의 법칙 (Law of large number, LLN) 를 이용한다.
- LLN: 에 대하여
우리가 구하고자 하는 값을 라고 할 때, 를 어떤 확률변수의 기대값으로 표현할 수 있다고 하자. 즉, .
만약 가 로부터 생성한 무작위 샘플(표본)이라면, LLN에 의해 다음이 성립한다.
따라서, 몬테카를로 방법을 쓰기 위해서는 주어진 확률분포로부터 무작위 샘플을 생성하는 (난수생성) 알고리즘이 필요하다.
대부분의 알려진 확률분포들은 무작위 샘플을 생성하는 알고리즘들이 연구되어, R, Python 등에서 쉽게 사용할 수 있다.
Sampling Methods
Inverse CDF
Inverse CDF 샘플링 방법은 Probability Integral Transform (PIT)를 이용한 방법이다.
- PIT: 연속 확률 변수 X의 CDF를 라고 할 때, 는 을 따른다.
만약 는 에서의 균일분포 이면 다음이 성립한다.
즉, 를 에서 생성하면, , , 는 (또는 )를 따르는 랜덤 샘플이 된다.
만약 를 구하기가 어려운 경우에는 다음과 같은 방법을 따른다.
-
의 support 내의 숫자열 을 적당히 찾아 를 구한다.
- 의 support =
-
인 를 생성하여 를 만족하는 가장 가까운 에 대하여 다음의 를 구한다.
- 위의 는 를 linear interpolation 한 값이다.
Example of Inverse CDF
, 인 확률밀도함수를 갖는 확률변수를 무작위 생성한다고 하자.
, 이므로 , 이 된다.
따라서 분포로부터 생성한 샘플이라면, 는 주어진 에서 생성된 샘플이 된다.
Rejection Sampling
확률분포 를 따르는 를 생성하고자 한다: .
Rejection Sampling은 다음과 같은 순서로 진행된다.
-
보다 난수생성이 쉽고 다음을 만족하는 확률분포 를 찾는다.
- 를 의 upper envelop이라고 한다.

-
로부터 를 생성한다.
-
으로부터 를 생성한다.
-
만약 (또는 )를 만족하면 를 로부터 생성된 난수로 받아들인다 (accept). 아니라면 (reject), 1번으로 돌아간다.
-
위 과정을 원하는 크기의 샘플을 얻을때까지 반복한다.
Example of Rejection Sampling
Inverse CDF방법에서의 예시와 같은 함수 인 확률밀도함수로 갖는 확률변수를 Rejection sampling을 이용해 생성해보자.
는 의 확률밀도함수이면서 를 만족한다. 또한 로부터 데이터를 생성하는것은 쉽다.
이때 envelop 함수는 가 된다.
이 경우, rejection sampling 알고리즘은 다음과 같다.
-
인 생성하기
-
인 생성하기
-
를 만족하면 를 로 부터 생성된 샘플로 받아들이고 아니면 버린다.
Importance Sampling
인 를 구하는 문제로 다시 돌아가보자. 여기서 로 가정한다.
보다 난수생성이 쉽고 support가 의 support를 포함하는 확률분포 가 있다고 하자.
를 를 이용하여 다음과 같이 표현할 수 있다.
이 로부터 생성된 난수라고 하자. 라고 하면, 다음은 를 근사(approximate)하는 값이 된다.
이 때의 를 importance sampling 함수라고 부른다.
Example of Importance Sampling
Inverse CDF 방법에서의 예시와 같은 함수 인 확률밀도함수를 갖는 확률변수를 라고 하자.
이 때, 인 를 추정하는 문제를 생각해보자.
이므로 로 쉽게 계산할 수 있지만, Importance sampling방법으로 근사적으로 를 구해볼수도 있다.
로 보면, 이 된다.
따라서 에서 데이터 을 생성하여 를 이용하여 구할 수 있다.