为什么说precision和recall对数据的偏斜敏感,而roc_auc却不敏感?

来源:10-7 ROC曲线

血色星期二

2018-10-28

所谓敏感,也就是说,precision和recall会随着数据偏斜的程度变化,而剧烈变化。但是这一点是如何体现的呢?

写回答

1回答

liuyubobobo

2018-10-29

关于precision和recall的意义,请再回顾课程的10-1,10-2两个小节。


这里所说的敏感,是指对于极端偏斜的数据,普通的指标,比如准确率,是看不出我们的模型有任何问题的。但是使用 precision 和 recall 可以。


比如我在课程中举得这个例子:

//img.mukewang.com/szimg/5bd60c860001484b10020557.jpg

从准确率的角度看,这个预测结果的准确率高达:99.86%


但是,从精准率的角度,仅有40%:

//img.mukewang.com/szimg/5bd60ccc000131bb10030561.jpg


从召回率的角度,则是80%:

//img.mukewang.com/szimg/5bd60cf20001a87c10050562.jpg


精准率和召回率都远低于准确率。为什么。可以回头再分析一下准确率的计算,这是因为我们的真正的病人只有10个。极度有偏的数据,是的即使我们预测所有人都是健康的,都能获得极高的准确率。但是,准确率这个指标,在这种情况下,没有揭示出我们的预测模型的问题。但是精准率和召回率揭示出来了:)这是精准率和召回率对极度有偏的数据敏感的意思。


仔细分析,为什么精准率和召回率能够对极度有偏的数据敏感?因为,他们汇率掉了上面混淆矩阵中的TN项!在我们的例子中,TN项是造成数据极度有偏的核心原因,也是让上面我说的“即使预测所有人都是健康的,都能获得极高的准确率”的核心原因。因为大部分人都是健康的,做到相对较高的准确预测TN很容易!


所以,再看ROC的计算(或者ROC曲线的绘制),这个TN是存在在ROC中的,所以,相较准确率和召回率而言,ROC对极度有偏的数据没有那么敏感:)


更多关于ROC,准确率和召回率的分析,也可以参考这个问答:https://coding.imooc.com/learn/questiondetail/42693.html


加油!:)

2
2
名侦探之江户川躺平
老师牛逼
2022-06-16
共2条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5858 学习 · 2451 问题

查看课程