위험한 자산 두 개를 섞으면 왜 더 안전해질 수 있을까?
같은 평균 수익률, 같은 변동성을 가진 주식 둘. 하나만 들면 — 위험. 다른 하나만 들면 — 똑같이 위험. 그런데 절반씩 섞으면 — 그 조합이 두 자산 각각보다 덜 위험할 수 있다. 가끔은 훨씬 덜. 우연도 수수료 구조도 아니다. 이차식의 교차항 하나가 그 일을 하고, 그 이차식은 벡터 모듈이 합의 제곱 길이를 쓸 때 나오는 식과 똑같다.
위험은 더해지지 않는다 — 상관계수를 통해 엮인다. 위험은 단일 수익률이 아니라 가능한 수익률의
위험 = 분산 — 'risky'가 실제로 측정하는 것
금융에서 _위험_은 _최악의 경우 얼마나 잃을 수 있는가_가 아니라 _결과가 평균 주변에서 얼마나 흔들리는가_를 줄여 부르는 말이다. 표준 도구는
두 자산, 네 개의 수
자산 A, B를 고른다. 각각 평균 수익률과 분산이 있다: . A에 비중 , B에 비중 로 섞는다. 조합의 평균은 어렵지 않다 — 가중 평균이다:
평균만 보면, μ가 같은 자산을 섞는 건 의미가 없다 — 똑같은 μ가 나올 뿐이다. 그런데 조합의 _분산_에는 두 항이 아니라 세 항이 있다:
앞 두 항은 짐작대로다 — 각 자산의 분산에 비중의 제곱을 곱한 것. 놀라운 건 세 번째,
import numpy as np
# Two assets: same mean return 5%, same standard deviation σ = 1.
# We'll compute portfolio mean and variance for any (weight, correlation).
mu_A, mu_B = 0.05, 0.05
sig_A, sig_B = 1.0, 1.0
def portfolio(w, rho):
"""w: fraction in A; (1-w) in B. rho: correlation of returns."""
mu = w * mu_A + (1 - w) * mu_B
var = (w**2 * sig_A**2
+ (1 - w)**2 * sig_B**2
+ 2 * w * (1 - w) * rho * sig_A * sig_B)
return mu, var
# Same expected return regardless of weight (because mu_A == mu_B).
# Variance is what moves.
[(rho, *portfolio(w=0.5, rho=rho)) for rho in (1.0, 0.0, -1.0)]
# → [(1.0, 0.05, 1.00), perfect lockstep — no diversification benefit
# (0.0, 0.05, 0.50), independent — variance halves at 50/50
# (-1.0, 0.05, 0.00)] perfect anti — risk literally vanishes상관계수 — 정규화된 공분산
공분산은 단위가 어색하다 (A의 단위 × B의 단위). 그래서 단위 없는 버전을 쓴다:
세 가지 경우가 있다. — 완전히 같이 움직이면 — 는 그저 와 의 가중 평균이다. 섞어서 얻는 게 없다. — 독립이면 — 교차항이 사라지고, 는 분산의 가중 평균 아래로 떨어진다. — 정반대로 움직이면 — 교차항이 큰 _음수_가 된다. 이고 일 때 분산은 정확히 0이 된다. 위험이 줄어드는 정도가 아니라 아예 사라진다. 위 위젯은 이 세 경우를 다이얼 하나로 훑어 보여준다.
# Minimum-variance weight, closed form.
# Take d/dw of σ²_p(w) and set to zero:
# w* = (σ_B² − ρ σ_A σ_B) / (σ_A² + σ_B² − 2 ρ σ_A σ_B)
def min_var_weight(rho, sig_A=1.0, sig_B=1.0):
num = sig_B**2 - rho * sig_A * sig_B
den = sig_A**2 + sig_B**2 - 2 * rho * sig_A * sig_B
return num / den if abs(den) > 1e-12 else 0.5
[(rho, min_var_weight(rho)) for rho in (-1, -0.5, 0, 0.5, 0.99)]
# → [(-1, 0.50), A and B equally weighted — perfect cancellation
# (-0.5, 0.50), still 50/50 because σ_A = σ_B
# (0, 0.50),
# (0.5, 0.50),
# (0.99, 0.50)]
# With σ_A = σ_B the answer is always 0.5; differing σ's would tilt w*.이건 벡터의 |a + b|²와 같은 대수
포트폴리오 분산 공식은 금융이 새로 발명한 게 아니다 — 벡터 합의 제곱 길이 공식에 금융 용어를 입힌 것일 뿐이다. 수익률을 무작위 벡터로 보자. 각 자산이 2D 벡터의 한 성분이고, 포트폴리오는 그 가중 결합이다. 벡터 모듈의 제곱 길이 항등식:
를 로, 를 로, 내적 를 로 바꿔 보자 — 포트폴리오 분산이 그대로 복원된다. 공분산은 무작위 변수에 정의된 내적이다. 둘 사이 각도의 코사인이 바로 _상관계수_다. “두 자산이 직각” = 무상관, “두 자산이 같은 방향” = 양의 상관, “두 자산이 반대 방향” = 음의 상관이고, 이 짝이 서로를 _상쇄_한다.
벡터 모듈이 물리·그래픽·ML·그리고 금융에서까지 쓰이는 이유가 여기에 있다 — 같은 두 연산 (더하기, 늘이기)이 베지에 제어점을 움직이고 포트폴리오를 만든다. 응용들이 정리를 공유하는 게 아니라 대수를 공유한다.
분산 최소 비중
. 한 줄짜리 미분 문제다. 답:
이면, 모든 에 대해 로 정리된다. 변동성이 같은 두 자산의 가장 안전한 조합은 언제나 반반이다. 이면 식이 한쪽으로 기운다 — 변동성이 낮은 자산이 더 큰 비중을 받지만, 그 기울기는 에도 달려 있다. 위젯은 를 분산 곡선 위 초록 점으로 표시한다. 를 움직여 보면 그 주변에서 곡선이 평평해지거나 날카로워진다. 본격적인 _현대 포트폴리오 이론_의 일반화 — N개 자산, N×N 공분산 행렬, 제약 아래에서 이차식을 최소화하는 문제 — 도 결국 같은 계산을 벡터-행렬 형태로 옮겨 적은 것일 뿐이다. 한 짝, 세 항, 한 교차항. 나머지는 장부 정리다.
# Sanity check via Monte Carlo: simulate joint returns at given ρ,
# form the 50/50 portfolio, measure realized variance, compare to formula.
import numpy as np
def simulate(rho, n=200_000, seed=0):
rng = np.random.default_rng(seed)
z1 = rng.standard_normal(n)
z2 = rng.standard_normal(n)
a = mu_A + sig_A * z1
b = mu_B + sig_B * (rho * z1 + np.sqrt(1 - rho**2) * z2)
p = 0.5 * a + 0.5 * b
return p.mean(), p.var()
formula = portfolio(w=0.5, rho=-0.5)
sim = simulate(rho=-0.5)
formula, sim
# → ((0.05, 0.25), (0.0501, 0.2503))
# Closed form and simulation agree to three decimals.
# The whole MPT machinery from Markowitz onward sits on top of this single
# scalar identity; the rest is generalizing to N assets and adding
# constraints (no shorts, sector caps, etc.).ρ = 0은 독립이라는 뜻이 아니라 선형으로 무상관이라는 뜻이다. A와 B가 비선형 관계 (예: B = A²)로 단단히 묶여 있어도 대칭 범위에서는 ρ ≈ 0이 나올 수 있다. 포트폴리오 분산 공식은 ρ를 그대로 쓰기 때문에 이런 경우엔 위험을 과소평가한다. 2008년 이전의 quant 전략들이 과거 ρ만으로 짝을 줄세우다 비싸게 배운 교훈이다. 분산은 이차 모멘트일 뿐이고, 나머지는 더 높은 모멘트와 copula에 들어 있다. 여기 수학은 가정 아래에서는 정확하다 — 위험은 그 가정 안에 숨어 있다.
위험은 더해지지 않는다 — 상관계수를 통해 엮인다. 포트폴리오 분산은 — 세 항, 그 중 한 교차항. 섞어서 얻는 것이 바로 이 교차항이고, 음수가 될 수도 있다. 그래서 위험한 두 가지를 합쳤을 때 각자보다 더 안전할 수 있다.
자산 A의 평균 수익률 , B는 . 50/50 조합을 든다. 포트폴리오 평균 수익률은? 이제 25% A, 75% B로 기울이면 무엇이 변하는가?
A, B 둘 다 , (완전한 동조). 에서 를 계산하라. (전부 B), (전부 A)과 비교해 보라.
둘 다 σ = 1, 이번엔 이다. 이 정확히 되는 가 있다는 것을 보이고, 그 값을 찾아라. 실제 포트폴리오가 이걸 이룰 수 없는 이유는?
자산 A: , . 자산 B: , , . “상식적인” 투자자는 이렇게 말한다: A의 기대 수익이 더 높고 기간도 같으니 A에 올인. 섞은 조합이 위험 조정 수익 (무위험 수익률 위 μ를 σ로 나눈 값)에서 더 나을 수 있음을 보여라. w = 0.5에서 σ_p를 계산해 σ_A와 비교하라.
금융 강의는 포트폴리오 분산을 새로운 항등식처럼 들이민다. 공분산 행렬은 출처 없이 등장한다. 선형대수 강의는 내적과 제곱 길이를 다루면서도 내적이 곧 포트폴리오를 부분의 합 이상으로 만드는 바로 그 연산이라는 사실을 짚지 않는다. 둘은 같은 수학 조각이다. Lemma는 를 옆에 나란히 두어 그 동일성을 눈으로 보게 한다. 현대 포트폴리오 이론, 샤프 비율, efficient frontier — 모두 이 항등식 위에 차원과 제약을 더 쌓아 올린 것이다. 새로운 수학이 필요한 게 아니라, 장부 정리를 견딜 인내심이 필요할 뿐이다.