跳到正文

重采样效率,以 Bootstrap 方式

Michaud (1998) 和 López de Prado (2016) 的重采样效率。Bootstrap 输入、逐个优化、再求平均。一种实用的 MVO 估计误差疗法。

第 8 篇 · 共 12 篇 约 12 分钟

前面几篇文章展示了 Markowitz 不稳定性的一系列疗法:收缩、稳健优化、Black-Litterman、最小方差、CVaR。它们都有效,但都不是 Richard Michaud 提出的方案。

Michaud 1989 年的论文诊断了问题(估计误差)。他 1998 年的书 Efficient Asset Management(与 Robert Michaud 合著)提出了一个修复方案:重采样。思路在概念上很简单:对数据进行多次 bootstrap,对每个 bootstrap 样本做优化,对所得权重求平均。

这不是临时凑数的 hack,而是一种带贝叶斯色彩的处理输入不确定性的方法。每个 bootstrap 样本都是对同一潜在 (μ,Σ)(\mu, \Sigma) 的有噪声估计。对这些有噪声的最优解求平均,给出”中心”最优的更稳定估计。

本文涵盖数学(基本就是 bootstrap 和平均)、与贝叶斯推断的联系、López de Prado 2016 年的改进,以及何时重采样值得付出计算代价的实践问题。

核心流程

用样本估计的标准 MVO:

  1. 从历史收益计算 μ^,Σ^\hat{\mu}, \hat{\Sigma}。
  2. 解 MVO 得到 w^⋆\hat{w}^\star。

重采样效率:

  1. 生成 BB 个历史收益的 bootstrap 样本。
  2. 对每个 bootstrap 样本 bb,计算 (μ^b,Σ^b)(\hat{\mu}_b, \hat{\Sigma}_b) 并解 MVO 得到 w^b⋆\hat{w}_b^\star。
  3. 求平均:wˉ=1B∑b=1Bw^b⋆\bar{w} = \frac{1}{B} \sum_{b=1}^B \hat{w}_b^\star。

这就是基本流程。bootstrap 样本是”有放回”的,即从原始 TT 个观测中有放回地抽 TT 个。

对每个 bootstrap 样本,你得到不同的 (μ^b,Σ^b)(\hat{\mu}_b, \hat{\Sigma}_b) 和不同的最优权重向量 w^b⋆\hat{w}_b^\star。w^b⋆\hat{w}_b^\star 之间的差异反映了优化器的抽样分布。求平均给出一个方差更小的点估计。

为什么平均有效

直觉来自估计量的标准偏差-方差权衡。

每个 w^b⋆\hat{w}_b^\star 是”真实”最优权重 w0⋆w_0^\star(“真实”指数据生成过程下的最优)的一个有噪声估计。bootstrap 样本是来自估计量抽样分布的独立抽样。它们的平均具有相同的期望但更小的方差。

具体地:

E[wˉ]=E[w^b⋆]=w0⋆+bias\mathbb{E}[\bar{w}] = \mathbb{E}[\hat{w}_b^\star] = w_0^\star + \text{bias} Var(wˉ)=1BVar(w^b⋆)\text{Var}(\bar{w}) = \frac{1}{B} \text{Var}(\hat{w}_b^\star)

偏差不变(平均无法消除它)。方差缩减为 1/B1/B。对 B=200B = 200,相当于方差缩小 200 倍。

实践中,这意味着:重采样权重比朴素 MVO 权重更稳定(换手率更低、对自身的样本后跟踪误差更低)。它们也可能带来更低的收益样本外方差,但这取决于具体问题。

贝叶斯解读

平均有一种贝叶斯解读。在 (μ,Σ)(\mu, \Sigma) 上的均匀先验下,bootstrap 分布近似于数据生成参数的后验分布。每个 bootstrap 样本都是从后验中的一次抽样。

bootstrap 最优解的平均是对优化器的贝叶斯后验均值的近似:

wˉ≈E[w⋆(μ,Σ)∣data]\bar{w} \approx \mathbb{E}[w^\star(\mu, \Sigma) | \text{data}]

这有时称为权重的”贝叶斯估计量”。它在平方误差下最小化后验期望损失。

