sklearn 的 TimeSeriesSplit 仅支持单步预测范围是否有原因?
Is there a reason sklearn's TimeSeriesSplit only supports a single-step forecast horizon?
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 没有提供开箱即用的这个功能,并且想知道是否有原因以及我是否忽略了任何关于为什么具有如上所示的多步预测范围意味着我的方法的原因统计准确性评估应该改变吗?
这是有原因的,但不是 "good"。大多数已建立的预测方法都会在一步错误上训练模型,因为对于多步预测,它们将进行递归预测而不是直接预测(即,对于大多数预测方法,多时间序列分割没有用).
我怀疑这就是 sklearn 作者没有费心的原因。
如果您想使用 R 而不是 Python,tsCV() 函数执行类型的时间序列拆分,
[1, 2,], [4]
[1, 2, 3], [5]
[1, 2, 3, 4], [6]
但是,tsCV 不会return 时间序列自行拆分,而是将时间序列 + 预测模型作为输入,returns 基于 CV 的误差矩阵。
我不知道它是否完全按照您想要的方式进行。
我使用了同一个交叉验证器,一次折叠超过 1 个样本。但是在他们的示例中 here they have just 5 samples and 5 folds, thus one sample per fold. In contrast, here 他们已经表明每折有多个样本。
您的提议不符合交叉验证器的 sklearn 定义,因为折叠必须是独立的。从这个意义上说,要小心——如果你使用这种私下实施的方案——你在评估中的指标值将是相关的。
上面提到了 R tsCV(),对于 Python:检查这个 TSCV 库:
https://pypi.org/project/tscv/
对我来说,它解决了 GapWalkForward 选项的类似问题。
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 没有提供开箱即用的这个功能,并且想知道是否有原因以及我是否忽略了任何关于为什么具有如上所示的多步预测范围意味着我的方法的原因统计准确性评估应该改变吗?
这是有原因的,但不是 "good"。大多数已建立的预测方法都会在一步错误上训练模型,因为对于多步预测,它们将进行递归预测而不是直接预测(即,对于大多数预测方法,多时间序列分割没有用).
我怀疑这就是 sklearn 作者没有费心的原因。
如果您想使用 R 而不是 Python,tsCV() 函数执行类型的时间序列拆分,
[1, 2,], [4]
[1, 2, 3], [5]
[1, 2, 3, 4], [6]
但是,tsCV 不会return 时间序列自行拆分,而是将时间序列 + 预测模型作为输入,returns 基于 CV 的误差矩阵。
我不知道它是否完全按照您想要的方式进行。
我使用了同一个交叉验证器,一次折叠超过 1 个样本。但是在他们的示例中 here they have just 5 samples and 5 folds, thus one sample per fold. In contrast, here 他们已经表明每折有多个样本。
您的提议不符合交叉验证器的 sklearn 定义,因为折叠必须是独立的。从这个意义上说,要小心——如果你使用这种私下实施的方案——你在评估中的指标值将是相关的。
R tsCV(),对于 Python:检查这个 TSCV 库: https://pypi.org/project/tscv/
对我来说,它解决了 GapWalkForward 选项的类似问题。