对于ROC曲线和AUC值总是容易忘记
现在再来回忆一下
首先ROC曲线的出现是为了解决样本不平衡情况下,模型效果评估无效的问题
因为假设有90个正样本,10个负样本,那么我们无脑预测结果为正,都能达到90%的准确率
那么怎么解决这个问题呢?
假设我们的应用场景在医院,我们关注的样本是患者是否生病了
以生病了为正样本,没生病为负样本。
我们现在建立了一个模型,可以根据看病者的种种特征来评判患者是否真的生病了
此时我们就不玩那个虚头巴脑的什么所有预测为正的样本占总样本数多少,原因我们讲过了,这样由于本身样本数的不平衡,造成了错误。
OK,我们要关注这个病人生没生病
用两个新的指标,TPR,FPR
TPR,真正率,正样本中有多少被正确预测为正样本
FPR,假正率,负样本中有多少被错误预测为正样本
因为我们只关心正样本啊,且我们直接从真实情况出发
假设正样本中都被预测为了正样本,而负样本中没谁被预测为正样本,这当然好啊,
我们都是分别从实际的正样本和实际的负样本中出发去观察问题,这就与样本是否平衡没有啥关系了。
或者从另一个角度来看,我们以X代表预测值,Y代表真实值
召回率 = 灵敏度 = P(X=1 | Y=1) TPR
特异度 = P(X=0 | Y=0) FPR = 1- 特异度
有了TPR和FPR两个指标,我们再来看ROC曲线的意义
我们分类要设置一个阈值,例如我们设置n为阈值(0<=n<=1),那么小于n的都预测为负样本,大于n的都预测为正样本
我们算TPR和FPR的时候两者分开计算,没有什么必然联系
例如我们实际上有100个正样本,10个负样本
我们设置了阈值n之后100个正样本中有40个被判断成了负样本,60个被判断成了正样本
10个负样本中有2个被判断称了负样本,8个被判断成了正样本
那么对应n这个阈值的情况下TPR = 60/100 = 0.6
FPR = 8/10 = 0.8
由(0.8,0.6)就可以确定以FPR为横轴,TPR为纵轴的二维平面上的一个点
而整个ROC曲线就是一系列这样的点来构成的
如何构成呢?我们把这个阈值n从0滑动到100,构成的所有(FPR,TPR)连线就能构成ROC曲线
回到本质上来说,TPR叫做真正率,代表了模型预测响应的覆盖程度,而FPR代表了模型谎报相应的覆盖程度
所以TPR越高越好,FPR越低越好,
极限情况下,当然是贴着y = 0这条边往上是最好的
当有问到:
ROC曲线上的每一点代表什么,可以这样回答
假设当前坐标点对应的阈值为n,那么横坐标代表被划分为正样本的负样本数占总负样本数的数量,也就是真实负样本中的谎报程度
纵坐标代表被划分为正样本的正样本数占总正样本数的数量,也就是真实正样本中的正确预测程度
曲线越抖越好
网友评论