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并未提供现成的功能,并且想知道是否有原因以及是否忽略了为什么具有如上所示的多步预测范围意味着我的方法统计准确性评估的方式应该改变吗?
答案 0 :(得分:2)
有一个原因,但这不是一个“好”的理由。大多数已建立的预测方法都会针对一个先行误差训练模型,因为对于多步预测,它们将进行递归预测,而不是以任何方式进行直接预测(即,对于大多数预测方法,多时间序列拆分没有用处) )。
我怀疑这就是为什么sklearn编写者没有打扰的原因。
如果要使用R而不是Python,则tsCV()函数将执行以下类型的时间序列分割
a1['off0'] = a1.groupby('del_month')['off0_on1'].transform(lambda x: map(lambda value: 1 if value == 0 else 0, x))
但是,tsCV不会返回时间序列拆分本身,而是将时间序列+预测模型作为输入,并返回基于CV的误差矩阵。
我不知道它是否确实按照您想要的方式进行。
答案 1 :(得分:1)
我使用同一个交叉验证器对一个以上的样本进行了多次折叠。但是在他们的示例here中,他们只有5个样本和5折,因此每折一个样本。相比之下,here他们已经显示出每折叠有多个样本。
您的建议与交叉验证器的sklearn定义不符,因为折叠必须独立。从这个意义上讲,请小心-如果您使用私有实施的这种方案-评估中的指标值将相关。
答案 2 :(得分:-1)
R tsCV(),对于Python:请查看以下TSCV库: https://pypi.org/project/tscv/
对我来说,它使用GapWalkForward选项解决了类似的问题。