这里有个微妙问题。贝叶斯最优组合(在比如均值-方差效用下)一般不等于 MVO 最优解的平均。两者只在特殊效用(风险厌恶系数为 1 的二次效用)或特定先验下才一致。Michaud 的重采样效率并不声称自己是完全贝叶斯的;它是一个实用的近似。

Michaud 的”效率”妙招

Michaud 不止于对权重求平均。他还提议对有效前沿求平均。

流程:

  1. 对每个 bootstrap 样本 bb,计算有效前沿。
  2. 对平均前沿上的每一点(目标收益 rˉ\bar{r}),重采样效率权重是所有以 rˉ\bar{r} 为目标的 bootstrap 样本下的权重平均。
  3. 重采样效率前沿是各 bootstrap 前沿的平均。

这比对单一目标收益求平均更一般。它给出一条比任何单一 bootstrap 前沿都更平滑的完整前沿。

数学上:

wˉ(rˉ)=1B∑b=1Bw^b⋆(rˉ)\bar{w}(\bar{r}) = \frac{1}{B} \sum_{b=1}^B \hat{w}_b^\star(\bar{r})

这给出一条作为 rˉ\bar{r} 函数的重采样效率前沿。实践中,算一次就可以用它来选择目标收益。

López de Prado 的改进

在 Advances in Financial Machine Learning(2018,第 16 章)以及 2016 年的一篇工作论文中,López de Prado 把 Michaud 的流程形式化,并加入了若干改进。

改进 1:基于 NumPy 的 bootstrap,关注结构性断裂。 朴素 bootstrap 假设样本独立同分布。收益存在序列相关、波动率聚集和结构性断裂。López de Prado 推荐 block bootstrap 或 stationary bootstrap 来保留部分时间序列结构。

改进 2:每个 bootstrap 内做收缩。 对每个 bootstrap 样本,在解 MVO 之前对 Σ^b\hat{\Sigma}_b 做 Ledoit-Wolf 收缩。这把收缩与重采样叠加,获得额外稳健性。

改进 3:按置信度加权平均。 不做等权平均,而是按每个 bootstrap 解的似然加权。w^b⋆\hat{w}_b^\star 的权重正比于 exp⁡(−χb2/2)\exp(-\chi^2_b / 2),其中 χb2\chi^2_b 是 bootstrap 样本 bb 对原始数据的拟合优度。

改进 4:样本外评估。 用组合式净化交叉验证(同样来自 López de Prado)来评估样本外的重采样效率。标准回测因为不考虑序列相关而高估表现。

完整的 López de Prado 流水线在 mlfinlab 中实现。约 100 行 Python 代码。

一个可运行的实现

代码层面的基本流程:

import numpy as np
from scipy.optimize import minimize

def resampled_efficiency(returns, n_bootstrap=200, target_return=0.01):
    n_obs, n_assets = returns.shape
    weights = np.zeros((n_bootstrap, n_assets))
    
    for b in range(n_bootstrap):
        # Bootstrap resample (with replacement)
        idx = np.random.choice(n_obs, size=n_obs, replace=True)
        boot = returns[idx]
        
        mu_b = boot.mean(axis=0)
        Sigma_b = np.cov(boot.T)
        
        # Shrink Sigma for stability
        Sigma_b = ledoit_wolf_shrink(boot)
        
        # Solve MVO at target return
        weights[b] = solve_mvo(mu_b, Sigma_b, target_return)
    
    # Average across bootstraps
    return weights.mean(axis=0)

对 N=50N = 50 个资产、B=200B = 200 次 bootstrap,现代机器几秒钟跑完。对 N=500N = 500 个资产、B=1000B = 1000,需要几分钟。极易并行,可以简单地跨核分配。

问题

重采样效率并不完美。三个问题。

问题 1:计算成本。 每次 bootstrap 就是一个 QP 求解。对 B=200B = 200 且频繁重新估计,成本会累加。在跨度 20 年、月度再平衡的回测中,你可能要跑 240 次重采样优化,每次 200 个 bootstrap。合计 48,000 次 QP 求解。在笔记本上要跑几个小时。

