细说ROC曲线

最近在新冠肺炎新闻报道中频繁出现一个词“假阴性”。就是检测结果呈现是阴性(没有检测出病毒),实际上是一种假象,真实情况是阳性的。检测结果表现出“假阴性”,后果是非常严重的,相当于你把一个感染者放回家了。今天就来总结一下衡量检测或者说预测结果的方法和指标。

我们把“检测”归纳为“预测”,认为检测新冠病毒实际上就是对是否感染做预测,把所有的检测方法抽象成模型。模型的输入就是病人待检测的样本,输出结果为阴性或者阳性两种。如果用函数来描述就是

其中就是待检测样本,就是输出的结果,对应关系 就是检测的方法。

衡量模型好坏通常有这么一些指标。精度,召回率,,ROC曲线,AUC值等,下面我们分别来介绍这些指标。

二分类问题

模型的输出类别,只考虑二分类问题,也就是上面对应的阴性和阳性,通常我们把阴性数值化为0,阳性为1。衡量一个模型的好坏是需要大量的已知样本的,假设我们现在有个样本,分别是 我们通过对样本进行预测,把预测结果与已知结果对比,就能知道这个模型的好坏。

准确率

首先你能想到的是准确率,模型预测准不准,预测对了多少数据这个是很重要的.那么准确率就是预测对的样本数除以总的样本数。

精度,召回率和F1值

我们发现有时候仅仅是准确率这个指标是不够,举一个极端点的例子,我们预测某个地方的地震,一天预测1000次,我都说没有地震,那准确率几乎是100%。准确率这么高我不是成大仙了,实际上我就是胡说的,因为某个地方发生地震的概率实在太低。再比如预测A股大盘,我根本不用看大盘,闭着眼说跌,结果一年下来,发现准确率竟然也查过50%。这样的预测结果实际上没有参考价值的。

对于一个已经训练好的模型,我们有6条检验数据,3条正例,3条反例。第2行是模型预测值,第3行是样本的真实值。预测值,将6条验证数据代入模型中,分别得到模型的预测值。

模型的预测值与真实值

如果按照预测结果大于0.5 就是正例,小于0.5是反例,预测正确的数据为共4条数据,准确率就是4/6=0.67.

正确地预测为正例TP(True Positive)分别是 2条,正确地预测为反例TN(True Negative)的分别是,错误地预测为正例FP(False Positive)分别是,错误地预测为反例FN分别是。

于是我们得到混淆矩阵(下图),对角线上的数都是预测正确的,其余都是预测错误的。

混淆矩阵

精度描述的是在预测为正例的样本中有多少正例是被正确预测的:

召回率描述的是在实际正例样本中有多少正例是被正确预测的:

是精度和召回率的调和平均数:

ROC曲线

上面的例子中我们假定预测值大于等于0.5为正例,小于0.5为反例,这个0.5称为阈值,阈值是可以根据实际情况改变的。如果阈值改为0.8,那么预测值不小于0.8的才能被划分到正例,原来大于0.5小于0.8的“正例”就被划分为反例了。阈值越大相应被划分到正例的样本就会减少,正例的识别率提高了,意味着对于正例的预测越有把握。

假阳率描述在所有实际为阴性(反例)的样本中,被错误地判断为阳性(正例)之比率.

真阳率描述在所有实际为阳性(正例)的样本中,被正确地判断为阳性(正例)之比率

ROC曲线的X轴为假阳率, Y轴为真阳率.通过改变上述的阈值可以得到一些列的点,连接这些点就得到了ROC曲线。这些两个比率都是小于1的,因此ROC曲线在1x1的正方形内。接下来分别来计算几个点。

  • 阈值等于0.5时,根据上面的混淆矩阵我们计算假阳率真阳率


  • 阈值等于1时,说明预测值全部是反例,意味着,,红色为真实正例,白色为真实反例。
阈值为1


  • 阈值等于0.6, 不小于0.6都认为预测值为正例。
阈值等于0.6



  • 阈值等于0.3
阈值等于0.3


  • 阈值等于0时,意味着全部预测为正例。
阈值等于0



画出ROC曲线

我们分别计算了阈值等1,0.6,0.5,0.3,0,其对应的假阳率和真阳率分别为.画出这条曲线就是ROC曲线了。看起来点有点少了,尽量多取一些点,画出来的图形更加好看。曲线下的面积就是AUC值了。

ROC曲线

总结

网上已有大量的资料讨论ROC曲线和AUC值,本文不在赘述。本文通过一个简单例子,分别讲述了精度,召回率,F1值的计算方法,同时也计算了不同阈值对应的真阳率和假阳率,出了ROC曲线。在网上也看过很多通俗的文章,大多在讲述得到ROC曲线时省略了很多内容,本文恰好补充了不足之处,对于初学者相对友好。

如果喜欢我的文章,可以关注我的公众号“数学编程”。

你可能感兴趣的:(细说ROC曲线)