我正在研究一个二进制分类不平衡的营销数据集,它具有:
- 否:是 88:12 的比例(否 - 未购买产品,是 - 购买)
- 约 4300 个观察值和 30 个特征(9 个数字和 21 个分类)
我将我的数据分为训练集(80%)和测试集(20%),然后在训练集上使用标准标量和 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)