← 실험실
ASTERXOR / 실험실

무작위가 아닌 수를 무작위로 추정하기

정사각형에 점을 충분히 뿌리면 원이 숫자에 관한 질문에 답하기 시작합니다.

단위 정사각형 안에 균등하게 뽑은 점들을 사분원 내부 여부에 따라 색으로 구분한 그림.
합성 균등 표본과 x² + y² = 1 경계입니다. 면적 비율을 이용하는 추정법을 보여 줍니다.
실험실ASTERXOR / LEON LEUNG

원주율은 변하지 않습니다. 우리의 추정값이 변할 뿐입니다.

그림에 점을 흩뿌리는 것보다 원주율을 계산하는 좋은 방법은 많습니다. 그런데 바로 그 점 때문에 몬테카를로 추정을 설명하기에 좋습니다. 답을 이미 알고 있으니 불확실성을 볼 수 있습니다. 점을 하나 추가할 때마다 좋아진다고 가장하지 않고, 무작위 절차가 고정된 값에 접근하는 모습을 관찰할 수 있습니다. 핵심은 소수 자릿수를 모으는 새 방법이 아니라 표본으로 무언가를 측정하는 법과 확실성을 더 얻는 비용입니다.

표본이 늘면 불확실성은 줄지만, 한 번의 실행에서 운이 사라지는 것은 아닙니다.
면적을 개수로 바꾸기

원은 정사각형 안에 확률을 숨긴다

두 좌표가 0에서 1까지인 정사각형에 반지름 1인 원의 사분면이 들어갑니다. 정사각형의 넓이는 1, 사분원의 넓이는 원주율을 4로 나눈 값입니다. 점이 정사각형 전체에 균등하게 놓이면 곡선 안에 떨어질 확률도 원주율을 4로 나눈 값이 됩니다. 안에 들어온 점의 비율에 4를 곱하면 원주율 추정값을 얻습니다.

판정은 간단합니다. x의 제곱과 y의 제곱을 더한 값이 1 이하면 안쪽으로 셉니다. 면적 계산을 예와 아니오의 개수로 바꾼 셈입니다. 가정도 분명해집니다. 점을 고르지 않게 놓으면 다른 확률을 추정하고, 표본끼리 의존하면 불확실성 계산도 달라집니다.

단위 정사각형을 채운 균등 점들과 금색 내부 점 및 파란 외부 점을 나누는 흰 사분원 경계.
FIG 01별도의 점 1,000개 그림은 시드 931을 사용합니다. 금색은 x² + y² ≤ 1인 점, 파란색은 사분원 밖의 점입니다.
한 번의 실행

큰 방향이 맞아도 경로는 흔들릴 수 있다

점이 몇 개 없을 때는 하나가 바깥에서 안쪽으로 옮겨져도 비율이 크게 바뀝니다. 점이 많으면 하나의 영향은 작아집니다. 긴 실행이 안정적으로 보이는 이유지만, 매 단계 오차가 줄어든다는 뜻은 아닙니다. 짧은 추정이 운 좋게 더 정확하고 나중 값이 덜 정확할 수도 있습니다. 매끄러워 보이는 구간만 보여 주면 이런 자연스러운 움직임을 숨기게 됩니다.

고정된 시드는 실험을 재현하게 해 줍니다. 다른 실행에서도 같은 결과가 필연적으로 나온다는 뜻도, 난수 생성기의 품질 인증도 아닙니다. 여기서 시드는 다시 실행했을 때 그림과 숫자를 일치시키기 위한 장치입니다.

실험 전체 반복하기

마음에 드는 한 번보다 분포가 더 솔직하다

표본 수 100개, 1,000개, 10,000개마다 추정을 300번 반복했습니다. 평균 추정값은 약 3.1477, 3.1378, 3.1413입니다. 이 평균만 보고하면 한 번의 실행보다 훨씬 안정적인 방법처럼 보일 수 있습니다. 각 평균은 여러 번의 별도 시도를 합친 값이기 때문입니다.

퍼짐을 보이기 위해 각 추정값과 원주율의 차이를 구하고, 300번 오차의 제곱평균제곱근도 계산했습니다. RMS 오차는 약 0.1608, 0.0530, 0.0158입니다. 고정 시드로 반복한 이번 실험의 관측 요약이며, 다음 추정값에 대한 보장이 아닙니다.

100개, 1,000개, 10,000개 점의 상자그림이 표본 수가 늘며 원주율 주변으로 좁아지는 모습.
FIG 02시드 930으로 각 표본 크기에서 300번 실행했습니다. 상자는 추정값의 가운데 절반, 금색 수평선은 π입니다.
정밀도의 비용

대략 네 배 일해야 전형적인 오차가 절반이 된다

독립적인 균등 표본에서는 안쪽 점의 수가 이항 모델을 따릅니다. 이 추정량의 표준편차는 표본 수의 제곱근에 반비례합니다. 따라서 점을 두 배로 늘린다고 불확실성이 보통 절반이 되지는 않습니다. 대략 네 배가 필요하며, 불확실성을 열 배 줄이려면 약 백 배의 표본이 필요합니다.

