포트폴리오
현대 포트폴리오 이론
- 현대 포트폴리오 이론(Modern Portfolio Theory)은 경제학자 해리 마코위츠가 1952년에 제시한 이론
- 이후 노벨 경제학상 수상으로 이어짐
- 포트폴리오의 기대 수익은 자산의 기대 수익을 가중합한 것과 같음
- 포트폴리오의 위험은 자산 간의 상관관계(ρij)에 영향을 받음
- 상관관계가 낮은 자산들로 포트폴리오를 구성하면 같은 기대 수익에서 위험을 낮출 수 있음(분산 효과)

데이터
데이터 불러오기.
🤖 AI 프롬프트
stock.xlsx를 판다스로 읽어 price 데이터 프레임을 만들어줘. Date 열을 날짜 형식의 인덱스로 사용해줘.
QQQ와 TLT를 50:50으로 투자할 때 수익률 평균과 표준편차를 각각 구해줘.
import pandas as pd
price = pd.read_excel("stock.xlsx", parse_dates=True, index_col="Date")
전월 대비 수익률을 비율로 계산한 뒤 백분율 단위로 변환.
returns = price.pct_change(fill_method=None) * 100
포트폴리오 계산
- QQQ와 TLT를 5:5로 섞은 포트폴리오를 계산
- 각 자산의 수익률에 투자 비중을 곱해 더함
asset1 = "QQQ"
asset2 = "TLT"
p = 0.5
portfolio = p * returns[asset1] + (1 - p) * returns[asset2]
portfolio.mean() # 수익률 평균
실행 결과
np.float64(0.741093411464344)
portfolio.std() # 수익률 표준편차(위험)
실행 결과
np.float64(3.220580540444184)
포트폴리오별 위험-수익 관계
- 가로축은 월수익률 표준편차, 즉 위험
- 세로축은 월평균 수익률
- 자산 조합 비중에 따라 위험과 수익률이 달라짐
- 상관관계가 낮은 자산을 섞을수록 같은 수익률에서 위험을 낮출 수 있는 조합이 나타날 수 있음
비중 p를 0에서 1까지 바꾸며 평균 수익률과 표준편차를 계산.
🤖 AI 프롬프트
QQQ의 비중을 0%에서 100%까지 10%p 간격으로 바꾸면서 각각의 평균 수익률과 표준편차를 보여줘.
import numpy as np
import matplotlib.pyplot as plt
results = []
for p in np.linspace(0, 1, 11):
portfolio_p = p * returns[asset1] + (1 - p) * returns[asset2]
results.append({
"p": p,
"Mean Return": portfolio_p.mean(),
"Standard Deviation": portfolio_p.std(),
})
results_df = pd.DataFrame(results)
results_df
실행 결과
p Mean Return Standard Deviation
0 0.0 -0.002166 3.917624
1 0.1 0.146486 3.589302
2 0.2 0.295138 3.339638
3 0.3 0.443790 3.187170
4 0.4 0.592441 3.146062
5 0.5 0.741093 3.220581
6 0.6 0.889745 3.403138
7 0.7 1.038397 3.677681
8 0.8 1.187049 4.025433
9 0.9 1.335701 4.429182
10 1.0 1.484353 4.875037
위험-수익 관계 시각화.
plt.plot(
results_df["Standard Deviation"],
results_df["Mean Return"],
marker="o",
)
plt.xlabel("Standard Deviation")
plt.ylabel("Mean Return")

자산간 상관관계
- 포트폴리오 위험을 이해하려면 자산 간 상관관계를 확인해야 함
- 상관계수 행렬: 여러 변수 간의 상관계수를 한 번에 계산해 행렬 형태로 나타낸 것
- 대각선은 자기 자신과의 상관계수이므로 항상 1
- 행과 열을 바꿔도 값이 같은 대칭 행렬
- 히트맵(heatmap): 상관계수의 크기를 색상으로 표시해 한눈에 비교
- VOO, QQQ, TLT의 상관계수 행렬을 계산하고 히트맵으로 시각화
🤖 AI 프롬프트
자산간 수익률 상관계수 행렬을 히트맵으로 시각화
import seaborn as sns
corr_matrix = returns[["VOO", "QQQ", "TLT"]].corr()
sns.heatmap(corr_matrix, annot=True, cmap="coolwarm", vmin=-1, vmax=1)

- VOO와 QQQ: 상관계수 약 0.91. 거의 함께 움직이므로 섞어도 분산 효과가 작음
- TLT와 주식(VOO, QQQ): 상관계수가 0에 가까움. 섞으면 위험을 낮추는 효과를 기대할 수 있음
- 상관계수 행렬은 회귀분석에서 독립변수끼리 너무 비슷한지, 즉 다중공선성(multicollinearity)을 미리 살펴볼 때도 사용
퀴즈
현대 포트폴리오 이론에서 포트폴리오의 기대 수익을 계산하는 방식으로 맞는 것은?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.