在训练/测试拆分之前或之后对信用卡欺诈检测进行欠采样

数据挖掘 分类 阶级失衡 采样
2022-02-17 22:44:52

我有一个信用卡数据集,其中 98% 的交易是非欺诈交易,2% 是欺诈交易。

我一直在尝试在训练和测试拆分之前对多数类进行欠采样,并在测试集上获得非常好的召回率和精度。

当我仅对训练集进行欠采样并在独立集上进行测试时,我得到的精度非常差,但召回率相同!

我的问题是:

  1. 我是否应该在拆分为 train 和 test 之前进行欠采样,这是否会影响数据集的分布并且不能代表现实世界?

  2. 还是上述逻辑仅在过采样时适用?

2个回答

回答您的问题,重要的是要记住这种转换,在这种情况下,通过过采样通过欠采样改变少数类分布必须仅在训练数据集中完成,因此您不要更改当你想应用你的模型时的真实情况(在训练时,它是你的测试和保持集)。

关于处理类不平衡,除了重采样方法外,您还可以将平衡权重应用于学习算法本身,通过一些带有scikit-learn 的分类器的class_weight参数(例如在这个)或通过带有 XGBoost 的scale_pos_weight 阅读这个

在训练/测试拆分之后并且仅在训练拆分中进行欠采样:您希望以某种方式“加权”您的学习算法,以防止它偏向多数类,实际上,可以应用其他技术,并且始终开启火车分裂,最终是学习算法的数据。但是......您的测试集应该代表真实的数据分布。在这种情况下,您将评估您为防止偏向多数类的算法而应用的任何技术是否最终没有影响其性能。

解决此问题的其他一些方法(欺诈与非欺诈):