特征工程减少了我的交叉验证

数据挖掘 机器学习 数据集 特征工程
2022-03-14 03:45:20

我目前正在研究欺诈检测数据集。我正在使用 10-skfold roc auc 和默认参数 LightGBM 的估计器来评估我的训练数据。但是,问题是每次我尝试通过计算 2 列的比率来创建新列时,我的 CV 总是下降,即使理论上新列会突出欺诈与否之间的差异。

另一个问题是,当我在独立评估它们时通过特征工程发现 2 个好的(增加 CV)分离的新特征时,当我在同一评估中结合这两个特征时,我的 CV 实际上会降低。

我的特征工程方式有什么问题吗?现在我的步骤是: 1. 基于其他列创建一个新列 2. 使用 10-skfold 默认参数评估 CV 3. 如果 CV 增加(相对于原始数据),那么这是一个很好的功能,否则没有。

任何帮助表示赞赏。

2个回答

您可能正在处理过度拟合,因为您的模型不能很好地概括。需要注意的是,Light GBM 对小数据集的过拟合很敏感。

为了解决这个问题,您可以检查具有相关性的特征并删除其中一些。另一种解决方案可以是实施特征选择方法。最后,由于 GBM 是一种树算法,您可以尝试提前终止。

如果您正在处理高度不平衡的数据,您可以考虑使用分层方法而不是 CV。在 sklearn 中,有 StratifiedKFold 和 StratifiedShuffleSplit,它们确保在训练和验证阶段都大致保留了相对类频率。

我认为我有足够的经验对数据进行特征工程以训练 LightGBM 中的模型。在进行特征工程时,对您创建的特征以及它们应该如何影响您的模型进行逻辑推理是明智的,就像您所做的那样;您在逻辑上期望该比率会起作用。但是,结果可能与您现在所体验的不同。

1) 始终在处理后可视化您的数据;除以零可能会破坏您的模型,或者通过非常小的除数而不是零来创建有害的异常值。因此,比率作为特征可能是危险的替代想法可以围绕两个之间的差异,平方差,它们的总和,它们的平方和或它们的乘法而变化。

我还建议您通过绘制分布或使用类似pandas.Describe()的工具来可视化特征的统计属性。然后您将能够查看是否存在异常值。(比如90%的特征分布在10到170的范围内,有的高于10000左右)

2) 一个新功能可能会单独损害您的模型,但是当您的 ML 模型可以明确看到的几个新功能组合在一起时,可能会出现新模式。首先在您的脑海中创建特征,然后尝试它们的组合。

3) 在迭代过程中总是打印你的训练和测试 multi_error,verbose_eval = 10是一个可行的参数,你可以给 LightGBM 的 train() 函数;您将在训练时每 10 次迭代看到训练和测试错误。通过这样做,您将能够观察特征对性能的变化,甚至无需完成迭代,以及您的模型是否过拟合。

希望我能帮上忙。