【发布时间】:2019-10-05 12:30:09
【问题描述】:
我正在研究一个二元分类不平衡营销数据集,它具有:
- 否:是的比例为 88:12(否-未购买该产品,是-已购买)
- ~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