한양과학기술고등학교

에듀테크 프로젝트 대시보드

몬테카를로 방법

몬테카를로 방법 (Monte Carlo Method)

정확한 공식을 몰라도 괜찮다. 무작위 점을 아주 많이 뿌리고, 조건을 만족한 비율을 세면 넓이·확률·적분값을 근사할 수 있다. 컴퓨터가 잘하는 "일단 엄청 많이 해보기"로 수학 문제를 푸는 방법.

이름의 유래 — 1940년대 로스앨러모스에서 폰 노이만·울람·메트로폴리스가 중성자 확산을 계산하려고 고안했다. 울람의 삼촌이 도박을 즐기던 모나코 몬테카를로 카지노의 이름을 코드명으로 붙였다. 핵심은 "난수를 굴려 답을 얻는다"는 도박 같은 발상.

1. 원리: 넓이를 "맞힌 비율"로 바꾸기

한 변이 2인 정사각형(-1 ≤ x, y ≤ 1) 안에 반지름 1짜리 원이 꼭 들어맞는다. 이 안에 점을 완전히 무작위로 던지면, 어떤 점이 원 안에 떨어질 확률은 정확히 두 도형의 넓이 비와 같다.

P(원 안) = (원의 넓이) / (정사각형 넓이) = πr² / (2r)² = π / 4

그러므로 점 N개 중 원 안에 들어간 개수가 M이라면:

π ≈ 4 × (M / N)

점이 원 안인지 판정하는 건 제곱근도 필요 없다 — x² + y² ≤ 1 이면 원 안이다.

2. 직접 던져 보기

「점 뿌리기」를 누르면 매 프레임 수백 개의 점이 정사각형에 떨어진다. 원 안이면 파란색, 밖이면 회색. 아래 추정값이 실제 π(3.14159…)에 어떻게 다가가는지 지켜보자.

던진 점 N
0
원 안 M
0
π 추정 (4·M/N)
–
오차 |Δ|
–

3. 얼마나 정확할까? — 큰 수의 법칙과 √N

몬테카를로의 오차는 시행 횟수 N에 대해 1/√N 로 줄어든다. 이건 좋은 소식이자 나쁜 소식이다.

N기대 오차(대략)의미
100± 0.16소수 첫째 자리도 흔들림
10,000± 0.016N을 100배 → 오차 10배 감소
1,000,000± 0.0016겨우 소수 셋째 자리
정확도 한 자리 올리려면 시행을 100배 늘려야 한다. 그래서 몬테카를로는 "고정밀 계산"에는 비효율적이지만, 차원이 아주 높은 문제(적분 변수가 수십 개)에서는 오히려 격자 방식보다 훨씬 빠르다. 오차가 차원 수와 무관하게 1/√N 이기 때문이다.

4. 코드로 보기

import random

def estimate_pi(n):
    inside = 0
    for _ in range(n):
        x = random.uniform(-1, 1)
        y = random.uniform(-1, 1)
        if x*x + y*y <= 1:      # 원 안? (sqrt 불필요)
            inside += 1
    return 4 * inside / n

print(estimate_pi(1_000_000))   # 3.14103... 처럼 매번 조금씩 다름

5. 넓이 → 적분으로 일반화

"원 안인가?"를 "곡선 아래인가?"로 바꾸면 정적분을 근사할 수 있다. 예를 들어 0 ≤ x ≤ 1에서 ∫ f(x) dx 는 [0,1]×[0, max f] 상자에 점을 뿌려 곡선 아래 비율 × 상자 넓이로 구한다.

몬테카를로 추정
–
참값
–
상대 오차
–

6. 사촌 알고리즘 — 뷔퐁의 바늘

1777년, 뷔퐁 백작은 간격 d로 그은 평행선 위에 길이 ℓ(≤ d)의 바늘을 마구 떨어뜨리면, 바늘이 선을 가로지를 확률이 2ℓ / (πd) 임을 보였다. 던진 횟수 대비 가로지른 횟수로 π를 추정할 수 있다 — 난수 발생기 없이 손으로 바늘만 던져도 되는 최초의 몬테카를로 실험이다.

7. 오늘날 어디에 쓰나

금융 · 리스크

옵션 가격, 포트폴리오 손실 분포(VaR)를 수만 개의 무작위 시나리오로 시뮬레이션.

물리 · 그래픽

입자 수송 계산, 그리고 영화·게임의 패스 트레이싱 렌더링(빛의 경로를 무작위 표본으로).

AI · 탐색

알파고의 몬테카를로 트리 탐색(MCTS): 무작위 대국을 많이 돌려 유망한 수를 고른다. (→ 미니맥스와 비교)

통계 추론

부트스트랩 재표본, MCMC(마르코프 연쇄 몬테카를로)로 복잡한 확률분포에서 표본 추출.

한 줄 요약 — 풀기 어려운 값을 "무작위 실험의 평균"으로 바꿔라. 실험을 N번 하면 오차는 1/√N. 관련: 피셔–예이츠 셔플, 저수지 샘플링, 경사 하강법.