Black-Litterman 模型
直觉
均值-方差优化的痛点: 极难估准,估错一点权重就乱跳。Black-Litterman(BL)换了个思路:先从市场均衡反推一个合理的先验(隐含均衡收益),再温和地融入你的主观观点,得到后验收益再做优化——既不盲信历史均值,也不纯凭主观。
三步
- 先验:从市场权重反推隐含均衡收益 ( 为风险厌恶);
- 观点:用矩阵表达 ,配不确定度 ;
- 后验(贝叶斯融合):
「人话」解释:BL 解决了什么?
直接用历史均值当 → 权重极端、不稳定(比如历史涨最多的资产权重 90%)。 BL 让你从「市场已定价的均衡」出发(先验温和),再用有限的观点轻轻拉一下(后验)。 观点越确信( 越小)、对收益和权重的拉力越大;不发表观点的资产,基本留在均衡附近。 结果是稳健、可解释的权重——这是机构实用的组合方法。
可运行案例:一个相对观点如何移动权重
先验用等权(教学简化,真实用市值权重);加入观点「股票每年比债券高 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()
小结
- 先验从市场均衡反推 ,避免历史均值的极端;
- 用贝叶斯把观点 融入,得后验 ;
- BL 权重稳健、可解释,是机构实战的主流组合方法之一。