样本内调优 vs 样本外:过拟合模式
常见量化错误:尝试许多参数组合,报告冠军,并将其样本内 Sharpe 称为期望。本文推导选择膨胀并展示诚实工作流。
冠军不是平均值
问策略如何开发你常会听到听起来无害的句子:“我们测试了许多变体并选择了最有效的一个。”该句子以微缩方式包含整个过拟合问题。
已选策略不是来自搜索的典型策略。它是赢家。其回测收益包含真实效应、采样噪声和正选择项,因为研究人员因它看起来好而选择它。不报告搜索报告赢家就像给百名跑者计时并宣布平均跑者以冠军时间完成。
模式出现在学术因子工作、自由裁量研究、机器学习管道和私人投资公司。它不需要复杂神经网络。五个回看期和电子表格足够。
可信动量搜索
假设研究人员在 30 年期间研究月度股票动量信号。设计选择是:
- 回看期:1、3、6、9 或 12 个月;
- 持有期:1、3、6 或 12 个月;
- 跳过月:零或一;
- 组合排序:五分位或十分位;
- 权重:等权或价值加权;
- 异常值规则:无极值处理、1% 或 5%;
- 整体:所有公司或超过规模下限的公司。
名义网格包含
个候选规格。研究人员可能不运行每个组合,但数字告诉我们“几个选择”多快变成选择问题。
如果每个候选的真实 Sharpe 为零且每个估计 Sharpe 的标准误为 ,粗略预期最大值约为
报告 Sharpe 约 0.55 因此可以从此大小的零搜索出现。近似假设独立正态分布估计,不是校准 p 值。它是关于规模的警告。
实际规格相关,这降低独立试验的有效数。顺序研究可以将有效搜索增加超出可见网格。确切答案难。选择项的存在不是。
推导选择项
设规格 的估计表现是
其中 是真实表现, 是标准差 的估计噪声。如果所有真实表现等于 ,那么已选赢家是
对独立高斯噪声, 个标准化误差的预期最大值约增长为 。因此
公式有用因为它显示两个杠杆。更多试验增加偏差,但仅对数。更噪声估计线性增加偏差。短样本、高波动率、重叠收益和罕见事件策略都增加标准误。在噪声数据上的大搜索不被最大值缓慢增长所拯救。
已选赢家也遭受赢家诅咒。条件于是最大观察,其噪声可能为正。当策略在新数据上评估时,正噪声不会延续。预期样本外表现更接近平均真实表现而非已选估计。
迭代是隐藏乘号
研究人员很少进行一个干净网格然后停止。他们迭代:
- 测试广义动量族。
- 注意小股票表现更好。
- 限制整体到小股票。
- 因为组合看起来更强加价值过滤器。
- 改变持有期减少换手。
- 删除压倒结果的危机窗口。
最终策略可以只有三个参数,但它通过以前实验历史选择。只计算最终参数网格隐藏搜索。如果四个阶段各探索约 100 候选,心算试验计数可接近 ,尽管相关使那作为粗上限而非独立检验的字面数。
重要信息不是完美计数。它是选择规则。如果研究人员在看到表现后改变模型,后续数据必须视为开发数据。需要新保留用于确认。
为什么调优改进错误的东西
当参数对应稳定经济机制时调优有用。信号回看期可以反映期望信息半衰期。换手上限可以反映容量。波动率目标可以反映风险偏好。当目标只是最高历史 Sharpe 时调优变得危险。
Sharpe 比率是噪声比统计量:
参数可以通过选择幸运期增加分子或通过避免特定冲击降低分母。结果 Sharpe 可以改进而不改进期望收益过程。如果策略收益偏斜,分母可以看起来特别吸引直到单次尾部事件到达。
目标函数也编码研究人员愿意忽略什么。最大化 Sharpe 可能选择高换手。最大化收益可能接受破产风险。最小化回撤可能在市场有趣时创造持有现金的策略。任何调优标准应预先指定并配以反映实际部署的约束。
偶然发现显著性的概率
假设每个候选在零假设下产生标准化统计量 。如果我们选择最大单边统计量,那么对临界值 ,
对 和 ,机会实质上是一。即使 在此搜索大小也不安全。确切概率在候选相关时更低,但相关搜索仍创建比单正态抽取更宽的最大值分布。
这就是为什么如果研究人员尝试了千种设置,“最佳参数有 t 统计量高于 3”不够。阈值必须反映试验历史,最终检验必须在未被选择过程触及的数据上运行。
White 的 Reality Check 和 Hansen 的 SPA 检验通过跨候选集自助最大表现解决此逻辑。当试验数和收益分布可估计时 Deflated Sharpe Ratio 提供紧凑修正(White 2000;Hansen 2005;Bailey and López de Prado 2014)。这些工具都不能完美重建被遗忘搜索。它们仍比假装赢家被预先注定好。
参数稳定性是证据非装饰
真实机制很少在恰好一个参数值工作。如果动量信号真实,邻近回看期通常应产生相关,即使更弱,结果。如果均值回归规则只在 17 天工作且 16 和 18 天失败,锐度可能是噪声或隐藏数据怪癖的迹象。
定义参数网格上的表现为 。稳定区域有宽高原;过拟合结果常有尖峰。高原不证明策略真实。它降低单个任意选择承担结果的机会。
沿经济有意义轴测试稳定性:
- 邻近回看期和持有期;
- 合理整体和流动性过滤器;
- 成本假设;
- 子时期和市场 regime;
- 独立市场或资产类别;
- 对信号时序的小扰动。
也不要挑选稳定性图。声明扰动范围在查看结果前,或将练习标记为探索性。
调优的嵌套验证
对时间序列策略,参数选择属于训练循环内。外部测试集应只看到整个调优过程的输出。
诚实 walk-forward 设计看起来这样:
- 选择训练窗口和外部测试窗口。
- 仅用训练窗口比较候选参数。
- 根据预先指定目标选择参数。
- 在训练数据上拟合已选规则。
- 记录外部测试窗口上的表现。
- 推进时钟并重复。
外部测试收益在选择参数时不可用。如果研究人员在看到外部结果后选择不同 walk-forward 窗口,过程已消耗外部数据。
对横截面信号,在每个日期的信息集内执行排名、缩放、特征选择和归因。完整样本 z 分数可以泄露未来分布信息即使目标标签对齐正确。
收缩估计而非崇拜它
选择偏差建议实际反应:将已选估计向保守先验收缩。如果观察表现是 且选择调整先验均值是 ,简单收缩估计器是
其中 依赖于估计不确定性和先验强度。高噪声估计得到更小 。这不是独立验证替代,但它防止回测赢家被视为带虚假精度的点预测。
实际中,收缩期望收益,不只风险估计。因试验数折扣 Sharpe,因成本和容量降低总收益,并为 regime 和模型风险扩大不确定度区间。如果策略在那些减值后仍吸引,它存活了有用挑战。
可重现参数搜索
搜索应记录每个候选并保持最终保留在选择函数外。这里是一个返回最佳训练参数但永不在搜索期间评估测试序列的小例子。
import numpy as np
def select_parameter(train_returns, parameters):
scores = train_returns.mean(axis=0) / train_returns.std(axis=0)
winner = int(np.argmax(scores))
return parameters[winner], scores[winner]
train = np.array([[0.01, 0.00], [0.00, 0.01], [0.02, -0.01]])
parameter, score = select_parameter(train, [5, 20])
print(parameter, score)
生产实现应包括年化、成本、换手、缺失值和真实模型对象。代码故意小因为纪律是点:测试数据不是选择器的参数。
诚实报告包含什么
调优报告应告诉读者:
- 初始假设和为什么选择参数族;
- 完整候选集或试验的可辩护计数;
- 选择指标和约束;
- 跨候选的表现分布;
- 已选参数及其邻居;
- 训练、验证、外部测试和实时结果;
- 成本和容量模型;
- 检查保留的次数;
- 看到测试表现后做的任何模型变更。
如果最终模型由委员会选择,包括委员会过程。人类判断仍是搜索算法,只是具有更差日志记录。看过 50 张图表并选一个的研究人员不应将选择报告为“专家直觉”而不解释搜索。
实时测试附账单到达
样本外验证不在历史文件结束时结束。纸交易期可以暴露数据延迟、过时标识符、订单约束、借券失败和操作错误。如果团队在观察窗口期间改变策略它非完全独立,但它比清理回测更接近部署。
实时结果应针对冻结规则和预测不确定度评估。不要在每个小调整后重置评估时钟。如果规则改变,创建新版本并保留旧记录。否则策略可以永远“样本外”,因为每次失败创建新模型。
要点
调优不是敌人。未记录调优是。因编码合理持有期而选择的参数可以有价值。因产生最漂亮权益曲线而选择的参数是伪装成精度的负债。
最佳回测不是大型私人锦标赛的冠军。它是存活声明搜索、受保护时间序列验证、现实成本和无人被允许改进它的时期的透明候选。
当研究人员说,“我们尝试了 50 个组合最佳 Sharpe 是 1.8”,下一个问题不是“我能投资?”。它是“其他 49 个做了什么,什么数据用于决定?”
当赢家较弱时做什么
弱样本外结果不总是意味着整个研究想法失败。它可能意味着已选参数太激进、信号 horizon 改变,或总效应真实但成本后太小。错误是让弱结果触发另一无约束搜索。
冻结原规则并在改变前写诊断。分离数据错误、实施错误、regime 依赖和普通采样噪声。如果诊断提示新机制,用新开发样本创建新模型版本。不要将修订拼接到原历史表现。
有用比较是邻里而非只是冠军。设 是参数 的表现。报告已选值、声明邻里的中位数、最差邻居和相同邻里在未经选择测试下的样本外结果。邻近值广泛下降提示机制弱化。单个坏已选值提示原选择脆弱。
基于不确定度收缩预测。如果样本内估计是 且选择调整期望是 ,按后者调整策略大小直到独立证据改善。如果实时样本太短不能区分 和零,保持头寸小。精度不是通过重复相同回测创造。
最纪律响应可能是退休。每个回撤后需要新参数的策略不是适应;它在向数据请求继续许可。保持记录,如果可能学习机制,然后继续。研究能力稀缺,死的策略在被允许保持死时仍可教有用教训。
参数搜索作为投资决策
试验数应影响不仅报告统计量还有资本计划。从广义搜索选择的策略比从窄机制指定的策略有更多模型风险。保持初始分配小直到实时样本降低不确定度。仅在冻结规则、成本模型和执行记录支持增加时增加资本。
分离研究不确定度和市场风险。策略可以有正期望收益但仍不安全,因为估计不精确。相反,低波动率策略如果其收益依赖于未在样本中出现的罕见事件可以高度不确定。头寸限制应反映收益分布和估计置信度两者。
有用治理规则是每个模型变更重置验证时钟。改变回看期、整体、特征或成本假设创建新版本。旧版本保留在记录中,新版本接收新开发和确认数据。这比持续调优一个实时策略慢,但它使表现归因成为可能。
目标不是找到赢历史锦标赛的参数。它是找到规则,其行为可理解足够使未来失望可以在不立即搜索替代下被诊断。无聊参数高原、保守预测和干净版本历史胜过没有存活兄弟姐妹的完美回测。
参考文献
- White, H. (2000). “A Reality Check for Data Snooping.” Econometrica, 68(5), 1097-1126.
- Hansen, P. R. (2005). “A Test for Superior Predictive Ability.” Journal of Business & Economic Statistics, 23(4), 365-380.
- Bailey, D. H. and López de Prado, M. (2014). “The Deflated Sharpe Ratio.” The Journal of Portfolio Management, 40(5), 94-107.
- López de Prado, M. (2018). Advances in Financial Machine Learning. Wiley, 第 7、11、12 和 14 章.
- Aronson, D. (2006). Evidence-Based Technical Analysis. Wiley, 第 9-12 章.