我正在研究基于 ANN 的金融时间序列预测模型。我正在使用 5 折交叉验证,平均性能是如此。最后折叠的性能(最后一段从训练中省略并用于验证的迭代)优于平均水平。
这是巧合/数据相关,还是最后一折的验证性能通常更好?(大概是因为使用所有前面的数据进行训练与时间序列中的后续数据更相关)
这感觉有点像一个奇怪的问题,但我还是希望得到一些回应。提前致谢 :)
我正在研究基于 ANN 的金融时间序列预测模型。我正在使用 5 折交叉验证,平均性能是如此。最后折叠的性能(最后一段从训练中省略并用于验证的迭代)优于平均水平。
这是巧合/数据相关,还是最后一折的验证性能通常更好?(大概是因为使用所有前面的数据进行训练与时间序列中的后续数据更相关)
这感觉有点像一个奇怪的问题,但我还是希望得到一些回应。提前致谢 :)
对于时间序列,您无法以正常方式通过交叉验证来测试预测模型,因为您随后会使用未来的观察结果来预测过去。您必须仅使用过去的观察来预测未来。LOO CV 的时间序列等价物是使用滚动预测原点。我在这篇博文中写过它。我不确定 k-fold CV 是否具有直接时间序列等价物。
在 Sci-Kit Learn Python Kit 中,他们有一个叫做“TimeSeriesSplit”的东西,它基本上看起来就像你从前向优化中获得的训练/测试样本集。Rob 是对的,你不能使用未来的数据点来训练过去的测试集......所以交叉验证的最佳方法是将你的训练集分成尽可能多的“折叠”,同时保持测试集“向前走” . 结果是每个连续的训练集都是之前的超集,每个测试集都有越来越多的最新数据,以保持领先于“前进”。
我实际上正在研究“财务预测建模的交叉验证”类型的问题。所以这里是我的一些发现。
基本上,对于金融时间序列预测建模,我认为交叉验证本身需要额外的重要考虑因素才能产生有效和有用的结果。
您的问题的简短答案分为两部分:
最后一折的表现好于平均水平,听起来像是辛普森悖论的一个例子
您得到的结果可能是由于回测过度拟合,和/或折叠 2 中的解释变量与折叠 1 中的目标变量之间的信息泄漏。特别是在 FTS 中,样本外泛化并不能保证分布泛化。
更多资源、重新设计的问题、金融时间序列中的已知影响。
我们通常执行 CV 是为了在新数据到达时增加我们对模型性能的信心。这种努力最终导致我们必须做出权衡(有意识和明确地这样做会很好),这将是偏差-方差权衡,当我们试图同时最小化这些偏差结果时会发生这种情况和结果的差异(两种不同的错误来源),这是阻止监督学习算法泛化(学习)超出训练数据的主要原因。从理论上讲,我们可以确定交叉验证确实有助于减少偏差,但我们(还)没有一种方法来证明存在一个估计量来正确表达方差的某些属性,因此它经常被低估,如前所述在这工作。所以,
在我目前的观点中,这项工作在使用 FTS 时确实提供了各种额外的和特殊的考虑。重要影响的快速列表将是:信息泄漏、回测过度拟合、内存丢失。引用的工作中提出的相应技术是:Purge&Embargo、Deflated performance metrics、分数微分。我确实提到了这些概念,因为它可能是您的方法中性能变化的真正原因,这是一个更“深刻”的原因,因为您正在使用 FTS,而不仅仅是交叉验证视角本身。
希望此评论对新访问者有所帮助,也许不是为了直接回答问题(只能接受 1 个答案),而是为了提供更多新的问题、来源和术语以供进一步探索。