일변량 확률 변수 샘플링하는 법
개요
확률변수의 구체적인 실현을 구하는 방법이다.
정리
일변량 확률변수 $T$ 의 누적분포함수 $F = F_{T}$ 가 증가 함수라 하자. 그러면 일양분포를 따르는 확률 변수 $U \sim U \left( 0,1 \right)$ 에 대해 다음이 성립한다. $$ T = F^{-1} \left( U \right) $$
설명
누적분포함수의 치역은 항상 $[0,1]$ 이라는 점을 생각해보면 당연하면서도 영리한 방법이다. 뭐가 됐든 $0$ 부터 $1$ 사이의 값 하나만 구하면 반드시 $F$ 의 치역에 떨어질테고, 그에 대응되는 원상을 찾으면 $T$ 가 어떤 분포든 샘플링을 할 수 있기 때문이다. 사실 엄밀하게 따지고 들면 어떤 분포든 가능한 건 아니지만, 이러나 저러나 $U$ 가 떨어지는 점을 거꾸로 찾는다는 아이디어는 어떤 분포든 유효하다.
$U$ 는 어떻게 찾나?
$U$ 만 있으면 원하는 일변량 확률변수의 누적분포함수를 찾을 수 있을텐데, 정작 그 $U$ 를 뽑을 땐 이 방법을 사용할 수가 없어서 $U$ 만은 다르게 샘플링해야한다.
아날로그하게 일양분포를 따르는 $U$ 의 실현을 뽑는 방법은 이를테면 다음과 같다:
- (1) 난수표(0부터 9까지의 숫자들이 무작위적으로 적혀있는 표)를 준비한다.
- (2) 주어진 시드넘버 $s$ 에 따라 난수표의 앞부분을 버리고, $s$ 부터 난수표를 읽는다.
- (3) 충분히 긴 길이 $n$ 까지 따라 적는다. 예를 들어 34920 73125 에서 $n=4$ 자리까지 적기로 정했다면 3492가 된다.
- (4) 맨 앞에 $0.$ 을 붙이면 된다. 예를 이어서 적자면 $u = 0.3492$ 을 얻는다.
디지털하게 일양분포를 따르는 $U$ 의 실현을 뽑는 방법은 이를테면 다음과 같다:
- (1) 난수 생성기(0과 1을 의사난수로 반환하는 알고리즘)를 준비한다.
- (2) 충분히 긴 $n$-bit 메모리를 준비한다.
- (3) 시드 넘버 $s$ 에 따라 메모리에 $n$ 개의 $0$ 혹은 $1$ 을 저장한다. 예를 들어 10110 10011에서 $n=4$-bit라면 1011이다.
- (4) 메모리에 적힌 이진수를 십진법으로 바꾸고 $\left( 2^{n}-1 \right)$ 로 나눈다. 예를 이어서 적자면 $1011_{2} = 11$ 이고 $2^{4}-1 = 15$ 이므로 $u = 0.733 \cdots$ 를 얻는다.
증명
$P \left( F^{-1} (U) \le t \right) = F(t)$ 를 보이면 된다. $F$ 는 증가함수기 때문에 역함수 $F^{-1}$ 가 존재하고, 모든 $t \in \mathbb{R}$ 에 대해 $$ \begin{align*} & P \left( F^{-1} (U) \le t \right) \\ =& P \left( F \left( F^{-1} (U) \right) \le F (t) \right) \\ =& P \left( U \le F (t) \right) \\ =& F(t) \end{align*} $$ 다. 마지막 등호는 $U$ 가 일양분포를 따르기 때문에 성립한다.
■
$F^{-1}$ 가 존재하지 않는다면?
만약 서포트가 연결되지 않았다면, 다시 말해 확률밀도함수가 $0$ 인 부분이 있다면 위 증명에서 쓰인 $F^{-1}$ 가 존재하지 않을 수 있다. 예를 들어 다음과 같이 봉우리가 두 개고 가운데가 완전히 $0$ 인 확률밀도함수 $f$ 가 있다면 $F$ 는 증가함수가 아니게 되어서 정리의 내용이 적용되지 않는다.
그렇지만 우리는 직관적으로 우리의 랜덤샘플이 정확하게 저 점에 찍힐 리가 없다는 것을 알고 있다. 더 정확히 말하자면 정확히 저 점이 뽑힐 확률이 $0$ 임을 알고 있는건데, 이렇게 골치아픈 경우엔 측도론의 내용을 끌고와 $F$ 의 치역에서 값이 증가하지 않는 점들의 집합을 생각했을 때 그것이 영집합임을 지적해서 거의 확실히 샘플링에 문제가 없음을 보이면 된다.
다만 이런 고찰은 ‘일변량 확률 변수 샘플링’이라고 하는 간단한 내용에 비해 지나치게 어렵고, 어떻게 일양분포에서 원하는 랜덤샘플을 뽑는지에 대한 원리만 정확히 알아가면 충분하다.