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没有开箱即用地提供这一功能,我想知道是否有原因,以及我是否忽略了任何原因,即为什么如上所示的多步骤预测范围意味着我的统计准确性评估方法应该改变?
这是有原因的,但不是一个"好"的原因。大多数已建立的预测方法都会根据一步预测误差训练模型,因为对于多步预测,它们将进行递归预测,而不是以任何方式进行直接预测(即,对于大多数预测方法,没有使用多时间序列分割(。
我怀疑这就是为什么sklearn的作者们没有费心的原因。
如果您想使用R而不是Python,tsCV((函数将执行类型的时间序列拆分
[1, 2,], [4]
[1, 2, 3], [5]
[1, 2, 3, 4], [6]
然而,tsCV不会返回时间序列拆分本身,而是以时间序列+预测模型作为输入,并返回基于CV的误差矩阵。
我不知道它是否按照你想要的方式来做。
我使用了相同的交叉验证器,一个折叠中有一个以上的样本。但在他们的例子中,他们只有5个样本和5个折叠,因此每个折叠一个样本。相反,在这里,他们已经表明每个折叠有多个样本。
您的提议不符合sklearn对交叉验证器的定义,因为folds必须是独立的。从这个意义上说,要小心——如果你使用这种私人实施的方案——你在评估中的度量值将是相关的。
R tsCV((已在上面提到,对于Python:请查看此tsCV库:https://pypi.org/project/tscv/
对我来说,它解决了GapWalkForward选项的类似问题。