Walk-forward 模型验证中的扩展窗口与滚动窗口
比较金融模型使用的扩展训练窗口与固定长度滚动训练窗口,将验证期与最终测试期分开,并在不使用未来结果的前提下选择窗口规则。
本指南内容Walk-forward 折中,训练窗口和评估窗口彼此独立
简短摘要
扩展训练窗口保留最早的合格历史数据,并在新数据可用时逐步加入。滚动窗口只保留固定数量的最新合格观测,并移除更早的行。两者都可用于按时间顺序进行 walk-forward 评估,但都不能替代模型选择期与最终测试期的隔离。
Walk-forward 折中,训练窗口和评估窗口彼此独立
在预测起点,研究者掌握部分历史特征与结果,用这些信息拟合或更新模型,再在更晚的数据块上评估。将起点向前移动,就会得到连续的样本外时段。训练窗口规则决定每次重新拟合时可以使用哪些合格的历史行;验证和测试规则则决定用哪些后续结果比较方案、估计表现。这些选择彼此相关,但不是同一个窗口。
扩展规则从固定的历史边界开始,新结果可用后窗口随之增长。滚动规则将窗口两端向前移动,但在预热期之后保持观测数量不变。无论采用哪种规则,都不能使用预测起点时尚未结束的目标值。如果标签覆盖多个交易时段,行日期可能不足以说明结果何时已知;应记录标签结束时间并据此筛选。
还要把特征的回看区间与模型训练窗口分开。某个信号可以用较短的近期区间计算每行波动率,而拟合模型使用数年的历史行。改变特征回看区间会改变输入变量;改变训练窗口会改变估计模型所用的观测。
扩展窗口保留最初的历史数据
设 \(s\) 为第一个合格观测的索引,\(t\) 为重新拟合时标签已完整的最新观测索引。扩展训练集为 \(\{s,s+1,\ldots,t\}\)。到下一个预测起点时,已有行继续保留,并加入新近合格的行。除非另有规则筛选或删除数据,训练样本会随时间增长。
如果旧数据仍能描述研究对象,更多观测可能降低参数估计的抽样噪声,也可能保留短期近期样本中没有出现的罕见市场状态,并避免任意选择历史截断点。但旧行不会仅仅因为时间久远就自动失去影响。若特征与收益之间的关系发生变化,早期数据可能把估计拉向与当前市场不同的状态。更大的训练集也可能使重新拟合变慢。保留历史并不自动意味着历史更具代表性。
滚动窗口会移除所选范围之外的观测
若固定窗口长度为 \(W\),则时点 \(t\) 的训练集为 \(\{t-W+1,\ldots,t\}\),同时要考虑标签延迟和边界间隔。到下一个起点时,末端向前移动,最早的合格行被移除。窗口长度可以按观测数或日历时间定义;对于不规则数据,这两种单位不能互换。
滚动窗口明确规定了数据的新近程度。当研究问题涉及适应变化条件,或实际运行需要限制训练样本大小时,这种规则可能有用。但它不会自动让模型适应变化。如果重新拟合不频繁,或变化缓慢,模型仍可能反应迟缓。短窗口信息较少,可能使估计不稳定、遗漏罕见压力期,或无法为复杂模型提供足够样本。长窗口保留更多样化的历史,但可能稀释近期模式。
衡量单位也会影响结果:由于缺失交易日或数据频率不同,相同行数可能覆盖不同的日历时长。对于面板数据,应明确窗口是按行删除,还是按日期删除一组资产数据。如果在查看最终测试结果后才选择 \(W\),测试期就参与了模型选择,不再是独立测试。
两种规则会给每次重新拟合提供不同历史
| 选择 | 每次拟合时的训练行 | 可能的优势 | 需要检查的代价 |
|---|---|---|---|
| 扩展 | 从固定起点到当前时点的所有合格行 | 观测更多,并保留较早的市场阶段 | 旧市场状态持续产生影响,拟合可能变慢 |
| 滚动 | 最近固定范围内的合格行 | 明确限制数据新近程度和样本规模 | 信息较少,结果对所选长度更敏感 |
要单独比较窗口规则,应固定信息截止时间、特征、模型类别、训练目标、重新拟合日期、预测期限、测试数据块和执行假设。如果滚动模型还采用更频繁的重新拟合或不同特征,就不能把分数差异只归因于窗口。
这些规则也不是选择预测起点的方法。两种训练窗口都可以用滚动起点评估:用合格历史数据训练,预测下一个数据块,向前移动后重复。Leonard Tashman 对样本外预测测试的综述00065-0)讨论了滚动起点和滚动估计窗口。前者规定何时评估,后者规定保留哪些训练行。
假设时间线展示每次拟合会使用哪些数据
以下数字和日期均为假设。假设模型每月重新拟合一次,预测下个月收益,首次拟合使用截至第120个月、结果已完成的60个合格观测。只有目标结果结束后,相应标签才可使用。如果滚动窗口长度为60,那么在第一个预测起点,两种规则使用相同的60行。
当一个新的月度结果已知后,扩展集有61个合格行;滚动集加入新行并删除最旧行,仍保持60行。更新12次后,扩展集从原起点累计有72行,而滚动集保留最近的60行。由于历史不同,两种模型的估计可能不同,尽管各自行都在拟合时已经可用。
在此假设中,将最后24个月保留为外层测试期。窗口规则和长度、特征以及其他设置都应通过较早的时间顺序验证期来选择,然后按预先设定的重新拟合计划评估固定后的选择。看过外层测试结果后再改长度,就是用测试数据来选择模型,会夸大最终测试期所能提供的证据。
在按时间顺序进行的验证中选择窗口规则
比较之前先写清问题:模型是否应该在每次拟合时使用全部可用历史?是否有研究理由将旧样本移出训练集?目标关系是否预期稳定,还是相关输入可能改变?这些问题有助于确定候选方案,但无法预先证明某个规则在特定市场一定更好。
使用更早的开发数据比较少量预先设定的方案,例如扩展窗口和若干合理长度的滚动窗口。对所有方案使用相同的时间顺序验证块和重新拟合频率。先确定评估目标再计分:预测损失、校准度、考虑换手率后的投资组合效用和最大回撤回答的是不同问题。保持成本与限制条件不变,并记录拟合失败和缺失预测。如果目标区间或测试块有重叠,相邻分数可能共享收益;应说明这种依赖,不要把每一行都当成独立实验。
将之后的时间段留作最终检查,期间不参与选择。在嵌套设计中,内层验证只能使用每个外层测试块之前的数据来选择窗口及其他设置;外层结果则评估完整的选择流程。[Purged 交叉验证指南](/zh-CN/learn/purged-cross-validation-embargo-time-series-finance-explained)解释标签重叠边界;[金融模型过拟合](/zh-CN/learn/bias-variance-tradeoff-financial-model-overfitting-explained)和[多重检验](/zh-CN/learn/multiple-testing-false-discovery-rate-finance-explained)介绍相关选择风险。
按当时可用的信息处理标签、预处理和重新拟合时间
每个预测起点只使用当时已知的特征和标签。即使决策日期更早,跨多个交易时段的远期收益在验证边界附近也可能尚未结束。必要时应按实际标签区间留出间隔或清除对应行;只有在观测间隔与目标期限能够支持时,固定行数才是合适的近似。任何窗口规则都无法修复包含未来信息的特征。
缺失值填补、缩放、特征选择和其他学习型预处理,只能在每个折的训练部分拟合。如果需要选择阈值或超参数,应在训练期内进行按时间顺序的验证,并在评估后续数据块时固定选择。scikit-learn 官方TimeSeriesSplit 文档说明,训练集默认逐步扩展,也可用 max_train_size 限制训练集大小。gap 的单位是样本数;折的持续时间可比需要观测间隔相等。还应核对带时间戳的金融标签,以及研究所用库版本的实际行为。
按预测起点报告表现并说明评估边界
报告窗口规则和准确长度、最早保留日期、每次拟合的合格行数、标签可用时间规则、验证期与最终测试期日期、预测期限以及重新拟合计划。除汇总数据外,还要展示各测试块的结果。平均值可能掩盖某个市场阶段对比较的主导作用;相邻预测可能共享结果,因此不是相互独立的证据。
预测准确率不等于策略净收益。头寸构建、杠杆、换手、流动性、费用、价差、市场冲击、借券、资金费率和执行时机都会影响实际结果。比较窗口时保持这些假设一致,并说明哪些项目未纳入。Cerqueira、Torgo 和 Mozetič 关于时间序列性能估计的研究报告,平稳与非平稳条件下的估计可能不同。这项研究没有直接比较金融窗口政策,也没有证明哪种规则总是获胜。
将每次回测视为关于特定历史和流程的证据。扩展窗口可能保留已经过时的市场状态;滚动窗口可能丢弃有用信息,使估计更嘈杂。选定的规则可能在其他市场状态、资产范围或成本环境中失效。验证能减少对已测试流程的不确定性,但无法承诺未来收益,也不能证明任何窗口最优。
常见问题
Q1扩展窗口使用更多数据,所以总是更好吗?
不是。如果旧观测仍然相关,更多行可能稳定估计;但过时的市场状态也可能继续影响模型。结果取决于数据、目标、特征、估计器和评估期。
Q2滚动窗口会自动适应市场状态变化吗?
不会。旧行超出所选范围后会被移除,但窗口不会检测状态变化,也不保证新样本能代表下一个状态。重新拟合频率、窗口长度和模型设计仍然重要。
Q3可以用同一时期调节窗口并报告最终表现吗?
这样一来,该时期就参与了模型选择。应通过时间顺序验证选择规则,再用之后未触碰的测试期评估固定后的流程。该结果也只说明已测试的历史与假设。
资料来源与延伸阅读
报告问题
我们会准备一封包含本文链接的邮件。发送后,Mark 才会收到你的反馈
快速检查
读完指南后,用 3 道题检查一下
问题 01
固定长度的滚动训练窗口在下一次拟合时会发生什么变化?
选择答案即可查看解释