sklearn中时间序列数据的交叉验证

Cross-validation with time series data in sklearn

我对一般时间序列数据的交叉验证有疑问。问题是宏观预测,例如使用不同的月度宏观变量预测 S&P500 未来 1 个月的价格。现在我读到了以下方法:一个 should/could 使用滚动交叉验证方法。 IE。始终删除旧的月度值并添加新的(=滚动),然后预测标准普尔 500 指数的下个月值。但是现在由于“数据泄漏”问题,训练数据和预测下个月的值之间应该总是有 1 个月的差距。我的问题是我不明白为什么应该在训练和验证之间始终使用 1 个差距。我没有看到这种方法中的数据泄漏问题?

感谢您的帮助!

Scikit learn 并未涵盖时间序列模型交叉验证的所有基础。此外,还有许多模型仅存在于 Statsmodels 套件中。

无论如何,您正在寻找滚动的 window 简历。 说明了其他一些可用的选项。

如果您想创建一个定制函数以通过滑动 window 进行向前验证,请查看 this tutorial。它可以适应作为滚动 window CV。

至于 data leakage,您需要留出与您预测的前 h 步数相等的差距。这可以通过向前验证来完成。

假设您要提前一个月预测一只股票的价格,并且训练集中有截至 2020 年 8 月 1 日的数据。 您对 2020 年 9 月 1 日的预测将不会使用已泄露的数据。预测出来之后,就可以把2020年8月2日加入到训练集中,继续往前走。如果不更新训练集,可能预测到9月底的数据和8月初的数据,中间有一个多月的差距。