与时间序列的交叉验证

机器算法验证 回归 时间序列 预测 交叉验证
2022-03-25 03:48:42

问题:使用k-fold交叉验证在几个回归模型中选择最佳预测模型是否正确?

案例:数据来自时间序列(例如价格),但我只能访问其中的随机部分。而不是每年有 365 个数据,我只以随意的顺序观察其中的一些(例如 365 个中有 50 个)。因此,我基于每天可用的外部特征构建了几个预测模型(回归),避免了经典的时间序列方法(ARIMA 等)。

读过由于自相关问题,CV 不适应时间序列;但是,我想知道这个问题是否会影响我的分析。

我应该进行什么样的测试?我应该注意哪些潜在问题?

1个回答

交叉验证很棒!为此,您可以而且应该使用交叉验证。诀窍是为您的数据正确执行交叉验证,而 k-fold 太天真而无法处理自相关。

您已经正确地确定了顺序数据(如时间序列)将受到自相关的事实。换句话说,传统的独立同分布观察的监督学习假设在这种情况下不成立。

事实上,大多数交叉验证方案似乎都依赖于 iid 数据,因为训练-测试拆分没有考虑时间指数。例如,在 5 个时间段内天真地应用 5 折交叉验证会忽略时间的顺序性,混淆过去、现在和未来:

在此处输入图像描述

这是错误的,因为

  • 您的自回归模型需要一个连续的数据块,因为它们依赖于预定义滞后的自相关的存在(而不是将训练集分成两部分)。事实上,这大致就是像 ARIMA 这样的模型的目的——以许多其他模型没有的方式捕获自相关。
  • 无论如何,您都不应该在未来数据上训练模型,以避免前瞻偏差

Hyndman(他已经对您的问题发表了评论以发布 2 个很棒的 链接)有很多很好的例子,说明使用滚动滑动窗口方法进行交叉验证以避免此问题。对于 5 个时间段,您将按如下方式拆分集合:

在此处输入图像描述

另一种方法是使用扩展窗口,尽管这可能不适合您的情况:

在此处输入图像描述

这两种方案都处理了我们之前发现的问题,编写起来应该不会太难。