C.W.K.
Stream
Lesson 01 of 04 · published

일부러 주사위 굴리기

~11 min · monte-carlo, simulation, numpy, percentiles

Level 0Open Gate
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"하나의 미래는 알 수 없어. 근데 그럴듯한 수천 개를 굴려서 그것들이 만드는 모양을 볼 순 있어."

Monte Carlo simulation 이 뭔지

포트폴리오의 미래는 불확실하고, 그건 막다른 길처럼 들려 — 알 수 없는 걸로 어떻게 계산해? Monte Carlo simulation 이 정직한 답이야. 하나의 path 를 예측하는 대신, 여럿을 생성해 — 가격이 어떻게 움직이는지에 대한 명시된 가정과 일치하는, 무작위 sampling 된 수천 개의 가능한 미래 — 그다음 그들이 이루는 분포를 봐. Keep 은 numpy 로 이걸 포트폴리오에 돌려: 많은 무작위 시행, 각각 그럴듯한 궤적, 하나의 추측 숫자가 아니라 가능성의 그림으로 집계.

선 하나에서 path 부채로

순진한 projection 은 선 하나를 그려 — '연 7% 벌면, 10년 뒤 잔고는 이거.' 그 단일 선은 중요한 전부를 숨겨: 좋은 해, 나쁜 해, 순서 위험, 나빠지는 tail. Monte Carlo 는 선을 부채로 바꿔: 10년 궤적을 수천 번 돌려, 각 기간이 어떻게 되는지 다른 무작위 추출로, 그럼 spread 를 얻어. 이제 percentile path 를 읽어 — 중앙값 결과, 비관적 10 percentile, 낙관적 90 — 그리고 아부하는 중간점 하나가 아니라 그럴듯한 범위를 봐.

분포가 점 추정보다 정직해. 어떤 단일 예상 숫자든 존재하지 않는 확실성을 가장해. spread 를 보여주는 것 — 좋은 tail 과 나쁜 tail 이 어디 떨어지는지, 불확실성이 실제로 얼마나 넓은지 — 이 미래가 값이 아니라 범위라는 진실을 존중해. path 의 부채가 단일 선이 숨기는 걸 말해줘.

가정은 입력이지 진실이 아냐

simulation 은 가정만큼만 의미 있고, Keep 은 그 가정을 run 의 명시적 입력으로 만들어: horizon, iteration 수, hurdle, mean-reversion 계수, 그리고 실제 데이터에서 파생된 calibration(변동성, beta, anchor). 가정을 바꾸면 다른 부채를 얻어 — 그게 정확히 맞아, '이렇게 행동하면 어때?' 를 탐색하는 거니까. simulation 은 자기 가정이 참이라 주장 안 해; 보이게 만들고 그 결과를 보게 해. 그 투명함이 정직한 시나리오 도구를 블랙박스 신탁과 가르는 거야.

mean reversion 이 그런 가정 하나, 명시적으로. mean-reversion 계수는 극단적 움직임이 시간에 따라 중심으로 되당겨지는 경향이 있다는 믿음을 인코딩해. 법칙이 아니라 knob — 돌릴 수 있는 명시된 가정. Keep 은 이걸 입력으로 노출해, 시나리오의 동작이 엔진에 구워진 숨은 마법이 아니라 보이는 선택의 결과가 되게 정확히.

Code

많은 무작위 path, percentile 로 읽기 (예시)·python
import numpy as np

def simulate(seed_price, horizon, iterations, vol, drift, rng):
    # 각 iteration 은 하나의 그럴듯한 미래 path.
    paths = np.empty((iterations, horizon))
    for i in range(iterations):
        price = seed_price
        for t in range(horizon):
            shock = rng.normal(drift, vol)     # 이 기간의 무작위 걸음
            price = price * (1 + shock)
            paths[i, t] = price
    # 출력은 단일 숫자가 아니라 분포:
    return {
        "p10": np.percentile(paths, 10, axis=0),   # 비관 band
        "p50": np.percentile(paths, 50, axis=0),   # 중앙값 path
        "p90": np.percentile(paths, 90, axis=0),   # 낙관 band
    }
# 부채(p10..p90)가 정직한 답; 단일 선은 tail 을 숨겨.

External links

Exercise

미래로 선 하나를 그리는 'projection' 을 아무거나 골라(저축 성장, 프로젝트 타임라인, 인원 계획). 그 선 하나가 뭘 숨기는지 묘사해. 그다음 Monte Carlo 버전을 스케치해: 매 기간 뭘 무작위로 변화시키고, 어떤 percentile band(p10/p50/p90)를 보고할래? 의사결정자가 부채에서 배우는 것 중 단일 선이 적극적으로 감추는 걸 설명해.
Hint
단일 선은 항상 현실에 없는 매끄러움을 암시해. 부채는 선이 지우는 가장 중요한 두 가지를 드러내: 불확실성이 얼마나 넓은지, 나쁜 tail 이 얼마나 나쁜지. 무서운 p10 을 가진 괜찮아 보이는 중앙값은 좁은 band 를 가진 중앙값과 아주 다른 상황이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.