4 분 분량

자산 배분과 리밸런싱을 다룬 앞의 두 글에서 “상관계수가 낮으면 섞는 게 이득”이라는 말을 계속 썼습니다. 60/40의 변동성이 가중평균보다 낮게 나온다는 것도 숫자로만 보여드렸고요. 오늘은 그 숫자가 어디서 나오는지, 식 하나를 뜯어봅니다.

수식이 나오지만 항이 세 개뿐이고, 그 세 개 중 하나만 이해하면 됩니다.

식

두 자산을 비중 w와 1-w로 섞었을 때 포트폴리오의 분산은 이렇게 계산됩니다. 이 블로그는 수식을 그림으로 렌더링하지 않아서 코드로 씁니다.

분산 = (w * s1)^2  +  ((1-w) * s2)^2  +  2 * w * (1-w) * rho * s1 * s2
        └ 1항 ┘       └ 2항 ┘           └────── 3항 ──────┘

변동성 = sqrt(분산)

s1, s2 : 각 자산의 변동성
rho    : 두 자산 수익률의 상관계수 (-1 ~ +1)

1항과 2항은 각 자산이 자기 몫으로 기여하는 흔들림입니다. 여기까지는 직관과 같습니다. 3항이 이 글의 전부입니다. 두 자산이 함께 어떻게 움직이느냐가 여기 들어가고, 상관계수가 마이너스면 이 항 전체가 마이너스가 되어 분산을 깎아냅니다.

가중평균이 안 나오는 이유가 이겁니다. 변동성을 그냥 비중대로 섞으려면 3항이 2*w*(1-w)*s1*s2여야 하는데(그래야 완전제곱식이 됩니다), 거기에 rho가 곱해져 있습니다. rho가 1일 때만 가중평균과 같아지고, 1보다 작으면 항상 그보다 작아집니다.

파이썬으로는 세 줄입니다.

import numpy as np

def port_vol(w, s1, s2, rho):
    var = (w * s1) ** 2 + ((1 - w) * s2) ** 2 + 2 * w * (1 - w) * rho * s1 * s2
    return np.sqrt(var)

실제 데이터로 맞춰보기

식이 맞는지 확인하는 가장 확실한 방법은 실제 시계열의 변동성과 대조하는 것입니다. 앞 글들과 같은 데이터(S&P500 + 미국 10년물, 1950년 2월부터 금리 값이 있는 마지막 달인 2023년 9월까지 884개월, 주가와 금리는 그달 평균값)에서 주식 변동성 12.06%, 채권 변동성 6.23%, 상관계수 0.050이 나옵니다. 이 세 숫자만 식에 넣은 값과, 월별 수익률을 실제로 섞어 표준편차를 구한 값을 나란히 놓으면 이렇습니다.

주식 비중 식으로 계산 실제 시계열
100% 12.059% 12.059%
80% 9.789% 9.789%
60% 7.769% 7.769%
40% 6.248% 6.248%
20% 5.643% 5.643%
0% 6.228% 6.228%

차이가 소수점 17자리 수준입니다. 부동소수점 오차일 뿐 사실상 같은 값입니다. 당연한 결과지만 직접 확인해 보면 식이 근사가 아니라 항등식이라는 감각이 생깁니다. 이 대조를 포함해 글의 표와 그림을 만드는 전체 코드는 correlation_math.py에 있습니다. 데이터를 읽는 asset_allocation_basics.py와 같은 폴더에 두고 실행합니다.

60/40의 세 항을 실제로 분해하면 이렇습니다.

1항 주식 몫    :  0.005235
2항 채권 몫    :  0.000621
3항 상호작용   : +0.000180   <- rho = 0.05 이라 아주 작다
합계(분산)     :  0.006036   -> 변동성 7.77%
가중평균 변동성:              9.73%   (rho = 1 이었다면 나왔을 값)

3항이 전체의 3%밖에 안 됩니다. 그런데도 변동성이 9.73%에서 7.77%로 2%p 낮아집니다. 왜 이렇게 큰 차이가 날까요. 3항이 작다는 것 자체가 이유입니다. rho가 1이면 3항이 0.003605로 커지면서 합이 완전제곱이 되어 가중평균이 나옵니다. rho가 0.05로 작으니 그 큰 항이 거의 사라지고, 그만큼 분산이 통째로 줄어든 것입니다.

상관계수만 움직여 보면

s1, s2는 실제 값으로 고정하고 rho만 -1에서 1까지 바꿔가며 60/40의 변동성을 그려봤습니다.

상관계수에 따른 60/40 변동성

rho 60/40 변동성
-1.0 4.74%
-0.5 6.37%
0.0 7.65%
0.05 (실제) 7.77%
+0.5 8.75%
+1.0 9.73%

곡선이 오른쪽 끝에서 가중평균(9.73%)에 정확히 닿습니다. 상관계수 1은 “두 자산이 사실상 같은 자산”이라는 뜻이고, 그때는 섞어도 아무 이득이 없습니다.

왼쪽 끝 -1에서는 4.74%까지 내려갑니다. 만약 비중까지 조절할 수 있다면 rho가 -1일 때 변동성 0인 조합도 이론상 가능합니다. 물론 현실에 완전한 -1 상관은 없습니다. 다만 방향은 분명합니다. 분산투자에서 찾아야 할 것은 수익률이 높은 자산이 아니라 상관계수가 낮은 자산입니다.

