Python sklearn'有什么原因吗;s TimeSeriesSplit仅支持单步预测范围?

Python sklearn'有什么原因吗;s TimeSeriesSplit仅支持单步预测范围?,python,scikit-learn,time-series,forecasting,forecast,Python,Scikit Learn,Time Series,Forecasting,Forecast,Sklearn是实现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],

Sklearn是实现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没有提供这种开箱即用的功能,我想知道是否有原因,以及我是否忽略了任何原因,即为什么如上所示的多步骤预测范围意味着我的统计准确性评估方法应该改变?

有一个原因,但它不是一个“好”的方法一个。大多数已建立的预测方法针对一步超前误差训练模型,因为对于多步预测,它们将进行递归预测,而不是以任何方式进行直接预测(即,对于大多数预测方法,没有使用多时间序列分割)

我想这就是为什么sklearn的作者们没有费心的原因

如果要使用R而不是Python,则tsCV()函数将执行以下类型的时间序列拆分:

[1, 2,],      [4]
[1, 2, 3],    [5]
[1, 2, 3, 4], [6]
然而,tsCV本身并不返回时间序列分割,而是将时间序列+预测模型作为输入,并返回基于CV的误差矩阵


我不知道它是否完全按照你想要的方式来做

我使用同一个交叉验证器,在一次折叠中有超过1个样本。但在他们的例子中,他们只有5个样本和5个折叠,因此每折叠一个样本。相比之下,他们已经表明,每个褶皱都有多个样本

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

R tsCV()前面提到过,对于Python:请查看此tsCV库:


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

在示例中显示的训练集和测试集中保留值的逻辑是什么?与保留它相比,它有什么好处吗?那么对于递归实现来说,我在问题中指出的度量精度有什么意义吗?或者它是多余的?至于R或python,我将尽量使用python,因为我的项目的其余部分也使用python,这将使维护更容易,但如果我遇到困难,感谢您让我了解R的功能@埃塞尔:我原来的回答不正确。请看我的编辑。@Aesir你原来的想法没有错。只是它还没有在任何标准包中实现。如果你看一下S Btaieb的论文“时间序列预测的机器学习策略”,他使用了一些与你所做的类似的公式,但我没有这篇论文。您对@Mykhailo Lisovyi提出的独立性和有意义的比较有何看法?谢谢您的回复。您是否认为我用于评估模型的方法可能不是一个好主意?我使用了以下来源来决定它:参见“时间序列交叉验证”标题下的内容,对我来说,这似乎意味着我应该如何评估我的模型的准确性。如果你有其他的想法或理由,我为什么要考虑其他事情,我真的很想听到它。这里也是:在“滚动窗口分析预测性能”下。这些链接似乎是合理的,但是你在你的建议中做了额外的步骤,当你在验证折叠中制作超过1个样本。请注意,在链接中,它们的验证样本彼此之间仍然是独立的(因为它们仅包含一个样本)。这确保了他们提到的“通过对测试集进行平均来计算预测精度”的程序仍然有意义。也许,您想要的是n步先行验证方案,但请注意,在这种情况下,验证样本中仍然只有一个样本。sklearn中没有这种交叉验证程序。计算多步预测准确性的最佳方法是什么?我想测量我的模型在生成多步预测时的准确性。我认为,如果我实际上只是测量模型执行单步预测的准确性,那么说我的模型生成的多步预测平均精度为X%是不正确的?由于您的回答和评论,我在stats stackexchange上发布了一个问题,您可能感兴趣,并解释了我在更多方面不了解的内容详情: