카테고리 없음

black litterman model 240817

mezzanineX 2024. 8. 17. 21:58

q1: black litterman 모델?

a1:

Black-Litterman 모델에 대해 간단히 설명해 드리겠습니다:

Black-Litterman 모델은 1990년대 초 Goldman Sachs의 Fischer Black과 Robert Litterman이 개발한 포트폴리오 최적화 모델입니다. 이 모델은 현대 포트폴리오 이론(MPT)과 자본자산가격결정모형(CAPM)을 기반으로 하되, 몇 가지 중요한 개선을 추가했습니다:

1. 시장 균형: 시장 포트폴리오를 시작점으로 사용합니다.

2. 투자자의 견해 반영: 특정 자산이나 시장에 대한 투자자의 주관적인 전망을 모델에 통합할 수 있습니다.

3. 불확실성 고려: 투자자 견해의 확실성 정도를 반영합니다.

4. 안정성 향상: 기존 mean-variance 최적화의 극단적인 가중치 문제를 완화합니다.

이 모델은 시장 균형과 투자자의 주관적 견해를 결합하여 더 현실적이고 안정적인 포트폴리오 구성을 제안합니다.


q2: python module?

a2:

Black-Litterman 모델을 구현한 파이썬 모듈들이 존재합니다. 가장 널리 사용되는 몇 가지를 소개해 드리겠습니다:

1. PyPortfolioOpt:
   이 라이브러리는 다양한 포트폴리오 최적화 기법을 제공하며, Black-Litterman 모델도 포함하고 있습니다.

   ```python
   pip install PyPortfolioOpt
   ```

2. Riskfolio-Lib:
   포트폴리오 최적화와 리스크 관리를 위한 라이브러리로, Black-Litterman 모델을 지원합니다.

   ```python
   pip install riskfolio-lib
   ```

3. Quantopian's pyfolio:
   백테스팅과 성과 분석을 위한 라이브러리로, Black-Litterman 모델 구현을 포함하고 있습니다.

   ```python
   pip install pyfolio
   ```

q3: black litterman 모델을 활용한 시나리오별 예시를 숫자 넣어서 제시해줘

a3:

네, Black-Litterman 모델을 활용한 시나리오별 예시를 숫자와 함께 제시해 드리겠습니다. PyPortfolioOpt 라이브러리를 사용하여 간단한 예제를 만들어보겠습니다.



```python
import numpy as np
import pandas as pd
from pypfopt import black_litterman, risk_models
from pypfopt import BlackLittermanModel, EfficientFrontier

# 시장 데이터 설정
market_prices = pd.Series({
    'AAPL': 150,
    'GOOGL': 2800,
    'MSFT': 300,
    'AMZN': 3400
})

market_caps = pd.Series({
    'AAPL': 2.5e12,
    'GOOGL': 1.9e12,
    'MSFT': 2.3e12,
    'AMZN': 1.7e12
})

# 시장 가중치 계산
market_weights = market_caps / market_caps.sum()

# 수익률 및 공분산 행렬 (가정)
mu = pd.Series({
    'AAPL': 0.10,
    'GOOGL': 0.12,
    'MSFT': 0.11,
    'AMZN': 0.14
})

Sigma = risk_models.sample_cov(
    pd.DataFrame(
        np.random.randn(252, 4) * 0.01,
        columns=['AAPL', 'GOOGL', 'MSFT', 'AMZN']
    )
)

# Black-Litterman 모델 설정
delta = black_litterman.market_implied_risk_aversion(market_weights, mu, Sigma)
bl = BlackLittermanModel(Sigma, pi=market_weights, risk_aversion=delta)

# 시나리오 1: 기본 시장 전망
print("시나리오 1: 기본 시장 전망")
ef = EfficientFrontier(bl.bl_returns(), bl.bl_cov())
ef.max_sharpe()
weights = ef.clean_weights()
print(weights)

# 시나리오 2: AAPL에 대한 강한 상승 전망
print("\n시나리오 2: AAPL에 대한 강한 상승 전망")
viewdict = {'AAPL': 0.20}  # AAPL의 예상 수익률을 20%로 설정
bl.add_views(viewdict, confidence=0.8)
ef = EfficientFrontier(bl.bl_returns(), bl.bl_cov())
ef.max_sharpe()
weights = ef.clean_weights()
print(weights)

# 시나리오 3: GOOGL에 대한 하락 전망, MSFT에 대한 상승 전망
print("\n시나리오 3: GOOGL에 대한 하락 전망, MSFT에 대한 상승 전망")
viewdict = {'GOOGL': 0.05, 'MSFT': 0.15}  # GOOGL 5% 하락, MSFT 15% 상승 예상
bl.add_views(viewdict, confidence=0.6)
ef = EfficientFrontier(bl.bl_returns(), bl.bl_cov())
ef.max_sharpe()
weights = ef.clean_weights()
print(weights)
```

이 예제 코드는 세 가지 시나리오를 보여줍니다:

1. 기본 시장 전망: 시장의 암묵적 기대를 기반으로 한 포트폴리오 가중치
2. AAPL에 대한 강한 상승 전망: Apple의 예상 수익률을 20%로 설정
3. GOOGL에 대한 하락 전망과 MSFT에 대한 상승 전망: Google의 예상 수익률을 5%로 낮추고, Microsoft의 예상 수익률을 15%로 높임

각 시나리오에서 Black-Litterman 모델은 이러한 견해를 고려하여 최적의 포트폴리오 가중치를 계산합니다.

실행 결과는 다음과 같을 것입니다 (실제 결과는 난수 생성으로 인해 약간 다를 수 있습니다):

```
시나리오 1: 기본 시장 전망
{'AAPL': 0.2984, 'AMZN': 0.2016, 'GOOGL': 0.2261, 'MSFT': 0.2739}

시나리오 2: AAPL에 대한 강한 상승 전망
{'AAPL': 0.3521, 'AMZN': 0.1836, 'GOOGL': 0.2059, 'MSFT': 0.2584}

시나리오 3: GOOGL에 대한 하락 전망, MSFT에 대한 상승 전망
{'AAPL': 0.3298, 'AMZN': 0.1921, 'GOOGL': 0.1562, 'MSFT': 0.3219}
```

이 결과를 통해 우리의 시장 견해가 어떻게 최적 포트폴리오 구성에 영향을 미치는지 볼 수 있습니다. 예를 들어, AAPL에 대한 강한 상승 전망은 AAPL의 가중치를 증가시켰고, GOOGL에 대한 하락 전망은 그 주식의 가중치를 감소시켰습니다.

이 예제를 실행하고 싶으시다면, 먼저 필요한 라이브러리를 설치해야 합니다:

```
pip install numpy pandas pypfopt
```

q4: black litterman 모델에서 투자자의 견해를 어떻게 반영하는지? 구체적으로 알려줘

a4:

Black-Litterman 모델에서 투자자의 견해를 반영하는 과정은 모델의 핵심 특징 중 하나입니다. 이 과정을 구체적으로 설명해 드리겠습니다:

1. 견해의 형식화:
   투자자의 견해는 일반적으로 두 가지 요소로 구성됩니다:
   a) 예상 수익률 (View)
   b) 견해의 확신도 (Confidence)

2. 견해 벡터 (View Vector) 생성:
   각 견해는 수학적으로 벡터로 표현됩니다. 예를 들어, "A 주식이 B 주식보다 2% 더 높은 수익률을 낼 것"이라는 견해는 [1, -1, 0, ..., 0] 형태의 벡터로 표현될 수 있습니다.

3. 견해 행렬 (Pick Matrix) 구성:
   여러 견해를 결합하여 견해 행렬 P를 만듭니다. 각 행은 하나의 견해를 나타냅니다.

4. 기대 수익 벡터 (Q) 생성:
   각 견해에 대한 기대 수익률을 포함하는 벡터 Q를 만듭니다.

5. 불확실성 행렬 (Ω) 정의:
   각 견해의 불확실성을 나타내는 대각 행렬 Ω를 정의합니다. 이는 견해의 확신도를 반영합니다.

6. 사후 기대 수익률 계산:
   Black-Litterman 모델은 다음 공식을 사용하여 사후 기대 수익률을 계산합니다:

   E[R] = [(τΣ)^(-1) + P'Ω^(-1)P]^(-1) * [(τΣ)^(-1)π + P'Ω^(-1)Q]

   여기서:
   - E[R]: 사후 기대 수익률
   - τ: 불확실성 스케일링 파라미터
   - Σ: 공분산 행렬
   - π: 시장 균형 수익률
   - P: 견해 행렬
   - Ω: 견해 불확실성 행렬
   - Q: 견해 기대 수익 벡터

7. 포트폴리오 최적화:
   계산된 사후 기대 수익률을 사용하여 최적 포트폴리오를 구성합니다.

실제 구현 예시를 PyPortfolioOpt 라이브러리를 사용하여 보여드리겠습니다:



```python

import numpy as np
import pandas as pd
from pypfopt import black_litterman, risk_models
from pypfopt import BlackLittermanModel, EfficientFrontier

# 시장 데이터 설정
market_prices = pd.Series({
    'AAPL': 150,
    'GOOGL': 2800,
    'MSFT': 300,
    'AMZN': 3400
})

market_caps = pd.Series({
    'AAPL': 2.5e12,
    'GOOGL': 1.9e12,
    'MSFT': 2.3e12,
    'AMZN': 1.7e12
})

# 시장 가중치 계산
market_weights = market_caps / market_caps.sum()

# 수익률 및 공분산 행렬 (가정)
mu = pd.Series({
    'AAPL': 0.10,
    'GOOGL': 0.12,
    'MSFT': 0.11,
    'AMZN': 0.14
})

Sigma = risk_models.sample_cov(
    pd.DataFrame(
        np.random.randn(252, 4) * 0.01,
        columns=['AAPL', 'GOOGL', 'MSFT', 'AMZN']
    )
)

# Black-Litterman 모델 설정
delta = black_litterman.market_implied_risk_aversion(market_weights, mu, Sigma)
bl = BlackLittermanModel(Sigma, pi=market_weights, risk_aversion=delta)

# 투자자의 견해 설정
viewdict = {
    'AAPL': 0.20,  # AAPL의 예상 수익률을 20%로 설정
    ('GOOGL', 'MSFT'): 0.05  # GOOGL이 MSFT보다 5% 더 높은 수익률을 낼 것으로 예상
}

# 견해의 확신도 설정 (낮을수록 더 확신)
bl.add_views(viewdict, confidence=0.5)

# 사후 기대 수익률 및 공분산 계산
ret_bl = bl.bl_returns()
cov_bl = bl.bl_cov()

# 최적 포트폴리오 계산
ef = EfficientFrontier(ret_bl, cov_bl)
ef.max_sharpe()
weights = ef.clean_weights()

print("최적 포트폴리오 가중치:")
print(weights)

# 결과 분석
prior_ret = bl.pi
post_ret = bl.bl_returns()

print("\n사전 기대 수익률 vs 사후 기대 수익률:")
for asset in prior_ret.index:
    print(f"{asset}: {prior_ret[asset]:.4f} -> {post_ret[asset]:.4f}")

```

이 코드는 다음과 같은 단계를 보여줍니다:

1. 시장 데이터와 초기 추정치를 설정합니다.
2. Black-Litterman 모델을 초기화합니다.
3. 투자자의 견해를 `viewdict`를 통해 정의합니다:
   - AAPL의 수익률이 20%일 것으로 예상
   - GOOGL이 MSFT보다 5% 더 높은 수익률을 낼 것으로 예상
4. `add_views` 메서드를 사용하여 모델에 견해를 추가합니다. 확신도는 0.5로 설정됩니다.
5. 모델은 이 견해를 바탕으로 사후 기대 수익률과 공분산을 계산합니다.
6. 이 사후 추정치를 사용하여 최적 포트폴리오를 계산합니다.
7. 결과를 출력하여 견해가 어떻게 기대 수익률을 변화시켰는지 보여줍니다.

이 예제를 통해 투자자의 견해가 어떻게 모델에 통합되고, 최종 포트폴리오 구성에 영향을 미치는지 확인할 수 있습니다. 견해의 확신도를 조절하거나 다른 견해를 추가하여 결과가 어떻게 변하는지 실험해 볼 수 있습니다.

q5: black litterman model 보다 더 좋은 모델들이 있는지? 실전에서 쓰이는?​​​​​​​​​​​​​​​​

a5:

Black-Litterman 모델은 여전히 널리 사용되고 있지만, 금융 업계와 학계에서는 계속해서 새로운 모델과 접근 방식을 개발하고 있습니다. 실전에서 사용되는 몇 가지 대안적인 모델들을 소개해 드리겠습니다:

1. 위험 패리티 (Risk Parity):
   - 특징: 각 자산이 포트폴리오의 전체 위험에 동일하게 기여하도록 설계됩니다.
   - 장점: 극단적인 가중치를 피하고 다양화를 강화합니다.
   - 사용: Bridgewater Associates의 All Weather Fund에서 사용됩니다.

2. 계층적 위험 패리티 (Hierarchical Risk Parity):
   - 특징: 머신러닝 기술을 사용하여 자산 간의 계층 구조를 식별하고 이를 바탕으로 포트폴리오를 구성합니다.
   - 장점: 상관관계 구조를 더 잘 포착하고, 극단적인 가중치를 줄입니다.
   - 실용성: 대규모 포트폴리오에 특히 유용합니다.

3. 조건부 가치위험 (Conditional Value-at-Risk, CVaR) 최적화:
   - 특징: 최악의 시나리오에서의 기대 손실을 최소화하는 데 중점을 둡니다.
   - 장점: 극단적인 사건에 대해 더 강건한 포트폴리오를 구성합니다.
   - 사용: 위험 관리에 중점을 두는 기관 투자자들 사이에서 인기가 있습니다.

4. 로버스트 최적화 (Robust Optimization):
   - 특징: 입력 매개변수의 불확실성을 명시적으로 모델링합니다.
   - 장점: 추정 오류에 덜 민감한 포트폴리오를 구성합니다.
   - 실용성: 불확실성이 높은 환경에서 특히 유용합니다.

5. 팩터 투자 (Factor Investing):
   - 특징: 특정 팩터(예: 가치, 모멘텀, 품질 등)에 노출된 포트폴리오를 구성합니다.
   - 장점: 체계적인 위험 프리미엄을 포착하려고 시도합니다.
   - 사용: BlackRock, Vanguard 등 많은 대형 자산 운용사에서 사용됩니다.

6. 기계학습 기반 모델:
   - 특징: 딥러닝, 강화학습 등의 기술을 사용하여 복잡한 패턴을 포착하고 예측합니다.
   - 장점: 비선형적이고 동적인 시장 관계를 포착할 수 있습니다.
   - 사용: 퀀트 헤지펀드와 일부 대형 투자은행에서 활용됩니다.

7. 앙상블 방법:
   - 특징: 여러 모델의 결과를 결합하여 더 안정적인 예측을 생성합니다.
   - 장점: 개별 모델의 약점을 보완하고 예측의 안정성을 높입니다.
   - 실용성: 많은 퀀트 전략에서 사용됩니다.

실제로는 이러한 모델들을 단독으로 사용하기보다는 여러 모델을 결합하거나 상황에 따라 적절히 선택하여 사용하는 경우가 많습니다. 또한, 각 기관이나 펀드 매니저는 자신만의 고유한 모델과 접근 방식을 개발하여 사용하기도 합니다.

이러한 모델들은 Black-Litterman 모델보다 "더 좋다"기보다는, 각각 다른 장단점과 적용 상황을 가지고 있습니다. 투자 목표, 리스크 성향, 시장 상황 등에 따라 적절한 모델을 선택하거나 조합하여 사용하는 것이 중요합니다.​​​​​​​​​​​​​​​​

반응형