问题 2:偏差没消除。 平均降低方差但不消除偏差。如果真实 (μ0,Σ0)(\mu_0, \Sigma_0) 给出的权重系统性地偏离等权组合,重采样效率无法捕获。尤其是如果你的预期收益估计存在系统性偏差(这很常见;参见 Black-Litterman 那篇文章),重采样会继承这个偏差。

问题 3:bootstrap 假设。 bootstrap 假设你的历史样本能代表未来。如果未来结构性不同(状态切换、新资产类别、金融危机),bootstrap 分布就是错的。重采样效率会自信地给出错误答案。

第三点最为深刻。bootstrap 是频率派工具,它给出”在数据生成过程稳定假设下估计量的方差”。在金融中,这是一个强假设。样本外,重采样效率可能被不做此假设的简单方法压制。

与其他方法的比较

重采样效率相比替代方法表现如何?

vs. 朴素 MVO:重采样效率在样本外 Sharpe 上获胜。Michaud 原始论文在某些情况下显示年化 100-200 个基点的提升。

vs. Ledoit-Wolf 收缩:大致相当。两者都降低方差。重采样更贵但不需要选择收缩目标。

vs. Black-Litterman:目标不同。Black-Litterman 使用市场隐含先验;重采样效率使用 bootstrap 先验。Black-Litterman 允许纳入观点;重采样效率不允许。如果你有观点,Black-Litterman 更好;没有的话,两者相当。

vs. 风险平价:风险平价完全不用 μ\mu。重采样效率用(通过 MVO)。风险平价对 μ\mu 的估计误差更稳健,但灵活性较差。

vs. 层次风险平价:HRP 不用 μ\mu,利用相关性结构进行配置。重采样效率联合使用 μ\mu 和 Σ\Sigma,但不利用结构。不同问题,不同工具。

底线:重采样效率是一种体面的中等复杂度方法。比朴素 MVO 好,与收缩相当,有观点时不如 Black-Litterman,没观点时与 HRP 相当。

何时使用

粗略地说:

  • 你有一个中等规模的资产集合(N=20N = 20 到 200200)。
  • 你对单个资产没有强烈观点。
  • 你想要一个对估计误差稳健的方法。
  • 你能负担计算成本。
  • 你在做不允许做空的股票或均衡组合。

对没有观点层的量化多资产基金来说,这是一个不错的默认。它不适合 HFT(太慢)也不适合高度集中的选股组合(太过分散)。

理论依据

有一个潜在问题:为什么重采样有效?诚实的回答是:它在经验上有效,理论依据是局部的。

一种依据:一致性。当 T→∞T \to \infty 且 NN 固定时,bootstrap 分布集中在真实参数附近。所以 wˉ\bar{w} 收敛到 w0⋆w_0^\star(取决于 bootstrap 对真实 DGP 近似程度的偏差)。

另一种依据:通过正则化降低偏差。bootstrap 平均近似于平先验下的贝叶斯估计量。贝叶斯估计量通常比对应的频率派估计量具有更低的均方误差,特别是在有限样本下。

第三种依据(来自 López de Prado):重采样是一种元学习。通过在不同数据子集上多次求解同一问题,你学到的是优化器的结构而非任何单一样本的结构。这在精神上类似于机器学习中的 bagging。

这些都不构成完整依据。重采样效率是一个有效的启发式方法。和金融中大多数启发式方法一样,理论落后于实践。

现代视角

Michaud 的重采样效率已经在业界悄然被采用。多数大型资产管理人会跑它的某种变体,通常与其他技术结合。“重采样前沿”是机构资产配置软件(Aladdin、Axioma、BarraOne 都有变体)中的标准工具。

最常见的生产配置:重采样,然后施加组合约束(不允许做空、行业上限、换手率限制)。这就把重采样的方差缩减与约束的正则化叠加在一起。

如果你在搭建组合构造流水线,并且想要一个站得住脚的默认,重采样效率是一个合理的选择。它对任何特定问题都不是最佳,但它对很多问题都稳健。

文献综述

  • Michaud (1989). “The Markowitz Optimization Enigma: Is ‘Optimized’ Optimal?” Financial Analysts Journal 45(1): 31-42. 误差放大器批评。
  • Michaud & Michaud (1998). Efficient Asset Management: A Practical Guide to Stock Portfolio Optimization and Asset Allocation. Harvard Business School Press. 重采样效率方案。
  • López de Prado (2016). “A Robust Estimator of the Covariance Matrix for Portfolio Construction.” Journal of Risk Model Validation 10(1): 55-72.
  • López de Prado (2018). Advances in Financial Machine Learning. Wiley. 第 16 章有完整实现。ISBN: 978-1-119-48208-6.
  • Scherer (2002). “Portfolio Construction with Resampled Efficient Frontiers: A Cautionary Note.” Journal of Risk 5(2): 67-78. 批评。
  • Cogneau & Hübner (2009). “The (In)Famous Resampled Efficient Frontier.” Journal of Asset Management 10(1): 50-62. 另一篇批评。
  • Simões, Gonçalves & Gomes (2019). “Resampled Efficient Frontier: A Comparison of Methods.” Journal of Banking and Finance 105: 169-186.

Bootstrap 分布详解

重采样效率取决于 (μ,Σ)(\mu, \Sigma) 的 bootstrap 分布。两种 bootstrap 风格。

朴素 bootstrap:从历史收益中有放回地抽样。每个样本与原始样本等长。使用样本均值和协方差作为输入。

Block bootstrap:把历史收益分成块,对块有放回抽样。每个样本保留块内的序列相关。用于具有序列依赖的时间序列。

Stationary bootstrap:block bootstrap 的变体,块长随机(几何分布)。用于具有非常数方差的时间序列。

循环 bootstrap:把时间序列首尾相接,从起点抽样,取固定长度窗口。比朴素 bootstrap 保留更多结构。

对金融收益,block bootstrap 或 stationary bootstrap 是合适的。朴素 bootstrap 破坏了真实收益的序列相关和波动率聚集。

López de Prado 的实现:

def block_bootstrap(returns, block_size=21):
    """Block bootstrap with given block size."""
    T = len(returns)
    n_blocks = T // block_size
    samples = []
    for _ in range(n_blocks):
        start = np.random.randint(0, T - block_size)
        samples.append(returns[start:start + block_size])
    return np.vstack(samples)

这是基础的 block bootstrap。生产中,用带几何块长的 stationary bootstrap。

贝叶斯 bootstrap

频率派 bootstrap 的贝叶斯替代方案。不做有放回的重抽样,而是给每个历史观测分配一个 Dirichlet 分布的权重:

wt∼Dirichlet(1),∑twt=1w_t \sim \text{Dirichlet}(\mathbf{1}), \quad \sum_t w_t = 1

“合成”样本均值是 ∑twtrt\sum_t w_t r_t,“合成”协方差是 ∑twt(rt−rˉ)(rt−rˉ)⊤\sum_t w_t (r_t - \bar{r})(r_t - \bar{r})^\top。

贝叶斯 bootstrap 比频率派 bootstrap 具有更好的频率派性质。它对抽样分布给出更平滑的估计。

对重采样效率,贝叶斯 bootstrap 可以替代频率派 bootstrap。数学相似,但所得权重更平滑。

与 Bagging 的联系

重采样效率本质上是 bagging(bootstrap aggregating)应用于 MVO。在机器学习中,bagging 已知能在不增加偏差的前提下降低方差。

对决策树,bagging 降低过拟合。对 MVO,bagging 降低优化器在输入不确定性下的方差。数学相同:对同一潜在函数的有噪声估计求平均。

随机森林是 bagging + 随机特征选择。MVO 中”特征选择”的类比是对每个 bootstrap 选择资产的子集。这就是”集成 MVO”或”bagged asset selection”。

López de Prado 2018 年的书详细讨论了这一点。重采样与资产子集选择的组合比单独任一种都更稳健。

收敛性与一致性

当 T→∞T \to \infty 且 NN 固定时,重采样效率如何收敛?

如果 bootstrap 是一致的(对 i.i.d. 样本成立),bootstrap 分布收敛到真实抽样分布。wˉ\bar{w} 收敛到真实最优 w0⋆w_0^\star(加上 bootstrap 近似真实情况所带来的偏差)。

收敛速度取决于 TT 和 NN。对 NN 固定、T→∞T \to \infty,收敛是参数级的(阶数 1/T1/T)。对 NN 随 TT 增长,收敛可能更慢。