최소분산 비중

식을 w로 미분해서 0으로 두면 변동성이 가장 낮아지는 비중이 나옵니다.

def min_var_weight(s1, s2, rho):
    cov = rho * s1 * s2
    return (s2 ** 2 - cov) / (s1 ** 2 + s2 ** 2 - 2 * cov)

실제 값을 넣으면 주식 19.8% / 채권 80.2%, 그때 변동성이 5.64%입니다. 0부터 1까지 0.1%p 간격으로 격자 탐색을 해봐도 같은 답이 나옵니다.

여기서 자산 배분 글의 표가 다시 떠오릅니다. 그 표에서 20/80의 변동성이 5.64%로 채권 100%(6.23%)보다도 낮았죠. “채권만 들고 있는 것보다 주식을 조금 섞은 쪽이 덜 흔들린다”는 그 이상한 결과가, 최소분산 비중이 19.8%라는 식의 답과 정확히 일치합니다. 그때는 결과만 보고 놀랐는데 이제 이유가 설명됩니다.

주의할 점은 이 비중이 수익률을 전혀 고려하지 않는다는 것입니다. 흔들림만 최소로 만드는 조합이라 수익률은 6.6%로 60/40의 9.1%보다 한참 낮습니다. 최소분산이 최선의 포트폴리오는 아닙니다.

종목을 늘리면 어디까지 줄어드나

두 자산에서 N개 자산으로 넓혀 봅니다. 모두 변동성이 s로 같고 서로 간 상관계수가 rho로 같다고 단순화하면, 균등 보유한 포트폴리오의 변동성은 이렇게 정리됩니다.

변동성 = s * sqrt( (1 + (N-1) * rho) / N )

N을 무한대로 보내면 괄호 안이 rho로 수렴합니다. 즉 변동성은 s * sqrt(rho) 아래로는 절대 내려가지 않습니다.

개별 자산 변동성을 25%로 두고 계산해 봤습니다.

보유 종목 수 rho=0.0 rho=0.2 rho=0.4
1 25.0% 25.0% 25.0%
5 11.2% 15.0% 18.0%
10 7.9% 13.2% 17.0%
30 4.6% 11.9% 16.2%
100 2.5% 11.4% 15.9%
하한선 0% 11.2% 15.8%

종목 수를 늘릴 때의 변동성 하한선

상관계수 0.2일 때 종목을 10개에서 100개로 열 배 늘려도 변동성은 13.2%에서 11.4%로 1.8%p 줄어드는 데 그칩니다. 하한선 11.2%에 이미 거의 닿아 있기 때문입니다. 30개쯤에서 대부분의 이득이 끝납니다.

이것이 체계적 위험(systematic risk)의 정체입니다. 같은 시장의 종목들은 서로 양의 상관을 갖고, 그래서 아무리 많이 사도 시장 전체가 빠지는 위험은 남습니다. “분산투자하면 위험이 사라진다”가 아니라 “개별 종목 고유의 위험만 사라지고 공통 위험은 그대로 남는다”가 정확한 표현입니다.

그러니 종목 수를 늘리는 것보다 상관계수가 낮은 다른 종류를 섞는 편이 훨씬 효과적입니다. 국내 주식 100종목을 사는 것과 국내 주식·해외 주식·채권을 섞는 것은 완전히 다른 이야기입니다.

남는 문제

식은 깔끔하지만 입력값이 문제입니다. s1, s2, rho 모두 과거 데이터로 추정한 값이고, 자산 배분 글의 이동 상관계수 그림에서 봤듯 rho는 시기에 따라 -0.75에서 +0.6까지 움직였습니다. 과거 평균 0.05를 넣고 계산한 7.77%는 “그 기간의 평균적인 모습”일 뿐, 앞으로의 예측이 아닙니다.

특히 위험한 것은 위기 때 상관계수가 갑자기 크게 높아질 수 있다는 점입니다. 평소에 낮던 상관이 정작 방패가 필요한 순간에 사라집니다. 2022년이 그랬죠. 식은 그 변화를 알려주지 않고, 넣어준 rho를 그대로 믿을 뿐입니다.

그래도 이 식을 알고 나면 자산 배분 논의가 달라집니다. “왜 섞어야 하나”라는 질문이 “이 둘의 상관계수는 얼마이고, 그게 언제 무너지나”로 바뀌기 때문입니다.

2026-09-28 수정: 위기 때 상관계수가 “1에 가까워진다”고 단정한 문장을, 데이터가 보여 준 것 이상으로 말하지 않도록 “갑자기 크게 높아질 수 있다”로 고쳤습니다.

2026-10-22 수정: 데이터 기간의 끝(2023년 9월)을 “자료가 끝나는 달”에서 금리 값이 있는 마지막 달로 바로잡고, 주가와 금리가 그달의 평균값이라는 점을 밝혔습니다.


이 글은 학습과 정보 공유 목적으로 작성되었으며, 특정 종목이나 상품에 대한 투자 권유가 아닙니다. 투자의 판단과 책임은 투자자 본인에게 있습니다.

최종 수정: