【问题标题】:Is there a reason sklearn's TimeSeriesSplit only supports a single-step forecast horizon?sklearn 的 TimeSeriesSplit 仅支持单步预测范围是否有原因?
【发布时间】:2019-04-05 10:35:21
【问题描述】:

Sklearn 的TimeSeriesSplit 是实现与 kfold 交叉验证等效的时间序列的有用方法。然而,它似乎只支持单步视野,而没有多步视野,例如它来自[1, 2, 3, 4] 的数据集,可用于分别创建以下训练集和测试集

[1, 2],       [3]
[1, 2, 3],    [4]
[1, 2, 3, 4], [5].

无法产生的是具有多步预测范围的东西。多步时间序列分割预测范围看起来像

[1, 2,],      [3, 4]
[1, 2, 3],    [4, 5]
[1, 2, 3, 4], [5, 6],

例如。

我想知道这样做是否有充分的理由?我能够实现我自己的 TimeSeriesSplit 版本,这样这不是问题,但是我是预测领域的新手。据我了解,使用这样的程序在统计上是衡量模型准确性的最佳方法。我很奇怪 sklearn 没有提供开箱即用的功能,我想知道是否有原因,以及我是否忽略了任何原因,说明为什么有如上所示的多步预测范围意味着我的方法统计准确性评估应该改变吗?

【问题讨论】:

    标签: python scikit-learn time-series forecasting forecast


    【解决方案1】:

    这是有原因的,但这不是一个“好”的原因。大多数已建立的预测方法都在一步前误差上训练模型,因为对于多步预测,它们将进行递归预测而不是直接预测(即,对于大多数预测方法,多时间序列拆分没有用处) )。

    我怀疑这就是 sklearn-authors 不打扰的原因。

    如果你想使用 R 而不是 Python,tsCV() 函数执行类型的时间序列拆分,

    [1, 2,],      [4]
    [1, 2, 3],    [5]
    [1, 2, 3, 4], [6]
    

    但是,tsCV 不返回时间序列拆分本身,而是将时间序列 + 预测模型作为输入,并返回基于 CV 的误差矩阵。

    我不知道它是否完全按照您想要的方式进行。

    【讨论】:

    • 在您的示例中显示的训练和测试集中留下一个值的逻辑是什么?把它留在里面有什么好处吗?
    • 因此,对于递归实现,如我在问题中指出的那样,测量准确性是否有任何意义,还是多余的?至于 R 或 python,我会尽量使用 python,因为我的项目的其余部分也在 python 中,这将使维护更容易,但是如果我遇到困难,感谢你让我意识到 R 功能!
    • @Aesir 我的原始答案不正确。查看我的编辑。
    • @Aesir 你原来的想法没有错。只是它还没有在任何标准包中实现。如果您查看 S Btaieb 的论文“时间序列预测的机器学习策略”,他使用的一些公式与您正在做的类似
    • 很遗憾,我无法访问该论文。您对@Mykhailo Lisovyi 提出的独立性和有意义的比较有何看法?
    【解决方案2】:

    我使用了相同的交叉验证器,其中包含多个样本。但在他们的示例here 中,他们只有 5 个样本和 5 个折叠,因此每个折叠一个样本。相比之下,here 他们已经表明每个折叠有多个样本。

    您的提议不符合 sklearn 对交叉验证器的定义,因为折叠必须是独立的。从这个意义上说,要小心——如果你使用这种私下实现的方案——你在评估中的度量值将是相关的。

    【讨论】:

    • 感谢您的回复。您是否建议我用来评估模型的方法可能不是一个好主意?我使用以下来源来决定它:otexts.org/fpp2/accuracy.html 请参阅标题“时间序列交叉验证”下,对我来说,这似乎意味着我应该如何评估我的模型的准确性。如果您对我应该考虑其他事情有其他想法或理由,我真的很想听听。
    • 这里也有:uk.mathworks.com/help/econ/… 请参阅“预测性能的滚动窗口分析”。
    • 这些链接似乎是合理的,但是当您在验证折叠中制作超过 1 个样本时,您会在提案中多做一步。请注意,在链接中,它们的验证样本仍然相互独立(因为它们仅包含 1 个样本)。这确保了他们提到的过程“预测准确性是通过对测试集进行平均计算得出的。” 仍然有意义。也许,您采用了 n 步提前验证方案,但请注意,在这种情况下,验证样本中仍然只有一个样本。这样的交叉验证器在 sklearn 中不可用。
    • 计算多步预测准确性的最佳方法是什么?我想测量我的模型在生成多步预测时的准确性。如果我实际上只是测量它执行单步预测的准确性,我认为说我的模型产生平均准确率为 X% 的多步预测是不正确的?
    • 由于您的回答和 cmets,我在 stats stackexchange 上发布了一个您可能感兴趣的问题,并更详细地解释了我不了解的内容:stats.stackexchange.com/questions/374954/…
    【解决方案3】:

    R tsCV() 上面提到过,对于 Python:查看这个 TSCV 库: https://pypi.org/project/tscv/

    对我来说,它使用 GapWalkForward 选项解决了类似的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 2017-06-04
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      相关资源
      最近更新 更多