【问题标题】:Unbalanced dataset resulting in high false positives after using SMOTE使用 SMOTE 后导致高误报的不平衡数据集
【发布时间】:2019-10-05 12:30:09
【问题描述】:

我正在研究一个二元分类不平衡营销数据集,它具有:

  1. 否:是的比例为 88:12(否-未购买该产品,是-已购买)
  2. ~4300 个观察值和 30 个特征(9 个数值和 21 个分类)

我将数据分为训练 (80%) 和测试 (20%) 集,然后在训练集上使用 standard_scalar 和 SMOTE。 SMOTE 将训练数据集的“否:是”比率设为 1:1。然后我运行了一个逻辑回归分类器,如下面的代码所示,在测试数据上获得了 80% 的召回分数,而在没有 SMOTE 的情况下应用逻辑回归分类器,测试数据的召回率仅为 21%。

使用 SMOTE,召回率提高很大,但误报率很高(请参阅混淆矩阵的图片),这是一个问题,因为我们最终会针对许多虚假(不太可能购买)客户。有没有办法在不牺牲召回/真阳性的情况下降低误报?

#Without SMOTE
clf_logistic_nosmote = LogisticRegression(random_state=0, solver='lbfgs').fit(X_train,y_train)

#With SMOTE  (resampled train datasets) 
clf_logistic = LogisticRegression(random_state=0, solver='lbfgs').fit(X_train_sc_resampled, y_train_resampled)

【问题讨论】:

  • 一开始每个类的value_counts是多少??您总共使用了多少个功能?在进行特征工程之后?
  • 总样本 = 4334,value_counts:0 = 3832 (88%),1 = 502 (12%) 特征工程后的总特征 = 30(9 个数字,21 个分类)

标签: python machine-learning logistic-regression oversampling


【解决方案1】:

即使我也遇到过类似的问题,误报率非常高。在那种情况下,我在做特征工程后应用了 SMOTE。

然后我在做特征工程之前使用了 SMOTE,并使用 SMOTE 生成的数据来提取特征。这样它工作得很好。虽然,这将是一种较慢的方法,但它对我来说很有效。让我知道你的情况。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2017-10-28
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    相关资源
    最近更新 更多