8 분 분량

리스크 패리티는 각 자산이 포트폴리오 전체 위험에 기여하는 몫이 똑같아지도록 비중을 정하는 방법입니다. 기대수익은 쓰지 않습니다. 변동성과 상관관계만 씁니다.

지난 글에서 평균-분산 최적화가 실전에서 무너지는 이유를 봤습니다. 기대수익은 48년 데이터로도 주식이 7%에서 14% 사이라는 것밖에 알 수 없고, 변동성은 상대 오차 3% 안팎으로 잡힙니다. 그렇다면 믿을 수 있는 쪽만 쓰자는 것이 리스크 패리티의 출발점입니다.

올웨더 글에서 이미 한 번 다뤘습니다. 60/40의 위험 87%가 주식에서 나온다는 것, 위험을 고르게 나누면 주식 36% / 채권 64%가 나온다는 것, 그리고 2022년에 주식과 채권이 같이 떨어지며 무너졌다는 것까지 봤습니다. 이번 글은 거기서 다루지 않은 세 가지를 봅니다.

  1. 흔히 쓰는 단순판과 제대로 된 계산은 무엇이 다른가
  2. 전체 기간 대신 매달 과거 데이터로만 다시 계산하면 어떻게 되나
  3. 리스크 패리티의 낮은 수익을 레버리지로 메우면 어떻게 되나

코드는 risk_parity.py에 있고, 같은 폴더에 all_weather.py, asset_allocation_basics.py, value_factor.py를 함께 두어야 돌아갑니다. 데이터는 지난 글과 같은 미국 주식·장기채·중기채·금이고, 기간은 1972년 1월부터 2023년 6월까지입니다. 무위험 금리는 공개 사본이 2020년 7월에 끝나서, 샤프와 레버리지 이자가 필요한 계산은 그달까지만 했습니다.

위험 기여도 다시 짚기

포트폴리오의 위험은 각 자산 변동성의 단순 합이 아닙니다. 상관관계 때문에 서로 상쇄되기도 하고 겹치기도 합니다. 상관관계 글에서 본 그대로입니다. 그래서 “이 자산이 전체 위험 중 얼마를 만들었나”를 따로 계산합니다.

def risk_contrib(w, cov):
    """각 자산이 포트폴리오 분산에서 차지하는 몫 (합이 1)."""
    rc = w * (cov @ w)          # 비중 × (그 자산과 포트폴리오의 공분산)
    return rc / rc.sum()

cov @ w는 각 자산이 포트폴리오 전체와 얼마나 같이 움직이는지입니다. 거기에 비중을 곱하면 그 자산이 만든 위험이 됩니다. 이 값이 네 자산 모두 25%가 되게 하는 비중이 리스크 패리티입니다. 정확히는 ERC(Equal Risk Contribution)라고 부릅니다.

단순판: 변동성의 역수

ERC는 방정식을 풀어야 해서, 흔히 더 간단한 근사를 씁니다. 변동성의 역수에 비례해서 비중을 주는 방법입니다. 변동성이 절반인 자산은 두 배를 담습니다.

def inv_vol_weights(cov):
    iv = 1 / np.sqrt(np.diag(cov))
    return iv / iv.sum()

이 방법은 상관관계를 보지 않습니다. 자산끼리 상관이 모두 같다면 ERC와 정확히 같은 답이 나오지만, 그렇지 않으면 차이가 납니다. 이 데이터에는 차이를 크게 만드는 조합이 있습니다. 지난 글에서 평균-분산을 스위치처럼 흔들었던 장기채와 중기채, 상관 0.99입니다.

역변동성과 ERC 비교

  비중 (주식/장기채/중기채/금) 위험 기여 (주식/장기채/중기채/금)
1/N 25 / 25 / 25 / 25 21 / 25 / 16 / 39
60/40 60 / 0 / 40 / 0 87 / 0 / 13 / 0
역변동성 21 / 25 / 38 / 15 17 / 33 / 33 / 17
ERC 26 / 22 / 33 / 19 25 / 25 / 25 / 25

역변동성은 장기채와 중기채를 별개의 자산 두 개로 셉니다. 그래서 둘 다에 넉넉한 몫을 주고, 채권 전체의 위험 기여가 66%까지 올라갑니다. 사실상 “채권 위험 넷, 주식 위험 하나, 금 위험 하나”로 나눈 셈입니다.

ERC는 두 채권이 같이 움직인다는 것을 압니다. 채권 비중을 63%에서 55%로 줄이고, 그만큼 주식과 금에 넘깁니다. 결과적으로 네 자산의 위험 기여가 정확히 25%씩 됩니다.

1/N도 볼 만합니다. 비중은 똑같이 25%인데 위험은 금이 39%, 중기채가 16%입니다. 자본을 고르게 나누는 것과 위험을 고르게 나누는 것은 다른 일입니다.

삽질 기록: 풀이법이 틀리면 결론이 뒤집힌다

ERC를 계산하는 가장 흔한 방법은 반복식입니다. “위험을 많이 만드는 자산은 줄이고 적게 만드는 자산은 늘린다”를 수렴할 때까지 반복합니다. 처음에 이렇게 짰습니다.

# 처음 쓴 버전 (문제 있음)
for _ in range(iters):
    w = np.sqrt(w / (cov @ w))    # 기여가 큰 자산을 줄인다
    w = w / w.sum()

전체 기간 데이터로는 잘 돌았습니다. 그런데 매달 36개월치로 다시 계산하니 경고가 떴습니다. 음수의 제곱근입니다. 36개월처럼 짧은 창에서는 어떤 자산이 포트폴리오와 반대로 움직이는 구간이 생기고, 그러면 cov @ w가 음수가 됩니다. 그 달의 비중은 NaN이 됐습니다.

문제는 경고만 뜨고 계산은 끝까지 돌았다는 것입니다. 그 상태의 결과는 ERC 연평균 7.15%, 샤프 0.44였습니다. 역변동성(샤프 0.63)보다 한참 나빴습니다. 이걸 그대로 썼다면 “상관까지 반영한 ERC가 단순판보다 훨씬 못하다”는 틀린 결론을 냈을 것입니다.

좌표하강법으로 바꿨습니다. 자산 하나씩 돌아가며, 그 자산의 비중을 이차방정식의 양의 근으로 바꿉니다.

def erc_weights(cov, iters=500, tol=1e-12):
    n = len(cov)
    b = 1.0 / n                               # 목표 위험 기여
    y = np.ones(n) / np.sqrt(np.diag(cov))
    for _ in range(iters):
        prev = y.copy()
        for i in range(n):
            c = cov[i] @ y - cov[i, i] * y[i]   # 나머지 자산과의 공분산 몫
            a = cov[i, i]
            y[i] = (-c + np.sqrt(c * c + 4 * a * b)) / (2 * a)   # 항상 양수
        if np.abs(y - prev).max() < tol * np.abs(y).max():
            break
    return y / y.sum()

근의 공식에서 제곱근 안이 c² + 4ab인데 a와 b가 양수라 항상 양수입니다. 음의 공분산이 있어도 깨지지 않습니다. 고친 뒤 1975년부터 2023년까지 582개월 전부에서 위험 기여도가 25%에서 벗어난 최대 오차가 10⁻¹³ 수준이었습니다.

교훈은 워크포워드 글의 delist=True와 같습니다. 경고가 뜨는데도 숫자가 나오면, 그 숫자를 의심해야 합니다.

매달 다시 계산하면

올웨더 글에서는 1972~2023년 전체 공분산으로 비중을 한 번 구했습니다. 그건 미래를 본 비중입니다. 이번에는 매달 직전 36개월 데이터만으로 비중을 다시 구하고 한 달 운용합니다. 36개월이 쌓인 1975년부터, 무위험 금리가 있는 2020년 7월까지 547개월입니다.

  연평균 연변동성 샤프 MDD
1/N 8.79% 6.94% 0.62 −15.2%
역변동성 8.63% 6.59% 0.63 −11.3%
ERC 8.59% 6.51% 0.63 −11.4%
60/40 10.47% 8.09% 0.74 −27.0%

리스크 패리티 누적 성과

결과는 두 가지로 읽힙니다.

첫째, ERC와 역변동성과 1/N이 거의 같습니다. 샤프가 0.62~0.63입니다. 앞에서 본 비중 차이(채권 63% 대 55%)는 성과 차이로 크게 이어지지 않았습니다. 네 자산이면 어떻게 나눠도 분산 효과의 대부분은 얻습니다.

둘째, 60/40이 샤프에서 이겼습니다. 0.74 대 0.63입니다. MDD는 리스크 패리티가 절반 이하지만, 위험 대비 수익은 60/40이 나았습니다.

왜 60/40이 이겼나

같은 기간 자산별 샤프를 보면 이유가 보입니다.

자산 샤프 (1975~2020)
주식 0.62
중기채 0.46
장기채 0.40
금 0.12

리스크 패리티는 모든 자산의 샤프가 비슷하다는 가정 위에 서 있습니다. 그래야 위험을 똑같이 나눴을 때 수익도 고르게 나옵니다. 그런데 이 기간 금의 샤프는 0.12로 나머지의 4분의 1이었습니다. ERC는 그 금에 위험의 25%를 배정했습니다. 60/40은 금을 아예 담지 않았습니다.

금은 이 구간 초반인 1975~1979년에 147% 올랐지만, 1980년 고점 뒤로는 2001년까지 22년 동안 59% 빠졌습니다. 그 긴 약세가 구간 한가운데 통째로 들어 있어서 샤프가 낮게 나왔습니다.

금을 빼고 세 자산으로 ERC를 돌리면 이렇습니다.

  연평균 연변동성 샤프 MDD
ERC (4자산) 8.59% 6.51% 0.63 −11.4%
ERC (금 제외) 9.57% 7.07% 0.71 −13.7%
60/40 10.47% 8.09% 0.74 −27.0%

샤프가 0.71로 60/40과 거의 붙습니다. 그럼 금은 빼는 게 맞을까요. 위기 구간을 보면 이야기가 달라집니다. 구간은 1987년 9~11월, 2000년 4월~2002년 9월, 2007년 11월~2009년 2월, 2020년 2~3월로 잡았습니다. IT 거품과 코로나는 올웨더 글보다 한 달 늦게 시작해서 60/40 숫자가 그 글의 표와 다릅니다.

구간 ERC ERC (금 제외) 60/40
1987 블랙먼데이 −5.5% −8.4% −14.8%
2000~02 IT 거품 +11.2% +12.6% −13.6%
2007~09 금융위기 +1.7% −2.3% −24.7%
2020 코로나 +0.7% +1.5% −7.9%

금융위기에서 금이 있으면 플러스, 없으면 마이너스였습니다. 금은 평소에는 샤프를 깎아 먹고, 위기에 몸값을 합니다. 보험료를 내는 자산입니다. 어느 쪽을 택할지는 성과표가 정해주지 않습니다.

수익이 낮으면 빌려서 키운다

리스크 패리티의 가장 흔한 비판은 수익이 낮다는 것입니다. 위 표에서도 ERC는 연 8.6%로 60/40의 10.5%보다 2%p 가까이 낮습니다. 채권 비중이 크니 당연합니다.

리스크 패리티를 운용하는 쪽의 답은 레버리지입니다. 변동성이 낮으니 돈을 빌려 크기를 키워서 60/40과 같은 변동성으로 맞추자는 것입니다. 샤프가 같거나 높다면 같은 위험에서 더 벌 수 있다는 논리입니다.

그대로 해봤습니다. 매달 직전 36개월 기준으로 ERC의 변동성이 60/40과 같아지는 배수를 구하고, 그만큼 빌려서 담습니다. 빌린 돈에는 무위험 금리를 이자로 냅니다. 상한은 3배로 뒀습니다. 목표 변동성을 최근 변동성으로 나눠 배수를 정하는 방식은 변동성 타기팅 글에서 코스피 하나로 따로 다뤘습니다.

필요한 레버리지

  연평균 연변동성 샤프 MDD
ERC 8.59% 6.51% 0.63 −11.4%
ERC 레버리지 10.13% 8.60% 0.65 −14.4%
60/40 10.47% 8.09% 0.74 −27.0%

필요한 레버리지는 평균 1.36배, 최대 2.27배였습니다. 3배 상한에 닿은 달은 없었습니다.

1980년대 초에는 오히려 1배 아래로 내려갔습니다(최저 0.85배, 1981년 9월). 그 무렵 금리가 치솟으며 채권 변동성이 주식만큼 커져서, 채권을 많이 담은 ERC가 60/40보다 더 흔들렸기 때문입니다. 그때는 빌리는 대신 일부를 현금으로 들고 있게 됩니다.

결과는 이렇게 읽힙니다. 레버리지를 쓰니 연평균이 60/40과 비슷한 10.1%까지 올라왔고, MDD는 −14.4%로 60/40(−27.0%)의 절반입니다. 같은 수익을 훨씬 얕은 낙폭으로 얻은 셈입니다.

다만 샤프는 여전히 60/40보다 낮습니다(0.65 대 0.74). 이 차이는 이자 때문이 아닙니다. 무위험 금리로 빌리는 레버리지는 초과수익과 변동성을 같은 배수로 키우므로 샤프를 거의 바꾸지 않고, 실제로 레버리지 없는 ERC(0.63)와 비슷합니다. 샤프 차이는 앞에서 본 대로 ERC 자체의 샤프가 낮았던 데서 옵니다. 이자는 수익률에서 그대로 빠지는 비용이고, 45년간 단순히 더하면 63%p입니다(1배 아래로 내려가 현금 이자를 받은 달을 상계한 값). 개인이 빌리는 금리는 보통 무위험 금리보다 높아서 실제 비용은 이보다 크고, 그만큼 샤프도 낮아집니다.

2022년

무위험 금리 데이터가 끝난 뒤인 2020년 8월부터 2023년 6월까지는 레버리지 비용을 정확히 계산할 수 없습니다. 레버리지 없는 버전은 그대로 볼 수 있습니다.

  2020-08 이후 누적 2022년
1/N −5.8% −14.3%
역변동성 −10.4% −14.2%
ERC −6.7% −14.6%
ERC (금 제외) −10.3% −18.0%
60/40 +13.5% −14.8%

2022년 한 해만 보면 ERC(−14.6%)와 60/40(−14.8%)이 거의 같습니다. 그런데 2020년 8월 이후 전체로는 60/40이 +13.5%, ERC는 −6.7%로 20%p 벌어졌습니다. 2021년과 2023년 상반기의 주식 상승을 60/40이 더 많이 받았기 때문입니다.

레버리지 버전은 더 나쁩니다. 2022년 평균 레버리지는 1.41배였는데, 빌린 돈의 이자를 0으로 쳐도 −20.4%입니다. 실제로 2022년에는 단기 금리가 0% 근처에서 4%대로 올랐으니 이자까지 내면 그보다 더 나빴습니다.

원인은 올웨더 글에서 본 그대로입니다. 주식과 장기채의 상관이 2000~2020년 −0.33에서 2021년 이후 +0.43으로 뒤집혔습니다. 리스크 패리티는 과거 36개월의 낮은 상관을 보고 채권을 많이 담았고, 레버리지로 그 채권을 더 키웠습니다. 과거 상관을 믿고 빌린 돈이 상관이 뒤집힌 해에 손실을 키웠습니다.

정리하면

  • 리스크 패리티는 기대수익 없이 변동성과 상관만 써서, 각 자산의 위험 기여를 똑같이 맞춥니다. 평균-분산의 약점인 기대수익 추정을 통째로 피합니다.
  • 흔히 쓰는 역변동성은 상관을 무시해서, 상관 0.99인 두 채권을 별개로 세어 채권 위험을 66%까지 키웁니다. ERC는 정확히 25%씩 나눕니다. 다만 성과 차이는 크지 않았습니다.
  • ERC 반복식은 짧은 창에서 음의 공분산을 만나면 깨지고, 깨진 채로 숫자를 냅니다. 그 숫자를 믿었으면 결론이 뒤집혔을 것입니다.
  • 1975~2020년 매달 재계산한 ERC는 샤프 0.63으로 60/40(0.74)에 졌습니다. 샤프 0.12였던 금에 위험 25%를 준 탓이 큽니다. 대신 금 덕분에 금융위기를 플러스로 넘겼습니다.
  • 레버리지로 60/40과 같은 변동성에 맞추면 비슷한 수익을 절반의 낙폭으로 냅니다. 그러나 상관이 뒤집힌 2022년에는 이자를 빼고도 −20%였습니다.

평균-분산과 리스크 패리티는 모두 “과거의 공분산이 앞으로도 비슷하다”는 가정을 공유합니다. 리스크 패리티는 그 가정만 남기고 나머지를 걷어낸 방법이라 더 튼튼하지만, 그 하나가 깨지면 기댈 곳이 없습니다.

다음 글에서는 비중이 아니라 크기를 다룹니다. 전략에 돈을 얼마나 걸어야 하는지를 수학적으로 답하는 켈리 공식과, 그 답을 그대로 따르면 안 되는 이유입니다.

2026-09-28 수정: 1980년 고점 이후 2001년까지 금의 하락 폭을 39%에서 59%로, 역변동성의 위험 배분을 “채권 위험 둘”에서 “채권 위험 넷”으로 바로잡고, 위기 구간의 시작·끝 달을 적어 60/40 숫자가 올웨더 글의 표와 다른 이유를 밝혔습니다.

2026-10-22 수정: 레버리지 ERC의 샤프가 60/40보다 낮은 원인을 이자로 읽히게 쓴 문장을, 무위험 금리 레버리지는 샤프를 거의 바꾸지 않고 차이는 ERC 자체의 낮은 샤프에서 온다는 설명으로 고치고, 이자 합계 63%p가 현금 이자를 상계한 값임을 밝혔습니다.


이 글은 학습과 정보 공유 목적으로 작성되었으며, 특정 종목이나 상품에 대한 투자 권유가 아닙니다. 본문의 수익률은 거래비용과 세금을 반영하지 않은 과거 데이터이며 미래 성과를 보장하지 않습니다. 레버리지는 손실을 원금 이상으로 키울 수 있습니다. 투자의 판단과 책임은 투자자 본인에게 있습니다.

최종 수정: