본문 바로가기

Study Information Technology

포트폴리오 최적화 모델 주식 배분 최적화를 위한 분석 기법

728x90
반응형

포트폴리오 최적화 모델: 주식 배분 최적화를 위한 분석 기법

Overview

포트폴리오 최적화(Portfolio Optimization)는 다양한 금융 자산, 특히 주식의 배분을 최적화하여 투자 수익을 극대화하는 과정입니다. 이 과정에서는 각 주식의 상관 관계와 변동성을 분석하여 자산을 어떻게 배분할지 결정합니다. 주식 시장에서는 자산들의 수익률, 리스크(변동성), 그리고 상관관계를 기반으로 효율적인 포트폴리오를 구축하는 것이 중요한데, 이를 위해 여러 가지 포트폴리오 최적화 모델이 사용됩니다. 이 글에서는 그 중 가장 중요한 모델과 핵심 개념을 다루고, 실제로 주식 배분을 어떻게 최적화할 수 있는지 자세히 설명하겠습니다.


1. 포트폴리오 최적화의 기본 개념

포트폴리오 최적화는 자산의 배분을 결정하는 과정입니다. 목표는 리스크를 최소화하면서 수익을 극대화하는 것입니다. 이는 수익률위험(변동성) 두 가지 측면을 동시에 고려해야 하는 문제로, 이를 해결하기 위한 수학적 모델링이 필요합니다.

1.1. 수익률과 리스크

  • 수익률(Return): 특정 자산의 성과를 나타내는 지표로, 일반적으로 일정 기간 동안의 가격 변화율로 계산됩니다.

예시:

  • A 주식의 지난 1년 동안의 수익률은 (현재 가격 - 시작 가격) / 시작 가격으로 계산합니다.

  • 위험(Risk): 자산의 가격 변동성을 의미합니다. 변동성이 클수록 리스크가 크다고 볼 수 있습니다. 변동성은 일반적으로 표준편차(standard deviation)로 측정됩니다.

예시:

  • A 주식이 일주일마다 5%씩 오르내린다면 그 주식의 변동성은 상대적으로 큰 편입니다.

1.2. 상관관계(Correlation)

주식 간의 상관관계는 각 자산 간의 관계를 나타냅니다. 상관관계가 높은 자산들끼리 함께 움직이기 때문에, 포트폴리오에서 이 자산들을 함께 보유할 경우 리스크가 커질 수 있습니다.

  • 양의 상관관계: 두 자산이 같은 방향으로 움직일 때, 예를 들어 주식 A가 오르면 주식 B도 오르는 경우입니다.
  • 음의 상관관계: 두 자산이 반대 방향으로 움직일 때, 예를 들어 주식 A가 오르면 주식 B는 내리는 경우입니다.
  • 상관관계가 0: 두 자산은 서로 아무런 관계가 없으며 독립적으로 움직입니다.

상관관계를 잘 이해하는 것은 리스크를 분산하는 데 중요한 역할을 합니다. 예를 들어, 서로 상관관계가 낮거나 음의 상관관계를 가진 자산을 섞어 보유하면 전체 포트폴리오의 변동성을 줄일 수 있습니다.


2. 주요 포트폴리오 최적화 모델

2.1. 평균-분산 최적화 모델 (Mean-Variance Optimization)

평균-분산 최적화(Mean-Variance Optimization)해리 마코위츠(Harry Markowitz)가 개발한 가장 널리 알려진 포트폴리오 최적화 모델입니다. 이 모델은 주식의 기대 수익률과 리스크(분산 또는 표준편차)를 이용하여 최적의 자산 배분을 찾습니다.

모델 설명
  • 목표: 주어진 리스크 수준에서 최대한의 수익을 추구하거나, 주어진 수익률에서 리스크를 최소화하는 자산 배분을 찾습니다.

  • 기본 수식:

  • 수익률: ( E(R_p) = w_1 E(R_1) + w_2 E(R_2) + ... + w_n E(R_n) )

  • 리스크: ( \sigma_p^2 = w_1^2 \sigma_1^2 + w_2^2 \sigma_2^2 + 2 w_1 w_2 \text{Cov}(1,2) + ... )

여기서 ( w_1, w_2, ..., w_n )은 자산의 비중(배분 비율), ( E(R_i) )는 자산 i의 기대 수익률, ( \sigma_i^2 )는 자산 i의 분산, ( \text{Cov}(i,j) )는 자산 i와 j의 공분산을 나타냅니다.

예시

만약 3개의 자산(A, B, C)이 있고, 각 자산의 수익률과 리스크가 다음과 같다고 합시다:

  • 자산 A: 수익률 10%, 리스크 15%
  • 자산 B: 수익률 7%, 리스크 10%
  • 자산 C: 수익률 5%, 리스크 8%

이때, 각 자산의 상관관계(예: A와 B의 상관관계)가 주어지면, 평균-분산 모델을 이용해 각 자산의 배분 비율을 계산하여 최적의 포트폴리오를 구성할 수 있습니다.

2.2. 블랙-리터만 모델 (Black-Litterman Model)

블랙-리터만 모델은 평균-분산 최적화 모델을 확장한 방법입니다. 이 모델은 투자자가 가지고 있는 주관적인 기대(예: 특정 자산에 대한 긍정적인 또는 부정적인 전망)를 반영하여 더 현실적인 최적화 결과를 도출하는 데 사용됩니다.

모델 설명

블랙-리터만 모델은 주식의 기본적인 기대 수익률을 시장 균형에 맞춰 조정하고, 투자자가 제공하는 주관적인 의견을 결합하여 수익률 예측을 개선합니다.

  • 예를 들어, A 주식에 대해 10%의 수익률을 예상하는 투자자가 있다면, 이 정보를 모델에 반영하여 시장의 기본적인 예측을 보정합니다.

이 모델은 시장의 예측과 주관적인 의견을 통합하여 더욱 현실적이고 신뢰할 수 있는 포트폴리오를 생성할 수 있게 해줍니다.


3. 포트폴리오 최적화의 실제 구현

포트폴리오 최적화 모델을 실제로 구현하는 과정은 몇 가지 중요한 단계로 나눌 수 있습니다. 이를 파이썬 코드로 설명하겠습니다.

3.1. 데이터 수집

우리는 먼저 주식의 가격 데이터를 수집해야 합니다. 이를 위해 yfinance와 같은 라이브러리를 사용할 수 있습니다.

import yfinance as yf

# 주식 티커 리스트
tickers = ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'TSLA']

# 주식 데이터 다운로드 (5년치 주식 데이터)
data = yf.download(tickers, start="2018-01-01", end="2023-01-01")['Adj Close']

3.2. 수익률 계산

수익률은 주식 가격의 변화율로 계산됩니다.

# 주식의 일일 수익률 계산
returns = data.pct_change().dropna()

3.3. 포트폴리오 리스크와 수익률 계산

이제 수익률을 바탕으로 포트폴리오의 평균 수익률과 변동성을 계산할 수 있습니다.

# 각 자산의 평균 수익률과 공분산 계산
mean_returns = returns.mean()
cov_matrix = returns.cov()

# 포트폴리오 수익률과 리스크 계산
weights = [0.2, 0.2, 0.2, 0.2, 0.2]  # 예시로 균등 배분
portfolio_return = sum(mean_returns * weights)
portfolio_volatility = (sum(weights[i] * weights[j] * cov_matrix.iloc[i, j]
for i in range(len(weights)) for j in range(len(weights)))) ** 0.5

print(f"포트폴리오 예상 수익률: {portfolio_return * 100:.2f}%")
print(f"포트폴리오 예상 리스크(변동성): {portfolio_volatility * 100:.2f}%")

3.4. 최적화

이를 바탕으로 최적화 문제를 해결하여 리스크를 최소화하거나 수익을 극대화하는 포트폴리오 비중을 찾습니다. 최적화는 scipy의 최적화 도구를 이용해 해결할 수 있습니다.

from scipy.optimize import minimize

# 최적화 함수 (리스크 최소화)
def objective(weights):
return (sum(weights[i] * weights[j] * cov_matrix.iloc[i, j]
for i in range(len(weights)) for j in range(len(weights)))) ** 0.5

# 제약 조건: weights 합이
728x90
반응형