2

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

4

3 回答 3

2

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

我怀疑这就是为什么 sklearn-authors 没有打扰的原因。

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

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

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

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

于 2018-11-01T16:08:11.263 回答
1

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

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

于 2018-11-01T19:25:11.177 回答
-1

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

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

于 2020-06-18T01:21:56.113 回答