跳到正文

样本外 vs 样本内:假二分法

为什么样本内工作必要但危险,为什么单个保留期不是魔法真相机器,以及纪律时间序列验证如何组合两者。

第 7 篇 · 共 12 篇 约 9 分钟

启动论点的两个数字

研究人员在 1980 到 2014 的月度数据上开发策略并保留 2015 到 2024。样本内 Sharpe 是 1.8。保留 Sharpe 是 0.3。哪个数字是真相?

熟悉答案是信任样本外结果。方向上对且智识上不完整。保留期是市场的新实现,但它可能短、不寻常、交易昂贵,或被策略从未设计处理的 regime 主导。样本内结果被拟合和选择污染,但它仍可能含有真实效应的证据。

有用区分不是“样本内坏,样本外好”。它是“什么信息用于选择假设,什么信息用于评估冻结假设?”样本内数据可以生成和估计理论。样本外数据可以挑战它。任一数字都不应被崇拜。

样本内实际意味着什么

样本内数据至少有三个作用:

  • 估计参数如信号权重、衰减率或波动率目标;
  • 检查机制是否如预期行为;
  • 生成关于策略应在哪里和何时工作的假设。

麻烦开始于当同一数据还选择信号、参数、组合构建、基准和报告窗口。那时模型不仅在学习关系。它在学习研究人员。

假设策略的真实期望超额收益是 μ\mu,估计收益是 μ^\hat{\mu}。简单分解是

μ^=μ+ε,\hat{\mu} = \mu + \varepsilon,

其中 ϵ\epsilon 是采样噪声。如果研究人员在 NN 个候选中选择观察到最大 μ^\hat{\mu} 的规格,已选噪声项不再以零为中心。赢家有构造的正噪声。

那是核心样本内问题。它不要求灵活的机器学习模型。带十个回看期的电子表格可以做到。

为什么单个保留期不是来自天堂的裁决

样本外测试防止一种错误:用同一观察选择和评估最终规格。它不解决每个问题。

首先,保留期仍是样本。十年月度期包含 120 个观察在考虑自相关、重叠持仓和聚集冲击前。Sharpe 估计的标准误可以大。对月度独立收益,粗标准误是

SE(SR^)≈1+12SR2T,SE(\widehat{SR}) \approx \sqrt{\frac{1+\frac{1}{2}SR^2}{T}},

需要额外项用于偏度、峰度和依赖(Lopez de Prado and Bailey 2014)。对 T=120T=120 和适中 Sharpe,不确定度足够宽报告的 0.3 不远于零或 0.8。

其次,保留期可能是特定 regime。仅通过成长股主导十年测试的价值策略可能看起来死亡即使长期溢价时变。仅在安静区间震荡市场测试的趋势策略可能出于相反原因看起来失效。

第三,保留期可以被花费。如果研究人员每个周五检查保留期并在每次失望后改变策略,它不再是样本外。数据不知道研究人员承诺尊重。

第四,已选策略将选择偏差带入保留期解释。研究人员没有随机选一个策略。策略因在开发中看起来好被选。保留期估计在严格假设下相对冻结规则无偏,但冻结那个特定规则的决策不是随机的。

金融键中的偏差-方差权衡

统计学习将问题框定为偏差和方差之间的权衡。死板模型可能遗漏真实非线性关系。灵活模型可能拟合噪声。在金融中方差问题被放大因为独立观察数小于行数所示。

对收益预测函数 f^\hat{f},期望平方预测误差可分解为

$$E[(Y-\hat{f}(X))^2] = \sigma^2 + \mathrm{Bias}[\hat{f}(X)]^2 + \mathrm{Var}[\hat{f}(X)].$

不可缩减噪声 σ2\sigma^2 在资产收益中大。这使易于将训练误差的小减少误认为有意义经济改善。样本中赢得几个基点的模型可能用参数不确定性大幅增加支付代价。

相同逻辑适用于因子。广义估值度量可能因忽略行业结构有偏差。高度调谐估值复合可能有更低样本内偏差和远更高方差。样本外问题不是模型是否复杂。是复杂性是由真实信息还是数据吸收噪声的能力支付的。

为什么时间改变验证设计

随机洗牌金融观察通常错误当信息通过时间到达。除非研究问题明确关于无时间泄露的平稳横截面,在历史模拟中在 2020 数据上训练的模型不应预测 2015 数据。

时间序列分割尊重信息方向:

