SMOTE 算法和分类:高估的预测成功率

Posted

技术标签:

【中文标题】SMOTE 算法和分类:高估的预测成功率【英文标题】:SMOTE Algorithm and Classification: overrated prediction success 【发布时间】:2019-04-09 22:11:51 【问题描述】:

我遇到了一个我找不到任何答案的问题。我有一个二元分类问题(输出 Y=0 或 Y=1),Y=1 是少数类(实际上 Y=1 表示公司的默认值,原始数据框中的比例=0.02)。 因此,我仅在我的训练集上使用 SMOTE 算法计算过采样(在将我的数据帧拆分为训练集和测试集之后)。我在我的训练集上训练逻辑回归(类“默认”=0.3 的比例),然后查看 ROC 曲线和 MSE 以测试我的算法是否能很好地预测默认值。 我在 AUC (AUC=0.89) 和 MSE (MSE=0.06) 方面都得到了非常好的结果。 然而,当我尝试更准确、更个别地查看我的预测时,我发现 20% 的违约没有得到很好的预测。 您是否有一种方法可以很好地评估我的预测质量(质量对我来说意味着预测很好的预测)。我认为AUC是一个很好的标准...... 到目前为止,您是否还有一种方法可以改善我的回归? 谢谢

【问题讨论】:

MSE在分类设置中没有意义 【参考方案1】:

对于每个分类问题,您都可以构建一个confusion matrix

这是一个双向输入矩阵,不仅可以让您看到 真阳性/真阴性 (TP/TN),这是您的正确预测,而且还有误报 (FP)/误报 (FN),这在大多数情况下是您真正感兴趣的。

FP 和 FN 是您的模型所犯的错误,您可以使用 灵敏度 跟踪模型在检测 TP (1-FP) 或 TN (1-FN) 方面的表现如何strong> 或 特异性 (link)。

请注意,如果不降低另一项,就无法改进一项。所以有时你需要选择一个。

一个很好的折衷方案是F1-score,它会尝试对两者进行平均。

因此,如果您对默认值 更感兴趣(让我们想象一下defaults=Positive Class),您会更喜欢具有更高灵敏度 的模型。但请记住,也不要完全忽略特异性。

这里是 R 中的示例代码:

# to get the confusion matrix and some metrics
caret::confusionMatrix(iris$Species, sample(iris$Species))

【讨论】:

好的,谢谢,我会看看这个!然而,敏感性和特异性的概念也计入 AUC,这在我的示例中非常好。那么查看 AUC 和查看混淆矩阵有什么区别?抱歉,我的问题可能很愚蠢,但我看不出有什么区别 stats.stackexchange.com/questions/210700/… 这可能对您有所帮助。我忘了说 AUC 是一个很好的平均值,有时就像 f1-score 其他好的答案:***.com/questions/44172162/f1-score-vs-roc-auc 和 ***.com/questions/34698161/… 我建议查看精确召回曲线。召回率与灵敏度相同,但精度是预测的阳性中有多少实际上是真实的,即:TP/(TP+FP)。另一方面,在 AUC 中使用的特异性对于您预测的所有真阴性都会变得更高。如果您有大部分为负的不平衡数据,那么真正的负数很容易预测并且会夸大 AUC。 kaggle.com/general/7517

以上是关于SMOTE 算法和分类:高估的预测成功率的主要内容,如果未能解决你的问题,请参考以下文章

风电功率预测基于matlab灰狼算法优化LSTM风电功率预测含Matlab源码 1392期

在 CARET k-fold 交叉验证分类中更改 SMOTE 参数

使用贝叶斯分类和基于奇异频谱分析的指标预测市场走势

R语言DALEX包的explain函数生成指定分类预测机器学习模型的解释器predict_diagnostics函数执行残差的局部诊断可视化指定预测变量的局部稳定性图判断预测的稳定性以及高估低估

非平衡数据的处理(SMOTE算法)

Matlab基于朴素贝叶斯算法实现多分类预测(源码可直接替换数据)