XGBoost:Kfold 不够用怎么办?

数据挖掘 时间序列 xgboost 交叉验证 训练 概括
2022-02-27 17:39:18

我有一个由大约 100 个时间序列组成的数据集,我的最终目标是获得每个点的分类(检测问题)。为此,我有标签,因此我决定使用 XGB 模型对我创建的某些特征进行检测。时间序列不是均匀采样的,到目前为止,时间顺序对于这个特定问题看起来并不那么重要。

问题是,当我执行 StratifiedKFold(根据 Sklearn)时,结果看起来很有希望,并且 kfold 中相关指标的标准偏差非常小。然而,如果我完全从训练集中删除一个时间序列并将模型拟合到其他模型上,我将无法复制相同的结果。

尽管在 Kfold 验证期间取得了良好的结果,但 Kfold 性能和“真实测试”之间的差距在我看来,训练并没有真正概括问题。

你有什么想法来解决这个问题吗?或任何建议?

1个回答

对时间序列数据使用正常的 KFold 交叉验证将产生高度乐观的误差估计,因为您使用来自未来的数据来预测过去。该模型只需要学习插值,而不是预测。因此,您必须使用时间方面的 CV:在此处输入图像描述

此外,如果您的目标是预测您不知道过去的时间序列的未来,则必须使用 leave-one-group-out、time-wise-CV 来获得现实的性能估计:Train on all时间序列,除了时间序列的测试集,但只使用到某个时间点的数据。验证测试时间序列,但仅使用时间点之后的数据。

我怀疑你会用这种方法取得成功,因为这通常是一个非常困难的问题。

为了选择正确的交叉验证方法,您必须清楚方法的目标。

  1. 你想为几个时间序列插入缺失的数据吗?使用 K 折简历

  2. 你想预测一些你知道过去的时间序列的未来吗?使用时间方面的简历

  3. 你想预测一些时间序列的未来,但你只知道其他一些时间序列的过去吗?使用 Leave-one-Group-out,按时的 CV

我假设您在第二点之后,因为这是最常见的问题。