训练/测试分割之前或之后的欠采样

Var*_*ted 2 classification machine-learning resampling imbalanced-data

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

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

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

我的问题是:

我是否应该在分成 train 和 test 之前进行欠采样,这会扰乱数据集的分布并且不能代表现实世界吗?

或者上述逻辑仅在过采样时适用?

谢谢

San*_*ula 8

如果您有机会收集更多数据,那可能是最好的解决方案。 (假设您已经尝试过此步骤)

如果精确率很差而召回率很好,这表明您的模型擅长将欺诈类别预测为欺诈,但该模型对于非欺诈类别感到困惑,大多数时候它会将非欺诈类别预测为欺诈(如果您将多数类别1设置为0 )对于少数群体)。这意味着您必须尝试降低多数类别的欠采样率。

通常,欠采样/过采样仅在列车分割上进行,这是正确的方法。然而,

  1. 在欠采样之前,请确保您的列车分割的类别分布与主数据集相同。(分割时使用分层)

  2. 如果您使用python sklearn库来训练分类器,请设置参数class_weight='balanced'

例如:

   from sklearn.linear_model import LogisticRegression
   Lr = LogisticRegression(class_weight='balanced')
Run Code Online (Sandbox Code Playgroud)
  1. 尝试使用不同超参数的不同算法,如果模型欠拟合,则考虑选择 XGboost。

如果在分割之前进行欠采样,则测试分割分布可能无法复制真实数据的分布。因此,人们通常避免在分裂之前进行采样。

  • 请参阅,在**类似**的现实案例中,如果单个**欺诈**交易被错误分类为**非欺诈**,那么它可能会对业务产生非常严重的影响(即使对于单个**FN**)。如果**非欺诈**交易被预测为**欺诈**(**FP**),它不会(或很少)影响业务收入,因为后来通过进一步的业务检查,我们了解到这是被错误归类为**欺诈**。但该模型不应给逃避真实**欺诈**的任何机会,因为它需要立即采取行动。因此我提到,对于**这种**情况,**FN** 比 **FP** 成本更高。 (3认同)