파이썬을 사용하여 포트폴리오를 선택하는 방법은 여러 가지가 있지만, 그 중에서 평균-분산 최적화라는 방법을 활용하는 것이 유용합니다. 평균-분산 최적화는 투자 포트폴리오의 수익률과 리스크 간의 트레이드오프를 고려해 최적의 자산 배분을 결정하는 방법입니다.
파이썬에서는 다양한 라이브러리를 사용하여 평균-분산 최적화를 수행할 수 있습니다. 예를 들면, numpy
와 pandas
는 데이터 처리와 분석에 유용한 기능을 제공하며, scipy.optimize
는 최적화에 사용할 수 있는 많은 알고리즘을 포함하고 있습니다.
먼저, 포트폴리오를 선택하기 위해 사용할 데이터를 준비해야 합니다. 이 데이터는 각 자산의 수익률이나 가격 정보를 포함할 수 있습니다. 이 예시에서는 가상의 자산 데이터를 사용합니다.
import numpy as np
import pandas as pd
# 가상의 자산 수익률 데이터
returns = pd.DataFrame({'Asset 1': [0.05, 0.08, 0.07, 0.03],
'Asset 2': [0.12, 0.10, 0.09, 0.11],
'Asset 3': [0.06, 0.04, 0.03, 0.02]})
# 평균-분산 최적화 수행
def mean_variance_optimization(returns):
n = returns.shape[1] # 자산의 수
w = np.random.random(n) # 초기 자산 배분
w /= np.sum(w) # 자산 비중 합이 1이 되도록 정규화
covariance_matrix = np.cov(returns.T) # 자산 수익률의 공분산 행렬
mean_return = np.mean(returns, axis=0) # 자산의 평균 수익률
portfolio_return = np.dot(mean_return, w) # 포트폴리오의 예상 수익률
portfolio_risk = np.dot(np.dot(w, covariance_matrix), w.T) # 포트폴리오 리스크
return portfolio_return, portfolio_risk
portfolio_return, portfolio_risk = mean_variance_optimization(returns)
print(f"Portfolio Return: {portfolio_return}, Portfolio Risk: {portfolio_risk}")
위의 예시 코드에서는 returns
라는 데이터프레임에 각 자산의 수익률을 기록하고, mean_variance_optimization
함수를 사용하여 포트폴리오의 예상 수익률과 리스크를 계산합니다. returns
데이터프레임의 각 열은 한 개의 자산을 나타내며, 각 행은 각 시점의 수익률을 나타냅니다. 초기 자산 배분은 무작위로 선택하고, 최적화 과정에서 최대화할 목적 함수는 예상 수익률이고, 최소화할 제약 조건은 리스크입니다.
이 예시 코드에서는 단순히 평균 수익률과 공분산만을 고려한 평균-분산 최적화를 수행하였지만, 실제로는 수익률의 확률 분포, 매매 비용, 제약 조건 등을 포함하는 확장된 버전의 모델을 사용하는 것이 좋습니다.
평균-분산 최적화를 활용하면 포트폴리오의 예상 수익률과 리스크를 고려하여 최적의 자산 배분을 결정할 수 있습니다. 앞서 언급한 예시 코드를 바탕으로 실제 데이터를 활용하면 더욱 정확한 포트폴리오 선택이 가능합니다.
#포트폴리오 #파이썬