Monte-Carlo Simulations
몬테카를로 시뮬레이션
몬테카를로 시뮬레이션은 무작위 표본과 큰 수의 법칙을 활용해 적분, 조합 문제, 은퇴 자금의 불확실성을 추정합니다. 글은 원주율 추정과 SET 카드 조합 사례를 거쳐 평균 수익률만 적용한 은퇴 계산이 실제 위험을 가릴 수 있음을 보여줍니다.
- 주제
에디터 노트
이 글의 강점은 반복 표본으로 답을 근사하는 원리를 적분, 조합 확률, 은퇴 계획에 걸쳐 보여주는 데 있습니다. SET 사례는 1,000만 회 추정값과 커누스의 계산값이 맞아떨어져 방법의 효용을 구체적으로 뒷받침합니다. 반면 은퇴 사례의 60% 생존 확률은 과거 자료를 바탕으로 한 분포와 단순화된 가정에 묶인 결과입니다. 댓글에서 제기된 수익률의 시간적 연관성이나 실제 과거 경로 재생 문제는 표본 횟수를 늘려도 해결되지 않습니다. 따라서 이 사례가 보여주는 것은 미래의 정답보다 가정에 따른 결과 분포이며, 어떤 분포와 상관관계를 골랐는지가 추정치만큼 중요합니다.
AI 요약
몬테카를로 시뮬레이션(Monte Carlo simulation)은 무작위 시행을 반복하고 큰 수의 법칙(Law of Large Numbers)을 이용해 과학·공학 문제의 값을 추정하는 방법입니다. 글은 원주율 추정, 카드 게임 SET의 조합 확률, 은퇴 자금 전망이라는 세 사례로 기법을 설명합니다. 전후 핵무기 시뮬레이션에서 스타니슬라프 울람(Stanislaw Ulam)과 존 폰 노이만(John von Neumann)이 초기 활용 사례를 만들었다고 소개합니다.
다트 던지기로 원주율 추정
한 변이 1인 정사각형 안에 사분원을 그리고, 정사각형 안에 균일하게 떨어진 표본 중 사분원 내부에 들어간 비율을 구합니다. 그 비율에 4를 곱하면 원주율의 추정값이 됩니다. 코드는 각 시행에서 x와 y를 0부터 1 사이의 난수로 뽑고, x²+y²≤1인지 검사합니다. 표본 수가 1,000개여도 실행할 때마다 결과가 크게 달라질 수 있으며, 글은 소수점 넷째 자리까지 안정적으로 추정하려면 약 100억 회가 필요하다고 설명합니다. 독립 시행의 표준적인 표본 오차는 시행 횟수 N의 제곱근에 반비례하므로 오차를 절반으로 줄이려면 표본을 네 배로 늘려야 합니다. 이 예시는 곡선 아래 넓이를 구하는 수치 적분 문제이기도 합니다. 몬테카를로 방법은 차원이 높은 적분에서 다른 수치 기법의 비용이 커질 때 특히 쓸모가 있습니다.
SET 카드의 조합 확률
SET 카드에는 개수, 색, 모양, 음영이라는 네 속성이 있고, 각 속성에서 세 카드가 모두 같거나 모두 달라야 한 세트가 됩니다. 글은 81장 중 12장을 뽑았을 때 세트가 하나도 없을 확률을 묻습니다. 가능한 손패는 약 70조 가지라 전부 검사하기 어렵습니다. 도널드 커누스(Donald Knuth)가 대칭성과 게임의 수학적 성질을 활용해 세트가 없는 손패를 2,284,535,476,080개로 계산했습니다. 그 결과 확률은 3.23%입니다. 글의 몬테카를로 방식은 1,000만 번의 추첨으로 0.0323을 얻어 정확한 값과 가까운 결과를 냈습니다. 15장 손패를 대상으로 하면 경우의 수는 12장 손패보다 약 100배 많아지지만, 시뮬레이션에서는 매개변수만 바꾸면 됩니다. 추정값은 약 0.00037이며, 세트 없는 손패가 드물어 12장 사례보다 상대 오차가 큽니다.
은퇴 자금 전망
은퇴 시점에 100만 달러를 보유하고 매년 3만 달러를 생활비로 인출한다고 가정합니다. 글은 단순화를 위해 연간 포트폴리오 수익률 4%와 물가 상승률 2%를 놓습니다. 금액은 현재 가치로 계산하며, 연간 인출액은 고정하고 물가 상승은 포트폴리오에 반영합니다. 이 가정만 적용하면 첫해 수익과 물가를 반영한 뒤 30,000달러를 인출해 989,600달러가 남습니다. 같은 계산을 반복하면 약 55년 뒤 자금이 소진됩니다.
하지만 연평균 수익률만으로는 수익이 발생한 순서를 반영하지 못합니다. -10% 뒤에 18%가 오면 평균 수익률이 4%인 두 해라도 연속해서 4%를 얻은 경우보다 최종 자금이 적습니다. 물가와 수익률도 해마다 달라지고 서로 연관될 수 있습니다. 글은 과거 자료에 근거한 정규분포에서 수익률과 물가를 뽑아 100만 개 시나리오를 실행합니다. 그 결과 약 25%의 시나리오에서 22년 무렵까지 자금이 소진되며, 30년 동안 자금이 유지되는 경우는 약 60%로 나타납니다. 65세에 은퇴해 25년을 계획하는 사례에서도 약 30%가 필요한 기간을 버티지 못합니다. 실제 분석에는 자산 구성, 수명, 인출 시점과 빈도, 세법 변화 같은 요소를 더할 수 있습니다. 글의 예시 코드는 GitHub에서 제공합니다.
Hacker News 반응
- @theOGognf — 이 주제에 관심 있다면 DSMC(Direct Simulation Monte Carlo)를 읽어보세요. 실제 입자를 전부 시뮬레이션하지 않고도 희박 기체의 상호작용을 정확하게 계산하는 같은 아이디어입니다. 멋진 내용입니다!
- @alexpotato — 복잡한 통계값을 기본적인 프로그래밍으로 근사하는 방법을 재미있게 읽었다면 제이크 밴더플라스(Jake VanderPlas)의 "Statistics for Hackers"를 추천합니다. 이해하기 어려운 통계 용어와 공식을 간단한 반복문과 연산으로 바꿉니다. 정말 추천합니다.
- @wodenokoto — 제가 가장 좋아하는 통계·데이터 과학 강연 중 하나입니다. 처음 본 지 몇 년 뒤 다시 보면서 문제를 낼 때마다 멈추고 "간단한 반복문과 기본 연산"으로 구현해 봤는데 거의 매번 실패했습니다. 쉬워 보이게 만든다는 점은 알아두세요.
- @charlieyu1 — 원주율 추정이나 SET 확률처럼 조합 표본을 뽑는다면 층화 추출(stratification)이 좋은 방법입니다.
- @shoo — 첫 번째 예제처럼 쉬운 분포에서 뽑은 표본을 관심 대상인 분포에 들어오지 않으면 버리는 일반 기법의 이름은 기각 표본 추출(rejection sampling)입니다. 마르코프 연쇄 몬테카를로(Markov Chain Monte Carlo)인 메트로폴리스-헤이스팅스(Metropolis-Hastings) 알고리즘은 정규화 상수나 직접 표본을 구하기 어려운 분포에서도 표본을 뽑는 방법입니다. 현재 상태에서 후보 상태를 뽑고 두 상태의 확률 비율로 이동을 받아들일지 정합니다. 샘플러가 안정되도록 충분히 실행하고, 대표성이 없는 국소 상태에 갇힐 가능성을 줄이려면 여러 초기 상태에서 다시 시작할 수 있습니다.
- @nxobject — 통계학자로서 부트스트래핑(bootstrapping)도 언급해야겠습니다. 이론적으로는 다른 기법이지만 무작위화 방법의 힘을 보여주는 사례입니다.
- @stevenhubertron — 은퇴 계획에 몬테카를로 시뮬레이션을 씁니다. 그 결과를 믿지 말라는 점은 잘 보여줬지만 더 나은 대안을 주지는 못했습니다. 추천할 만한 방법이 있나요?
- @Jtsummers — "결과를 믿지 말라"는 게 무슨 뜻인가요? 몬테카를로 은퇴 계획은 연 4% 수익률과 2% 물가 상승을 고정한 기본 가정보다 나은 결과를 줬습니다. 감당할 위험 수준에 따라 저축액에 만족할지 판단하도록 자금이 얼마나 버틸지 더 현실적인 확률을 제공합니다.
- @lastofus — 자금이 고갈되지 않도록 보장하는 방법은 없습니다. 미래를 100% 예측할 수 없기 때문입니다. 장기간 미래가 과거와 비슷할 거라고 가정하는 것이 최선입니다. 과거의 모든 연도와 자산 배분을 조합해 보는 방법은 빌 빙엄(Bill Bingham)의 4% 규칙의 바탕입니다. 과거 연도를 무작위로 이어 붙이는 순진한 몬테카를로 방식도 있고, 연도 사이의 연관성을 반영하도록 여러 해를 묶어 이어 붙이는 방식도 있습니다. 더 복잡한 모델마다 안전한 인출률이 조금씩 달라집니다. 결국 모두 검은 백조 같은 재난이 닥치지 않길 바라며 계획합니다.
- @sokoloff — 순수 몬테카를로보다 과거의 실제 시나리오를 그대로 재생하거나 두 방법을 섞는 편이 더 유용하다고 생각합니다. 40년의 수익률이 어떤 분포에서 서로 독립적으로 무작위 추출된다는 모델이 과거 실제 결과보다 낫다고 볼 근거가 없습니다.
- @SukadarBukadar — 기초 분포가 알려지지 않았고 정상성도 없을 가능성이 큰 경우에는 어떻게 유용한가요? 은퇴 포트폴리오 전망이나 주식 거래 규칙을 시험할 때 시뮬레이션에 넣은 시나리오가 실제 가능한 결과를 대표한다고 어떻게 알 수 있나요? 어떤 경로는 실제로 불가능하고 어떤 경로는 과소 반영됐을 수도 있습니다.
- @pizzathyme — 포켓몬 고 같은 게임을 만들 때 사람들이 전 세계를 걷는 상황을 몬테카를로로 시뮬레이션했습니다. 비슷한 게임의 평균 보행 속도와 플레이 시간을 통계로 넣었는데 게임 출시 뒤 예측이 ±2% 안에 들어 놀랐습니다. 경력에서 손꼽히는 순간이었습니다.
원문: Eli Bendersky / 번역·요약: Trawling