使用时间序列行为建模数据的交叉验证拆分

数据挖掘 机器学习 时间序列 交叉验证 超参数调整 假设检验
2022-02-25 23:35:42

背景:我有一个每月生成的数据集(它与包含每月卡片人口统计和交易的卡片数据类似,并且可以在数据系列中间添加新帐户)。根据这些历史数据,我需要建立一个分类模型来预测下个月的二进制标签。

问题:哪种更好的交叉验证拆分类型可用于获得公平的模型分数评估(没有偏差和低方差)?为了清楚起见,我们需要 15 个月的训练数据,并且需要使用 5 倍交叉验证拆分对模型进行超调。我在下面有两个选项,但如果你有其他选项也没关系。

1.留一式的时间序列

  • 折叠 1:训练 [1 2 3 4 5 6 7 8 9 10],测试 [11]
  • 折叠 2:训练 [1 2 3 4 5 6 7 8 9 10 11],测试 [12]
  • 折叠 3:训练 [1 2 3 4 5 6 7 8 9 10 11 12],测试 [13]
  • 折叠 4:训练 [1 2 3 4 5 6 7 8 9 10 11 12 13],测试 [14]
  • 折叠 5:训练 [1 2 3 4 5 6 7 8 9 10 11 12 13 14],测试 [15]

2. 带休止符类型的时间序列

  • 折叠 1:训练 [1 2 3 4 5 6 7 8 9 10],测试 [11 12 13 14 15]
  • 折叠 2:训练 [1 2 3 4 5 6 7 8 9 10 11],测试 [12 13 14 15]
  • 折叠 3:训练 [1 2 3 4 5 6 7 8 9 10 11 12],测试 [13 14 15]
  • 折叠 4:训练 [1 2 3 4 5 6 7 8 9 10 11 12 13],测试 [14 15]
  • 折叠 5:训练 [1 2 3 4 5 6 7 8 9 10 11 12 13 14],测试 [15]

感谢您的回答,将非常感谢任何回应。

1个回答

由于您想基于时间排序的表格数据构建二进制分类器,因此我看到了两种可能的方法:

  1. 正如您所建议的,将您的数据集拆分为有序的 train-test folds,这样您就可以重现“真实”情况,即在每个时间间隔都有一个历史数据集进行训练和一个测试(以及以后的评估)集;您可以使用scikit-learn TimeSeriesSplit来获得这种类型的拆分,这与您建议的类似,但始终具有相同的测试集数据量:

在此处输入图像描述

  1. 将您的数据集重新构建为一个常见的分类问题,其中每个样本行都有一些聚合信息(假设是客户端),例如客户端属性的平均值、最小值、最大值......以及二进制标签;使用此框架,应用 k 折(10 折是一种常见的选项)交叉验证策略,您也可以查看此答案

顺便说一句,您的模型应该达到良好的偏差-方差权衡,而不是完美的“无偏差”模型。