Black-Litterman 模型:Goldman Sachs 的组合构建框架
Read in English1990 年,Goldman Sachs 的 Fischer Black 和 Robert Litterman 解决了组合理论中最难堪的问题:Markowitz 优化会给出荒唐的结果(把 100% 都押在某个冷门资产类别上),因为它把充满不确定性的回报估计当成了确凿事实。Black-Litterman 模型从市场均衡出发——即要让当前价格站得住脚,回报必须是多少——再根据你的具体观点温和地作出调整,并明确写出置信度。结果是:既体现市场智慧、又体现你自己见解的稳定而合理的组合。
💡 核心创新
Black-Litterman 不问"预期回报是多少?"(无从得知),而是问"回报要是多少,市场组合才会是最优的?"(可以算出来)。然后,再按你对自己观点的置信程度,成比例地调整这个均衡。谦逊的观点带来小幅改动,高度确信的观点带来大幅改动。背后的数学是贝叶斯统计。
内容摘要
Black-Litterman 要解决的问题:
- 经典的均值-方差优化(Markowitz 1952)只要输入稍有变化,就会产生极端而不稳定的组合
- 把美国股票的预期回报从 7.0% 改成 7.1%:美国股票的最优配置就从 40% 跳到 95%
- 组合经理"没法"直接用 Markowitz——他们必须不停地推翻它的结果
- Black-Litterman 通过锚定一个合理的起点,让优化真正可用
两步框架:
- 第一步:市场均衡回报 —— 由当前的市值权重和风险,反推回报必须是多少
- 第二步:与观点融合 —— 按你写明的置信度加权,把均衡回报朝你的预测方向调整
谁在用它:
- Goldman Sachs Asset Management:模型的原创方,内部所有多资产组合都在用
- BlackRock:使用改良版,称为"Aladdin Factor Model"
- JP Morgan Asset Management、Vanguard Quantitative Equity
- 任何管理多资产类别组合的成熟机构投资者
第 1 部分:Markowitz 为什么在实务中失灵
误差放大问题
Markowitz 证明了最优组合权重高度取决于预期回报、波动率和相关性。问题在于:预期回报是最不确定的输入,优化器却把它当成事实。
数学敏感性分析:五资产组合
| 资产 | 基准预期回报 | 最优权重 | 回报 + 0.5% | 新的最优权重 | 变化 |
|---|---|---|---|---|---|
| 美国股票 | 7.0% | 45% | 7.5% | 78% | +33% |
| 国际股票 | 6.5% | 22% | 6.5% | 3% | -19% |
| 美国债券 | 3.5% | 20% | 3.5% | 10% | -10% |
| 黄金 | 4.0% | 8% | 4.0% | 5% | -3% |
| REITs | 5.5% | 5% | 5.5% | 4% | -1% |
把美国股票的预期回报只加 0.5%,配置就从 45% 变成 78%——一个比回报估计标准误还小的差异,带来了 33 个百分点的摆动。
这就是从业者把 Markowitz 称作"误差放大器"的意思。它把你的估计误差拿来,放大成巨大的配置摆动。
从业者的两难
在 Black-Litterman 出现之前,从业者只有两个糟糕的选择:
- 方案 A:直接采用 Markowitz 的输出。 结果:极端配置(100% 押在一个资产上),任何理性投资者都无法接受,也无法向客户解释。
- 方案 B:用"判断"推翻 Markowitz。 结果:那你当初跑优化器干什么?你只是把直觉包装成了科学。
Black-Litterman 提供了 方案 C:以市场的集体判断为基准,再用一套数学上说得通的方法,用你自己的观点去微调它。
第 2 部分:第一步 —— 市场均衡回报(先验)
CAPM 的逆向推导
资本资产定价模型(CAPM)说:在均衡状态下,市场组合就是均值-方差最优的。这意味着我们可以从当前的市场权重倒推,找出隐含的预期回报——也就是能让今天的市场权重成为最优解的那组回报。
公式:
Π = λ × Σ × w_mkt
其中:
Π = 均衡超额回报向量(我们要求解的对象)
λ = 风险厌恶系数(全球股票市场通常取 2.5)
Σ = 资产回报的协方差矩阵
w_mkt = 市值权重
用大白话说:均衡回报与各资产对组合整体风险的贡献成正比。 给市场组合增加更多风险的资产,必须有更高的预期回报,才有理由被纳入。
实例:五资产全球组合
当前市值权重(2026 年全球可投资市场的近似值):
| 资产类别 | 市值权重 | 年化波动率 | 隐含均衡回报 |
|---|---|---|---|
| 美国股票(VTI) | 42% | 18% | 6.8% |
| 国际发达市场(VEA) | 28% | 17% | 5.9% |
| 新兴市场(VWO) | 12% | 24% | 7.2% |
| 全球债券(BND) | 14% | 6% | 1.8% |
| 商品/黄金(GLD) | 4% | 15% | 3.1% |
注意均衡算出了什么:
- 美国股票:6.8%(高权重 + 高波动 = 高要求回报)
- 全球债券:1.8%(波动更低,要求回报也更低)
- 这些数字合理、符合直觉——不像 Markowitz 用天真的输入吐出来的垃圾
- 如果你没有任何观点,就照市值权重持有。这就是"中性"的起点。
第 3 部分:第二步 —— 纳入观点(更新)
用 Black-Litterman 的语言表达观点
在 BL 的术语里,"观点"是一句关于相对回报或绝对回报的陈述,并配上一个置信度。共有三类:
绝对观点:
- "我认为美国股票未来一年的年化回报会是 9%"
- 写作:E[r_US] = 9.0%
- 置信度:"我有 80% 的把握"→ 通过观点的方差来表达
相对观点(机构实务中更常见):
- "我认为美国股票会跑赢国际股票 1.5%"
- 写作:E[r_US - r_Intl] = +1.5%
- 避免了必须给出绝对回报预测(那是出了名的不靠谱)
置信度:
- 用你这个观点的方差(不确定性)来表达
- 高置信度 → 低方差 → 观点强烈影响最终配置
- 低置信度 → 高方差 → 观点几乎撼动不了均衡
- 经验法则:先从 50% 置信度起步(观点与均衡各占一半权重),直到你有证据证明自己的预测好过随机
贝叶斯更新公式
Black-Litterman 用贝叶斯定理,把均衡回报(先验)和你的观点(似然)结合起来:
E[R] = [(τΣ)⁻¹ + PᵀΩ⁻¹P]⁻¹ × [(τΣ)⁻¹Π + PᵀΩ⁻¹Q]
其中:
E[R] = 后验(更新后)预期回报 —— 我们想要的结果
τ = 标量(均衡先验的不确定性;通常为 0.025-0.05)
Σ = 协方差矩阵
Π = 均衡回报(先验)
P = 挑选矩阵(你的观点作用于哪些资产)
Q = 你的观点向量(观点给出的回报估计)
Ω = 观点不确定性的对角矩阵(你的置信度)
别被数学吓住。 直觉很简单:结果就是均衡回报和你的观点的加权平均。如果你非常有把握(Ω 很小),你的观点占主导;如果你心里没底(Ω 很大),均衡占主导。
完整走一遍一个例子
设定:一个 50 万美元退休组合的三个观点
观点 1:"我认为美国股票每年会跑赢国际发达市场 2%。"(置信度:60%)
观点 2:"我认为新兴市场的回报会是 8.5%。"(置信度:40% —— 置信度较低,不确定区间更宽)
观点 3:"我认为债券的回报会是 3%(高于 1.8% 的均衡值,因为利率近期下行)。"(置信度:70%)
纳入观点之前(均衡):
- 美国:6.8%,国际:5.9%,新兴市场:7.2%,债券:1.8%,黄金:3.1%
- 最优权重:约 42% 美国、28% 国际、12% 新兴市场、14% 债券、4% 黄金
经 Black-Litterman 更新之后(后验):
- 美国:7.8%(+1.0%),国际:5.2%(-0.7%),新兴市场:7.8%(+0.6%),债券:2.6%(+0.8%),黄金:3.1%(不变——没有观点)
- 新的最优权重: 52% 美国、19% 国际、15% 新兴市场、11% 债券、3% 黄金
关键观察:
- 观点确实挪动了配置——但没有翻天覆地。美国从 42% 变成 52%(而不是像原始 Markowitz 那样冲到 90%)
- 黄金停留在它的均衡权重上(我们对黄金没有观点——模型尊重这一点)
- 部分置信度意味着部分调整:观点 1 的置信度为 60% → 大约施加了"完整"调整幅度的 60%
- 这个组合直观、可解释,同时体现了市场智慧和你自己的见解
第 4 部分:Python 实现
完整的 Black-Litterman 实现
import numpy as np
import pandas as pd
import yfinance as yf
from scipy.optimize import minimize
# ============================================================
# BLACK-LITTERMAN 模型:完整实现
# ============================================================
# 1. 定义资产与市场权重
tickers = ['VTI', 'VEA', 'VWO', 'BND', 'GLD']
names = ['US Equity', 'Intl Equity', 'Emerging', 'Bonds', 'Gold']
# 市值权重(近似的全球市场组合)
w_mkt = np.array([0.42, 0.28, 0.12, 0.14, 0.04])
# 2. 下载历史回报数据(3 年)
prices = yf.download(tickers, start='2022-01-01', end='2025-01-01')['Adj Close']
returns = prices.pct_change().dropna()
# 3. 计算协方差矩阵(年化)
Sigma = returns.cov() * 252 # 每年 252 个交易日
# 4. 计算均衡回报(逆向 CAPM)
lambda_risk = 2.5 # 风险厌恶系数(标准取值)
tau = 0.025 # 先验不确定性的缩放系数
Pi = lambda_risk * Sigma.values @ w_mkt # 均衡超额回报
print("EQUILIBRIUM RETURNS (Prior):")
for i, (name, ret) in enumerate(zip(names, Pi)):
print(f" {name:20}: {ret:.1%}")
# 5. 定义观点
# 观点 1:美国股票跑赢国际股票 2%(相对观点)
# P_1 = [1, -1, 0, 0, 0](做多美国,做空国际)
# Q_1 = 0.02(超额 2%)
# 置信度:60% → omega_1 与 1/0.60 成正比
# 观点 2:新兴市场回报 8.5%(绝对观点)
# P_2 = [0, 0, 1, 0, 0]
# Q_2 = 0.085
# 置信度:40%
# 观点 3:债券回报 3%(绝对观点)
# P_3 = [0, 0, 0, 1, 0]
# Q_3 = 0.03
# 置信度:70%
P = np.array([
[ 1, -1, 0, 0, 0], # 观点 1:美国对国际
[ 0, 0, 1, 0, 0], # 观点 2:新兴市场绝对观点
[ 0, 0, 0, 1, 0], # 观点 3:债券绝对观点
])
Q = np.array([0.02, 0.085, 0.03]) # 各观点的预期回报
# Omega:不确定性对角矩阵
# omega 越大 = 对该观点越没把握
# 规则:Omega_i = (1/confidence_i - 1) * P_i * tau*Sigma * P_i.T
confidence = np.array([0.60, 0.40, 0.70])
omega_diag = []
for i in range(len(Q)):
p_i = P[i:i+1, :]
var_view = float(p_i @ (tau * Sigma.values) @ p_i.T)
omega_diag.append(var_view * (1/confidence[i] - 1))
Omega = np.diag(omega_diag)
# 6. BLACK-LITTERMAN 更新(后验)
tau_Sigma = tau * Sigma.values
tau_Sigma_inv = np.linalg.inv(tau_Sigma)
P_Omega_inv_P = P.T @ np.linalg.inv(Omega) @ P
P_Omega_inv_Q = P.T @ np.linalg.inv(Omega) @ Q
BL_expected = np.linalg.inv(tau_Sigma_inv + P_Omega_inv_P) @ (tau_Sigma_inv @ Pi + P_Omega_inv_Q)
print("\nBLACK-LITTERMAN RETURNS (Posterior):")
for i, (name, eq_ret, bl_ret) in enumerate(zip(names, Pi, BL_expected)):
delta = bl_ret - eq_ret
print(f" {name:20}: {bl_ret:.1%} (vs equilibrium {eq_ret:.1%}, delta {delta:+.1%})")
# 7. 基于 BL 回报做均值-方差优化
def neg_sharpe(weights, expected_returns, cov_matrix, rf=0.045):
port_return = np.dot(weights, expected_returns)
port_vol = np.sqrt(weights @ cov_matrix @ weights)
return -(port_return - rf) / port_vol
constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x) - 1})
bounds = [(0, 0.60) for _ in range(len(tickers))] # 单一资产上限 60%
x0 = w_mkt # 从市场权重出发
result = minimize(neg_sharpe, x0,
args=(BL_expected, Sigma.values),
bounds=bounds, constraints=constraints)
BL_weights = result.x
print("\nOPTIMAL PORTFOLIO WEIGHTS (Black-Litterman):")
print(f"{'Asset':<20} {'Mkt Weight':>12} {'BL Weight':>12} {'Change':>12}")
print("-" * 60)
for name, mkt_w, bl_w in zip(names, w_mkt, BL_weights):
print(f"{name:<20} {mkt_w:>11.1%} {bl_w:>11.1%} {bl_w-mkt_w:>+11.1%}")
port_return = np.dot(BL_weights, BL_expected)
port_vol = np.sqrt(BL_weights @ Sigma.values @ BL_weights)
print(f"\nPortfolio Expected Return: {port_return:.1%}")
print(f"Portfolio Volatility: {port_vol:.1%}")
print(f"Sharpe Ratio: {(port_return - 0.045)/port_vol:.2f}")
第 5 部分:聪明地设定观点
你的观点从哪里来?
Black-Litterman 模型的好坏,取决于你的观点有多好。机构投资者的观点通常来自这些地方:
1. 基于估值的观点(长周期下最可靠):
- Shiller CAPE 比率:美国为 35 倍 → 预期 7 年回报约 4-5%(Shiller 的公式:1/CAPE)
- 新兴市场 CAPE 为 15 倍 → 预期回报约 7-8%(更有吸引力)
- 信用利差:如果高收益债利差在 300 个基点 → 债券回报接近平价水平;如果在 150 个基点 → 就是贵了。
- 观点:"未来 5 年新兴市场会跑赢美国 2-3%" —— 有强有力的历史证据
2. 基于宏观环境的观点:
- Fed 加息周期 → 债券表现落后 → 下调债券的均衡权重
- 高通胀 → 商品和 TIPS 表现领先 → 提高黄金/商品的权重
- 美元走强 → 以美元计价的国际股票表现落后
3. 基于因子的观点:
- 价值因子相对成长便宜 → "未来 3 年价值会跑赢成长 3%"
- 小盘股与大盘股的差距处于历史极值 → 预期会回归
校准置信度(最难的部分):
| 观点类型 | 建议置信度 | 理由 |
|---|---|---|
| 长期估值(10 年视角) | 50-65% | 历史证据充分;但时点难以把握 |
| 宏观环境(1-2 年视角) | 30-45% | 宏观择时出了名的困难 |
| 盈利增长预测(1 年) | 20-35% | 分析师的历史准确率很差 |
| 因子择时观点 | 40-55% | 有一定学术支持;但存在执行风险 |
| 没有观点 | 0%(从 P 矩阵中略去) | 绝不要放进一个你无法论证的观点 |
"没有观点"的纪律
Black-Litterman 最重要的洞见之一: 如果你对某个资产没有观点,就不要硬编一个出来。 干脆把它从 P 矩阵里略去。模型会让那个资产保持在均衡权重上。
这条纪律能避免投资者最常犯的错误:对每个资产都抱着薄弱、缺乏支撑的观点,于是在每一处都让组合稍稍"偏离"指数——最后得到一个看起来像主动押注、实则没有任何实质依据的组合。
第 6 部分:把 Black-Litterman 用于退休组合
针对退休场景的调整
经典的 BL 模型以最大化 Sharpe 比率为优化目标。对退休组合来说,你需要修改这个目标,把以下因素考虑进去:
1. 负债匹配(收入需求):
- 如果你每年需要 6 万美元收入:把它设定为一项"负债",转而优化盈余的波动率(组合回报相对于收入需求)
- BlackRock 的 ALM(资产负债管理)版 BL 做的正是这件事
2. 回撤约束:
- 修改优化问题:在 95% CVaR 不超过 15% 的约束下最大化回报(即可接受的一年最大亏损)
- 在同样的预期回报下,这会把最优组合推向波动更低的资产
3. 通胀观点:
- 把 TIPS、商品、REITs 纳入作为通胀对冲工具
- 表达观点:"美国股票的实际(经通胀调整后)回报会是 4%,而均衡值为 3.5%"
- 当通胀风险升高时,这会自然而然地提高抗通胀资产的配置
给 FIRE 投资者的三个实用 BL 组合
| 组合类型 | 核心观点 | 典型 BL 权重 | 预期回报 |
|---|---|---|---|
| "市场中性" (没有观点) | 无 —— 照市场权重持有 | 42% 美国、28% 国际、12% 新兴市场、14% 债券、4% 黄金 | 6.2%(均衡值) |
| "价值倾斜" | 新兴市场跑赢美国 2%;债券便宜 | 35% 美国、26% 国际、18% 新兴市场、17% 债券、4% 黄金 | 6.8% |
| "通胀对冲" | 通胀持续;实际利率维持低位 | 38% 美国、22% 国际、12% 新兴市场、8% 债券、10% 黄金、10% TIPS/REITs | 6.5%(实际回报) |
第 7 部分:把 Black-Litterman 与 HRP 结合
机构的组合拳
Goldman Sachs 和 BlackRock 并不会孤立地使用 BL。目前的最佳实践是:
第一步:用 Black-Litterman 生成预期回报 ("该持有什么"的决策)
第二步:用 HRP 或风险平价来确定权重 ("该持有多少"的决策)
为什么?BL 给出的预期回报估计比历史均值更好,但 Markowitz 优化算出的权重依然不稳定。而 HRP 的聚类方法能产出稳定的权重。把两者结合,就取到了双方的长处:
- BL 的预期回报:优于历史平均值,并体现你的观点
- HRP 的权重:稳定,对预期回报的微小变化不敏感
- 结合两者:样本外 Sharpe 比率比单用其中任何一个高 15-25%(学术研究,2020 年)
# 算出上面的 BL_expected 回报之后,改用 HRP 来定权重:
#(不要对 BL 回报做均值-方差优化,改用 HRP)
# 这样既避开了 MVO 的敏感性,又保留了 BL 在回报上的洞见
# BL 回报被用来给资产排序、并对 HRP 的配置作出倾斜
# 而不是直接喂给优化器
结语:什么时候该用 Black-Litterman
BL 最有价值的场景:
- 你有一个包含 5 个以上资产类别的多资产组合
- 你有具体、有依据的观点(基于估值或宏观)想要表达出来
- 你想要一套有原则、透明的框架(每一个配置决策都能解释清楚)
- 你受够了标准 MVO 给出的极端优化结果
BL 用处不大的场景:
- 你持有的是简单的三基金组合(Bogleheads 的做法更简单,也完全够用)
- 你压根没有任何观点(那就照市场权重持有——反正那本来就是 BL 的均衡解)
- 你的观点置信度全都很低(不到 30%)——那么小的调整几乎无关紧要
Fischer Black 和 Robert Litterman 的核心智慧:"不确定时,让市场说话。手上有信息时,谦逊地表达它。" 这就是机构做组合构建的方式——不是自负地宣称自己样样都比市场懂,而是有纪律地按照自己真实的置信程度,成比例地表达那些有充分依据的信念。
✅ 行动清单
- 从均衡出发: 为你的各个资产类别算出市值加权组合。这就是你的 Black-Litterman"无观点"基准组合。
- 找出你真正的信念: 你在哪些地方有真实、有证据支撑的观点?估值(CAPE 比率)、宏观(Fed 周期)、因子(价值对成长)?把它们写下来。
- 运行上面的 Python 代码 用你自己的资产类别和观点跑一遍,把 BL 算出的最优权重和你当前的组合对比一下。
- 与 HRP 结合: 把 BL 的回报作为输入,用 HRP 来定权重。这是 Goldman/BlackRock 的机构标准做法。
- 按季度复盘,而不是按月: BL 是用于战略性配置的。如果你每个月都在改观点,那就是交易过度了。一年或一季度复盘一次才合适。
延伸阅读
原始研究:
- Black, F. & Litterman, R.(1992):《Global Portfolio Optimization》——Financial Analysts Journal
- He, G. & Litterman, R.(1999):《The Intuition Behind Black-Litterman Model Portfolios》——Goldman Sachs
- Meucci, A.(2010):《The Black-Litterman Approach: Original Model and Extensions》——Bloomberg
相关文章:
互动工具: