평균-분산 최적화를 활용한 파이썬 포트폴리오 선택

파이썬을 사용하여 포트폴리오를 선택하는 방법은 여러 가지가 있지만, 그 중에서 평균-분산 최적화라는 방법을 활용하는 것이 유용합니다. 평균-분산 최적화는 투자 포트폴리오의 수익률과 리스크 간의 트레이드오프를 고려해 최적의 자산 배분을 결정하는 방법입니다.

파이썬에서는 다양한 라이브러리를 사용하여 평균-분산 최적화를 수행할 수 있습니다. 예를 들면, numpypandas는 데이터 처리와 분석에 유용한 기능을 제공하며, 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 데이터프레임의 각 열은 한 개의 자산을 나타내며, 각 행은 각 시점의 수익률을 나타냅니다. 초기 자산 배분은 무작위로 선택하고, 최적화 과정에서 최대화할 목적 함수는 예상 수익률이고, 최소화할 제약 조건은 리스크입니다.

이 예시 코드에서는 단순히 평균 수익률과 공분산만을 고려한 평균-분산 최적화를 수행하였지만, 실제로는 수익률의 확률 분포, 매매 비용, 제약 조건 등을 포함하는 확장된 버전의 모델을 사용하는 것이 좋습니다.

평균-분산 최적화를 활용하면 포트폴리오의 예상 수익률과 리스크를 고려하여 최적의 자산 배분을 결정할 수 있습니다. 앞서 언급한 예시 코드를 바탕으로 실제 데이터를 활용하면 더욱 정확한 포트폴리오 선택이 가능합니다.

#포트폴리오 #파이썬