관측한 세 RMS 값도 유한한 반복의 변동 속에서 이 큰 흐름을 따릅니다. 제곱근 관계는 모델 아래의 표본 분포에 대한 것이지 화면의 모든 곡선이 매끄럽게 내려간다는 약속이 아닙니다. 비효율적인 추정기에 계산을 더 넣기 전에 더 좋은 추정법을 찾아볼 이유이기도 합니다.

개선에는 해석적인 이유도 있습니다. 독립 표본 n개에서 명중 방식 분산은 (4π − π²)/n, 약 2.69677/n이고 높이 방식은 (32/3 − π²)/n, 약 0.79706/n입니다. 같은 n에서 표준편차는 약 0.5437배가 됩니다. 스크립트는 높이의 첫째와 둘째 적분도 수치적으로 따로 확인했습니다. 모든 쌍에서 높이 추정이 더 가깝다는 보장도, 실행 시간 측정도 아닙니다. 알려진 경계식을 이용해 무작위성을 줄인 것이며 다른 적분에는 이런 기회가 없을 수 있습니다.

사용할 이유

더 어려운 모양에서 가치가 생긴다

원주율에는 직접적인 수치 계산법이 훨씬 효율적입니다. 몬테카를로는 값을 직접 구하기는 어렵지만 무작위 사례를 만들기는 비교적 쉬울 때 매력적입니다. 복잡한 공간의 적분이나 결과의 시뮬레이션이 대표적인 상황입니다. 값을 정의하고, 명시한 분포에서 표본을 뽑고, 요약과 불확실성을 제시하는 기본 패턴은 같습니다.

분포는 표본 수만큼 중요합니다. 잘못된 모델에서 백만 번 추출하면 잘못된 질문에 매우 정밀한 답을 얻을 수도 있습니다. 실제 시뮬레이션에서는 가정, 수치 구현, 표본 사이의 의존성도 확인해야 합니다. 정사각형과 원의 그림은 이런 복잡함 대부분을 덜어 내 통계적 아이디어를 선명하게 보여 줍니다.

무작위 층 하나 덜기

점을 더 뽑기 전에 아는 것을 사용합니다

단위 정사각형에서 x를 고정하면 사분원의 높이는 1에서 x의 제곱을 뺀 값의 제곱근입니다. 균등한 y가 그 아래에 있을 확률은 정확히 그 높이입니다. y를 뽑아 흔들리는 0이나 1을 기록하는 대신 알려진 높이를 평균하고 4를 곱할 수 있습니다. 둘 다 원주율을 추정하지만 후자는 세로 무작위성을 이미 평균냈습니다. 조건부 정보를 이용해 분산을 줄이는 구체적인 예입니다.

새 비교는 시드 1930으로 원래 세 크기마다 300쌍을 실행하고 쌍마다 같은 x 좌표를 씁니다. 표본 1,000개에서 명중 방식의 RMS는 0.05439, 높이 방식은 0.02928입니다. 100개에서는 0.16114와 0.08845, 10,000개에서는 0.01643과 0.00916입니다. 앞의 시드 930 결과와 별도 실험입니다. 어느 방법의 운 좋은 한 번을 고르지 않고 해석 가능한 비교를 만들었습니다.

시험한 표본에서 알려진 높이 방식의 반복 분포가 좁고 RMS도 작습니다.
FIG 03시드 1930, 크기별 300쌍이며 쌍마다 x를 공유합니다. 상자는 1,000개 표본 실행, 막대는 세 크기의 실측 RMS로 오차 보장이 아닙니다.
결과 읽기

멋진 소수보다 퍼짐을 묻기

시뮬레이션이 소수를 길게 출력하면 표시 형식을 지식으로 착각하기 쉽습니다. 3.141309는 계산된 값이지만 모든 자릿수가 같은 확실성을 갖는 것은 아닙니다. 프로그램이 몇 글자를 출력했는지보다 반복 실행의 퍼짐이 절차를 더 잘 설명합니다.

로컬 검사는 알려진 점에서 경계를 확인하고, 모든 추정값이 0과 4 사이인지 살피며, 이번 표본 수들에서 관측한 RMS 순서를 확인합니다. 모든 실행이 단조롭게 좋아진다는 증명은 아닙니다. 원은 답을 알고 있는 상태에서 시뮬레이션을 의심하는 연습을 하게 해 줍니다. 답을 모르는 문제로 가기 전에 해 볼 만한 연습입니다.

더 읽어 보기

NumPy: uniform random samples ↗SciPy: the binomial distribution ↗

공식 문서와 함께 읽으면 좋은 자료입니다.

가져갈 생각 하나

유용한 시뮬레이션은 답과 함께, 그 답이 얼마나 움직일 수 있는지도 보여 줍니다.