使用时间和人员索引数据训练测试拆分

机器算法验证 时间序列 分类 交叉验证
2022-03-30 15:16:24

设置

考虑下表中的数据,由Subject和 Time索引。两个表都显示相同的数据集,一次按Subject排序,一次按排序(左对右)。交叉验证的训练测试拆分可以通过两种基本方式完成:tt

  1. 按主题拆分(左表中的红线)
  2. 分割(右表中的红线)t

训练测试拆分变体(按用户与按时间)

问题

随着时间的推移,数据集将获得额外的行(例如,对于新时间和新人)。我目前正在尝试训练一个模型来预测这些新行的目标(0 或 1)。实际上,数据集是 100000 行和 100 个特征t

为了评估模型,我想做交叉验证。主要问题是:在沿主题(选项 1)的拆分或按的拆分(选项 2,“时间序列交叉验证”)上进行交叉验证的优缺点是什么?哪一个更可取?我是否应该将两者结合起来,因为随着时间的推移我同时获得了新的Subjects和 newtt

3个回答

由于这是一个时间序列数据集,因此时间问题至关重要,这意味着您确实不能使用未来数据来预测过去的事件。因此,Subject的拆分在这里没有多大意义,因为您将使用未来的观察来训练您的模型,但会在过去的观察中对其进行测试(例如在 {1 3 4 5 6} 期间进行训练并在 {2} 期间进行测试) .

流程应遵循以下模式,将新数据引入训练集(蓝点)并用于预测未来的目标变量(红点)。

时间序列交叉验证

鉴于此,我将仅使用t的拆分,如右侧表格中所示。

这里有一个类似的线程,您可以在此处 阅读有关时间序列交叉验证的更多信息

如果你有足够的数据,我会去训练/验证/测试集。选择尽可能接近测试集的验证集,它应该尽可能接近在生产环境中测试模型的性能。在这种情况下,主要重点是预测新主题的目标(然后拆分 1 会更好)还是主要针对现有主题(拆分 2)?如果焦点是现有主题(拆分 2),您还可以添加带有历史信息的功能(例如,自上次目标以来经过的时间等)。对于新客户来说,这将更难做,因为他们的历史会更短。

注意:如果此问题是时间序列分析,则仅当您没有时间问题/您对所有特征进行去趋势时,才应使用交叉验证。如果你有时间问题,你应该使用训练/验证/测试集。

接受过机器学习培训的分析师,其主要目标是在处理海量数据时优化计算效率,通过将每个观察视为独立同分布来忽略数据中的任何固有方差和结构(有关此方面的最新声明,请参见Sirignano等人,Deep Learning for Mortgage风险https://arxiv.org/pdf/1607.02470.pdf)。在此示例中,使用iid规则进行抽样将包括从数据中随机抽取以按时间创建训练组和测试组。

统计学家会争辩说,ML 方法破坏了结构和方差,这些结构和方差只能通过在本例中对主题进行分区训练和测试来解释、保存和恢复。

Sirignano 等人明确比较了深度学习 NN 与基线逻辑回归的预测准确性,并得出结论,使用iid规则,逻辑回归与 NN 相比非常不准确。但这是一个公平的比较吗?有人可能会争辩说,基于iid抽样的比较会使 LR 的一只手被绑在背后。我不知道使用统计学家规则并进行反向比较的论文。换句话说,在保留数据的固有结构和方差的情况下,两种方法(LR 和 NN)的预测准确性如何比较?

这些问题带来了 NN 的最大限制之一:将多级分类字段转换为 0,1 个虚拟变量的要求。举一个极端的例子,美国住宅邮政编码是一个约 36,000 级的大规模分类特征。文献中提出了一些变通方法,可以实现统计、结构保持建模,从而有助于估计即使是这样一个大规模的分类特征如何解释相对重要性术语的差异。另一方面,神经网络需要将这个庞大的特征转换为大约 36,000 个虚拟变量,这不仅会产生大量无用的特征(不可避免地会减慢收敛速度),而且还会混淆结果摘要——谁在乎特定的邮政编码?

这是我失去参考的性能与数据量的理论图表:

在此处输入图像描述 有一些 CV 线程与相关讨论,例如:

参考表明只有深度学习算法才能从使用庞大的数据集中受益

用神经网络拟合多级分类变量