자산배분 결과를 예측하기 위해 백테스트를 많이 합니다. 하지만 백테스트 결과가 미래에도 그대로 적용될까요? 아닙니다. 이 때, 무작위 샘플링과 확률을 이용해 미래 성과를 예측하는 방법이 있습니다. 바로 몬테 카를로 시뮬레이션(Monte Carlo Simulation) 입니다.
몬테 카를로 시뮬레이션 이란?
몬테카를로 시뮬레이션은 무작위 추출과 통계 분석을 사용하여 복잡한 시스템이나 프로세스를 모델링하고 분석하는 계산 방법입니다. 이는 몬테카를로 카지노로 유명한 몬테카를로에서 명칭을 따온 것이구요.
몬테카를로 시뮬레이션에서는 많은 수의 무작위 샘플이 생성되어 시스템이나 프로세스의 동작을 추정합니다. 이 시뮬레이션은 이러한 샘플을 사용하여 가능한 결과의 확률 분포를 생성하고 다양한 결과의 가능성을 추정할 수 있습니다.
몬테카를로 시뮬레이션은 금융, 공학, 물리학, 생물학 등 복잡한 시스템을 분석하고 모델링하는 데에 자주 사용됩니다. 이는 또한 알고리즘의 성능을 평가하거나 다양한 불확실성과 위험 요소의 영향을 추정하는 데에도 사용될 수 있습니다.
몬테카를로 시뮬레이션은 금융 모델링, 위험 분석, 최적화, 의사 결정 등 다양한 분야에 적용될 수 있습니다. 이는 복잡한 시스템의 동작을 더 잘 이해하고 통계 분석에 기반하여 보다 정보화된 결정을 내리는 데에 도움이 되는 강력한 도구입니다.
그래서 몬테카를로 시뮬레이션을 이용해서 통계적 방법으로 주식, 채권 등의 자산군 미래 수익률을 “예측”해 볼수 있습니다.
몬테 카를로 시뮬레이션으로 수익 예측
몬테 카를로 시뮬레이션을 이용해서 SPY ETF의 수익을 추정해 보는 것을 예시로 들어볼께요.
- (1단계) SPY 수익에 대한 과거 데이터 수집: 다양한 금융 데이터 소스에서 얻을 수 있는 SPY의 일일 수익 과거 데이터가 필요합니다.
- (2단계) 통계적 매개변수 계산: 과거 데이터를 사용하여 SPY 수익의 분포를 설명하는 평균 수익, 표준 편차 등의 통계적 매개변수를 계산할 수 있습니다.
- (3단계) 랜덤 수익 생성: 무작위 숫자 생성기와 단계 2에서 계산된 통계적 매개변수를 사용하여 많은 수의 무작위 수익을 생성할 수 있습니다.
- (4단계) 미래 수익 시뮬레이션: 생성된 무작위 수익을 사용하여 특정 기간 동안 SPY의 미래 수익을 시뮬레이션할 수 있습니다.
- (5단계) 평균 수익 계산: 시뮬레이션을 여러 번 반복하여 가능한 결과의 확률 분포를 생성하고, 이후 평균 수익 및 관심 있는 다른 통계적 측정치를 계산할 수 있습니다.
해당 시뮬레이션을 아래와 같은 파이썬 코드를 포함하여 직접 해볼 수도 있지만 더 좋은 방법이 있습니다. 바로 Portfolio Visualizer를 이용하는 것이죠.
파이썬 코드 응? random_returns = np.random.normal(mu, sigma, (n_sims, n_days))
Portfolio Visualizer로 몬테 카를로 시뮬레이션 해보기
Portfolio Visualizer 홈페이지에 들어가면 Monte Carlo Simulation 메뉴가 바로 보입니다. 친절한 설명과 함께요.
Run Monte Carlo simulations for the specified portfolio based on historical or forecasted returns to test long term expected portfolio growth and survival, and the capability to meet financial goals and liabilities.
예시로 전통적인 60/40 포트폴리오를 이용해서 시뮬레이션 해볼까요? 초기 투자금 10,000 달러, 매년 6,000 달러 추가 투입하여 30년 동안 투자한다고 가정해봅시다. 그럼 값을 넣어야 할 메뉴는 아래와 같아요
- Portfolio Type : Asset (Asset과 Ticker 둘 중에 하나를 사용 합니다)
- Initial Amount : 10,000 (초기 투자금은 10,000 달러 입니다)
- Cash Flow : Contrubut fixed amount periodically (주기적으로 일정 금액을 투자)
- Contribution Amount : 6,000 (6000 달러씩 추가 투입하기로 했죠?)
- Contibution Frequency : annually (매년 투자합니다. 월 단위로 할 수도 있어요)
- Simulation Model : Historical Returns (과거 데이터를 학습시킵니다)
- Use full history : Yes (1972년부터 현재 까지 입니다. 만약 특정 구간이 필요하면 No를 선택!)
- Rebalancing : Annually (1년에 한번 리밸런싱 합니다)
그리고 나서 Asset1은 Us Large Cap(SPY ETF) 60%, Asset2는 Intermediate Term Treasury(IEF ETF) 40%를 선택합니다. 다 됐으면 Run Simulation을 누르세요~!!
그럼 위와 같은 결과를 얻게 될 겁니다. 하지만 결과는 할 때마다 조금씩 달라요. 왜냐하면 10,000번의 시뮬레이션 결과를 보여주는 것인데 10,000의 결과가 다 똑같을 수는 없거든요.
시뮬레이션 결과 해석
시뮬레이션 결과는 확률 값으로 나옵니다. 무작위 샘플링을 통해 결과를 확률로 뽑아내는게 몬테 카를로 시뮬레이션이니까요.
결과를 보면 상위 10% 경우 연수익률은 11.8%, 총구간 MDD는 -18.87%를 달성했습니다. Best case 지요. 반면 상위 50%의 경우 연수익 9.16%, MDD -20.22%을 달성했습니다. 하위 10%는 MDD가 -25.45%나 나왔습니다.
몬테 카를로 시뮬레이션의 장점은 이런 점에 있습니다. 과거 데이터를 단순히 이용해서 미래 수익률도 똑같이 움직일 것이다 생각하기 보다는 확률적으로 예측한다는 것이죠.
저 결과를 보고 내가 자산배분을 하면 50%는 9.16%를 얻을 수 있을테고 아주 재수가 없어도 6.47%는 얻을 수 있겠구나 하고 말이죠.
또 하나 재미있는 실험을 해 볼 수도 있습니다. 내가 만약 은퇴를 해서 자산배분을 했는데 일년에 얼마씩 인출하면 포트폴리오가 무너지지 않을까? 라는 실험말이죠.
은퇴 시뮬레이션
그럼 변수를 약간만 수정해봅니다. Initial Amount를 1,000,000 달러 (13억원) 그러니까 은퇴시점에 13억을 가지고 있다고 가정하는거에요. 그리고 매년 50,000 달러(6500만원)을 인출한다고 봅시다. 그럼 얼마나 생존할 수 있을것인가?!! ㅎㅎ
결과는 위와 같습니다. 이 포트폴리오를 30년동안 계속 인출하면 77.19%의 확률로 잔고가 바닥이 나지 않고 버틸 수 있습니다!!
이 수치는 원금 1,000,000 달러의 50%를 더 인출한 (50,000 x30년 = 1,500,000) 결과예요. 만약 단순 예금이거나 주식에 100%를 투자했다면?! 하위 10%의 경우 19년만에 잔고가 바닥이 날 수 있습니다. 30년까지 버티기 힘들어져요. 이래서.. 자산배분이 중요합니다. 시뮬레이션을 직접 해보시길~!!