实践中,这意味着:随着历史样本增大,重采样效率越来越接近真实最优。60 个月度数据、50 个资产的情况下,你处在重采样帮助很大的有限样本状态。

重采样效率与 Black-Litterman

一种自然的组合:重采样,但用 Black-Litterman 来设 μ\mu 而不是用样本均值。

对每个 bootstrap 样本:

  1. 从 bootstrap 样本估计 Σ^b\hat{\Sigma}_b。
  2. 用 Σ^b\hat{\Sigma}_b 把 μ^b\hat{\mu}_b 设为 Black-Litterman 后验。
  3. 解 MVO 得到 wb⋆w_b^\star。

跨 bootstrap 样本求平均。

这叠加了两种方差缩减技术:Black-Litterman(μ\mu 的贝叶斯收缩)和重采样(bootstrap 方差缩减)。组合比单独任一种都更稳健。

在生产中,对大多数应用这属于过度工程。单用 Black-Litterman 通常就够。但对高赌注的应用(主权财富基金、大型养老金),这种组合是站得住脚的。

重采样效率与风险平价

另一种组合:用重采样稳定协方差矩阵,然后在稳定后的估计上解风险平价。

对每个 bootstrap 样本:

  1. 计算 Σ^b\hat{\Sigma}_b。
  2. 跨样本求平均:Σˉ=1B∑bΣ^b\bar{\Sigma} = \frac{1}{B} \sum_b \hat{\Sigma}_b。

这是一种带贝叶斯色彩的协方差估计量。它与 Ledoit-Wolf 收缩类似,但使用 bootstrap 分布而非结构化目标。

然后在 Σˉ\bar{\Sigma} 上解 ERC。结果比样本协方差上的 ERC 更稳定。

重要的实现细节

生产中有三件事要做对。

细节 1:约束处理。 对每个 bootstrap 样本施加相同约束。不要让某些样本产生无约束最优而其他样本产生有约束最优,否则求平均会混合不兼容的解。

细节 2:数值稳定性。 使用稳健的 QP 求解器。一些 bootstrap 样本会有接近奇异的协方差矩阵。在求解前给 Σb\Sigma_b 加上一个小的对角项:

Sigma_b = Sigma_b + 1e-8 * np.eye(N)

细节 3:随机种子。 设置种子以保证可复现性。不同 bootstrap 样本给出不同平均。你希望在相同数据上得到相同平均。

重采样无效的情形

三种状态下重采样效率跑输单次方法。

状态 1:强信号。 如果你有一个强而可靠的 alpha 信号,样本均值就是一个好的估计。重采样只是在真实值周围增加噪声。单次 MVO 干净地捕获信号。

状态 2:非平稳数据。 如果潜在分布正在变化,bootstrap 抽样自过去。若未来不同,重采样分布就是错的。每次再平衡都重新估计 μ\mu 和 Σ\Sigma 的单次方法可能适应得更好。

状态 3:样本极小。 如果 TT 极小(比如 T=20T = 20),bootstrap 分布不可靠。在小样本上重采样只是给一个不可靠的估计再增加更多有噪声估计。

对多数机构应用,这些状态都不适用。你有足够的数据,信号没有那么强,数据大致平稳。重采样效率没问题。

要点回顾

重采样效率就是 bootstrap MVO。有放回地抽样,逐个优化,求平均。把权重方差缩小为 1/B1/B。

它是对 MVO 估计误差的实用疗法。Michaud 的原始方案。López de Prado 把它形式化,并加入了 block bootstrap、每次 bootstrap 内做收缩、按置信度加权平均。

计算成本是主要缺点。每次再平衡 100-1000 次 QP 求解。极易并行,跨核分配。

它稳健但对任何特定问题都不是最佳。当你没观点、想要一个合理默认时用它。

它可以与 Black-Litterman、风险平价和收缩组合以获得额外稳健性。生产中,你通常把重采样效率作为更大流水线中的一环。

它在强信号、非平稳数据或极小样本的状态下帮不上忙。要了解它的局限。

下一篇文章:因子组合构造,从因子而非资产出发构建组合。