跳到主要内容

Black-Litterman 模型

直觉

均值-方差优化的痛点:μ\mu 极难估准,估错一点权重就乱跳。Black-Litterman(BL)换了个思路:先从市场均衡反推一个合理的先验(隐含均衡收益),再温和地融入你的主观观点,得到后验收益再做优化——既不盲信历史均值,也不纯凭主观。

三步

  1. 先验:从市场权重反推隐含均衡收益 Π=δΣwmkt\Pi=\delta\Sigma w_{\text{mkt}}δ\delta 为风险厌恶);
  2. 观点:用矩阵表达 Q=Pμ+εQ=P\mu+\varepsilon,配不确定度 Ω\Omega
  3. 后验(贝叶斯融合):
μBL=[(τΣ)1+PΩ1P]1[(τΣ)1Π+PΩ1Q]\mu_{\text{BL}}=\big[(\tau\Sigma)^{-1}+P^\top\Omega^{-1}P\big]^{-1}\big[(\tau\Sigma)^{-1}\Pi+P^\top\Omega^{-1}Q\big]
「人话」解释:BL 解决了什么?

直接用历史均值当 μ\mu → 权重极端、不稳定(比如历史涨最多的资产权重 90%)。 BL 让你从「市场已定价的均衡」出发(先验温和),再用有限的观点轻轻拉一下(后验)。 观点越确信(Ω\Omega 越小)、对收益和权重的拉力越大;不发表观点的资产,基本留在均衡附近。 结果是稳健、可解释的权重——这是机构实用的组合方法。

可运行案例:一个相对观点如何移动权重

先验用等权(教学简化,真实用市值权重);加入观点「股票每年比债券高 4%」,看后验权重如何抬升股票、压低债券。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from numpy.linalg import inv

df = pd.read_csv('/data/multi_asset_daily.csv', parse_dates=['date']).set_index('date')
assets = ['equity', 'bond', 'commodity', 'reit']
R = np.log(df[assets] / df[assets].shift(1)).dropna()
S = R.cov().values * 252
n = len(assets)

delta, tau = 2.5, 0.05
w_mkt = np.ones(n) / n                    # 先验权重(等权)
Pi = delta * S @ w_mkt                    # 隐含均衡收益(先验)

# 观点: equity - bond 每年 = 4%
P = np.array([[1.0, -1.0, 0.0, 0.0]])
Q = np.array([0.04])
Omega = P @ (tau * S) @ P.T               # 用 τΣ 估观点不确定度

# 后验收益
A = inv(inv(tau * S) + P.T @ inv(Omega) @ P)
mu_bl = A @ (inv(tau * S) @ Pi + P.T @ inv(Omega) @ Q)

# 后验权重
w_bl = inv(delta * S) @ mu_bl
w_bl /= w_bl.sum()

print("隐含先验 vs BL后验 收益:")
print(pd.DataFrame({'先验': Pi, '后验': mu_bl}, index=assets).round(3))
print("\n权重(等权先验 → BL后验):")
Ww = pd.DataFrame({'等权先验': w_mkt, 'BL后验': w_bl}, index=assets)
print(Ww.round(3))

Ww.plot(kind='bar', figsize=(7, 3.6))
plt.ylabel('权重'); plt.title('Black-Litterman:观点(股>债)抬升 equity、压低 bond')
plt.tight_layout(); plt.show()

小结

  • 先验从市场均衡反推 Π=δΣwmkt\Pi=\delta\Sigma w_{\text{mkt}},避免历史均值的极端;
  • 用贝叶斯把观点 (P,Q,Ω)(P,Q,\Omega) 融入,得后验 μBL\mu_{\text{BL}}
  • BL 权重稳健、可解释,是机构实战的主流组合方法之一。