【问题标题】:Cross-validation with time series data in sklearnsklearn中时间序列数据的交叉验证
【发布时间】:2021-08-27 17:45:21
【问题描述】:

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

感谢您的帮助!

【问题讨论】:

    标签: python validation machine-learning scikit-learn


    【解决方案1】:

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

    无论如何,您正在寻找滚动窗口简历的正确轨道。 This post 说明了一些其他可用选项。

    查看this tutorial,如果您想创建一个定制函数来使用滑动窗口进行前向验证。它可以适应滚动窗口CV。

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

    假设您要提前一个月预测一只股票的价格,并且您的训练集中有截至 2020 年 8 月 1 日的数据。 您对 2020 年 9 月 1 日的预测不会使用已泄露的数据。预测好之后,可以把2020年8月2日加入训练集,继续往前走。如果你不更新训练集,你最终可能会用 8 月初的信息预测 9 月底的数据,它们之间的差距超过一个月。

    【讨论】:

    • 非常感谢。这已经很有帮助了。只有一个澄清的事情:所以当我使用向前走的方法(比如我有每日数据)并且我预测提前一天(h = 1)时,我需要在训练和验证之间留出 1 天的间隔?当我有 h=2 时,我需要两天的间隔等等?谢谢!
    • 是的。如果您提前两天进行预测,则无法使用这些天训练您的模型。因此,您确实需要在训练集和验证集之间保持间隙。 IE。如果您的训练集在 8 月 10 日 (t) 结束,并且您希望提前两天进行预测 (t + 2),那么您将对 t+1 和 t+2 的预测与 t+1 和t+2,在这种情况下是 8 月 11 日和 12 日。您不太可能仅预测 t+2,但其准确性将由预测的 t+2 与实际 t+2 之间的差异给出
    • 感谢您的帮助!
    猜你喜欢
    • 2016-02-28
    • 2018-03-23
    • 2018-10-10
    • 2012-12-31
    • 2017-03-15
    • 2020-07-20
    • 2016-12-06
    • 2018-08-16
    • 2019-01-28
    相关资源
    最近更新 更多