问题:使用k-fold交叉验证在几个回归模型中选择最佳预测模型是否正确?
案例:数据来自时间序列(例如价格),但我只能访问其中的随机部分。而不是每年有 365 个数据,我只以随意的顺序观察其中的一些(例如 365 个中有 50 个)。因此,我基于每天可用的外部特征构建了几个预测模型(回归),避免了经典的时间序列方法(ARIMA 等)。
我读过由于自相关问题,CV 不适应时间序列;但是,我想知道这个问题是否会影响我的分析。
我应该进行什么样的测试?我应该注意哪些潜在问题?
问题:使用k-fold交叉验证在几个回归模型中选择最佳预测模型是否正确?
案例:数据来自时间序列(例如价格),但我只能访问其中的随机部分。而不是每年有 365 个数据,我只以随意的顺序观察其中的一些(例如 365 个中有 50 个)。因此,我基于每天可用的外部特征构建了几个预测模型(回归),避免了经典的时间序列方法(ARIMA 等)。
我读过由于自相关问题,CV 不适应时间序列;但是,我想知道这个问题是否会影响我的分析。
我应该进行什么样的测试?我应该注意哪些潜在问题?
交叉验证很棒!为此,您可以而且应该使用交叉验证。诀窍是为您的数据正确执行交叉验证,而 k-fold 太天真而无法处理自相关。
您已经正确地确定了顺序数据(如时间序列)将受到自相关的事实。换句话说,传统的独立同分布观察的监督学习假设在这种情况下不成立。
事实上,大多数交叉验证方案似乎都依赖于 iid 数据,因为训练-测试拆分没有考虑时间指数。例如,在 5 个时间段内天真地应用 5 折交叉验证会忽略时间的顺序性,混淆过去、现在和未来:
这是错误的,因为
Hyndman(他已经对您的问题发表了评论以发布 2 个很棒的 链接)有很多很好的例子,说明使用滚动或滑动窗口方法进行交叉验证以避免此问题。对于 5 个时间段,您将按如下方式拆分集合:
另一种方法是使用扩展窗口,尽管这可能不适合您的情况:
这两种方案都处理了我们之前发现的问题,编写起来应该不会太难。