Fold训练窗口测试窗口
11980-19951996-2000
21980-20002001-2005
31980-20052006-2010
41980-20102011-2015
51980-20152016-2020

扩展窗口设计用所有先前信息。滚动窗口设计用固定近期历史并能更快适应 regime 变化。两者都不普遍正确。窗口规则本身就是模型选择,应在最终比较前指定。

当标签重叠,边界需要更多小心。如果时刻 tt 的特征预测从 tt 到 t+ht+h 的收益,标签与测试期重叠的训练观察可以通过结果构造泄露未来信息。清除去除重叠观察;禁运在训练集后增加间隙。López de Prado 因此开发清除和禁运交叉验证(López de Prado 2018,第 7 和 12 章)。

Walk-forward 是模拟不只分数

Walk-forward 验证模仿实时策略如何学习:

  1. 在时刻 t0t_0 时的可用数据上拟合。
  2. 为下一测试窗口生成预测。
  3. 推进时钟。
  4. 用仅当时可用的信息重新拟合。
  5. 连接未触及的测试收益。

输出是模拟实时收益的时间序列。该序列可以评估回撤、换手、暴露漂移和容量,不只是平均 Sharpe。它也揭示常见尴尬:策略可能有良好平均测试分数因为一个窗口承担了整个结果。

Walk-forward 设计可以用扩展或滚动训练窗口。扩展窗口降低参数方差但可能保留陈旧 regime。滚动窗口适应但丢弃数据。选择应遵循提出的机制。慢会计信号可能证明扩展窗口合理;短期限市场微观结构信号可能需要滚动窗口。

验证循环和其状态一样诚实。特征标准化、缺失值归因、极值处理、整体定义和超参数选择必须在每个训练窗口内拟合。如果用全样本来计算百分位阈值,未来已进入过去。

交叉验证也会过拟合

交叉验证不是护身符。研究人员可以尝试多个分割方案、时间范围、评分函数和禁运长度,然后报告使模型看起来稳定的那个。花园回来了。

设 SkS_k 为方案 kk 下的估计交叉验证表现。如果研究人员选择 max⁡kSk\max_k S_k,已选分数有与参数搜索相同的最大噪声问题。每个 SkS_k 在保留观察上计算的事实不会使跨方案选择保留。

修复是分层验证。用内部训练过程选择参数,用外部测试过程评估完整选择程序。外部测试只看到内部循环的最终输出。在记号中,如果 A(Dtrain)A(D_{\mathrm{train}}) 是包括所有调优的算法,那么在 DtestD_{\mathrm{test}} 上评估 AA,不是几次外部测试检查后碰巧获胜的挑选模型。

这是金融版本的嵌套交叉验证。它花费数据和计算。该成本不是缺陷。它是不悄悄改变就问问题的代价。

因子研究中的假二分法

学术因子工作有时将样本内证据视为可疑,将样本外证据视为决定性。从业者有时将长样本内历史视为比短保留更有信息。两种观点各含半真。

无样本内经济或统计证据的因子无理由被样本外测试,除非它是纯理论驱动预测。只有样本内证据的因子未证明其估计大小存活于选择过程。弱但稳定样本外证据的因子可能在与其他弱信号组合时有用,特别是如果它改善分散化。

将证据视为链:

  • 理论缩小假设;
  • 样本内数据估计机制;
  • 交叉验证测试学习程序;
  • 最终保留测试冻结规格;
  • 实时纸交易测试数据、执行和运营假设。

破坏一环不会使其他环无价值。它使结论更窄。

Sharpe 比率需要不确定性而非仪式

设收益为 r1,…,rTr_1,\ldots,r_T 带样本均值 rˉ\bar{r} 和样本标准差 ss。年化 Sharpe 常报告为

SR^=Krˉs,\widehat{SR} = \sqrt{K}\frac{\bar{r}}{s},

其中 KK 是每年期数。年化不创建观察。带 120 个观察的月度序列在乘以 12\sqrt{12} 后仍是短序列。

自相关、偏度和肥尾改变采样分布。具有类期权收益的策略可以在单次崩溃到达前有奉承 Sharpe。具有重叠信号的策略可以有比收益向量所示更少的独立赌注。不确定度估计应反映收益过程,不只是将数字喂入正态公式。

这是 Deflated Sharpe Ratio 有用之处。Bailey 和 López de Prado (2014) 为试验数、非正态性和估计误差调整观察 Sharpe。想法是将报告分数与零假设下搜索产生的预期最大分数比较。Sharpe 1.5 对一个预先指定策略可能印象深刻,对 200 个试验中最好的可能普通。

小 walk-forward 框架

验证例程应使时代边界在代码中可见。以下玩具函数仅在早期数据上拟合后产生测试预测。它将模型选择留在函数外因为选择属于预先指定训练协议内部。

import numpy as np


def walk_forward(x, y, train_size, test_size):
    predictions = []
    actual = []
    start = train_size
    while start + test_size <= len(y):
        x_train = x[:start]
        y_train = y[:start]
        x_test = x[start:start + test_size]
        y_test = y[start:start + test_size]
        slope = np.dot(x_train, y_train) / np.dot(x_train, x_train)
        predictions.extend(slope * x_test)
        actual.extend(y_test)
        start += test_size
    return np.asarray(predictions), np.asarray(actual)

真实研究需要截距、滚动特征、点时整体、清除、禁运、成本和不能看测试集的模型对象。小例子有价值因为它显示规则:不允许测试预测影响产生它的拟合。

要报告什么

严肃报告显示分割逻辑,不只最终样本外 Sharpe。包括:

  • 确切日期边界;
  • 特征可用性和发表滞后;
  • 训练和重新拟合计划;
  • 内部选择过程;
  • 候选数和调优试验;
  • 外部保留结果;
  • 置信区间或自助分布;
  • 成本前后表现;
  • 回撤、换手、暴露和失败窗口。

也报告失败。四个窗口测试收益为正且一个深度为负的策略有不同风险概况不同于所有五个窗口温和正结果的策略。平均隐藏路径,路径是投资者拥有的。

量化可用的要点

用样本内数据学习。用样本外数据被反驳。用 walk-forward 验证测试整个学习和实施过程,不只最终公式。保护最终保留免于好奇。如果保留被重复检查,承认它变成开发数据并创建新保留。

假二分法吸引因为它提供简单道德:选一个数字并称之为真相。金融证据更不礼貌。样本内结果有偏但有信息。样本外结果更诚实但有噪声。答案是纪律序列让每个数据集只回答分配给它的问题。

1.8 样本内 Sharpe 和 0.3 保留 Sharpe 不告诉你策略是真实还是虚构。它们告诉你原大小未存活。那已经是有用结果。下一个问题是较小效应是否稳定、可交易且值得冒险找出。

两个数字的决策协议

当样本内和样本外表现不一致时,不要立即选较小数字并继续。诊断差距。

首先,检查数据完整性。确认时间戳、公司行为、退市、整体成员资格和确切特征管道。由点时错误引起的大差距不是关于因子的证据。

其次,检查选择。重建候选族并将已选策略与替代分布比较。如果赢家是孤立尖峰,将样本内估计视为严重有偏。如果宽高原类似表现,选择惩罚可能更小。

第三,检查 regime 暴露。如果可能,用结果前固定的分类按波动率、市场趋势、流动性、宏观环境分解收益。仅在一个声明 regime 失败的策略可能需要有条件假设。每个地方都失败的策略有更简单问题。

第四,检查实施。比较总收益和净收益、换手、延迟、借券和容量。样本内 1.8 Sharpe 在现实执行后变为 0.3 可能是有效总信号和无效交易。

第五,检查验证过程本身。如果保留被重复检查,记录看到它后做了多少决策。测试期然后属于开发历史,需要新未触及期。

有用报告表有列用于冻结规则、发现分数、交叉验证分数、最终保留分数、实时分数、成本假设和保留后变更数。这使衰减可见而非平均化消失。

最终结论可分级。“策略无证据”比数据可能支持的更强。“原大小不概括;较小效应仍可信但需要独立确认”常是诚实答案。当结论匹配赢得的信息时量化研究改进。

  • López de Prado, M. (2018). Advances in Financial Machine Learning. Wiley, 第 7、12 和 14 章.
  • Bailey, D. H. and López de Prado, M. (2014). “The Deflated Sharpe Ratio.” The Journal of Portfolio Management, 40(5), 94-107.
  • Aronson, D. (2006). Evidence-Based Technical Analysis. Wiley, 第 9-12 章.
  • Harvey, C. R., Liu, Y., and Zhu, H. (2016). “…and the Cross-Section of Expected Returns.” The Review of Financial Studies, 29(1), 5-68.
  • McLean, R. D. and Pontiff, J. (2016). “Does Academic Research Destroy Stock Return Predictability?” The Journal of Finance, 71(1), 5-32.