智能决策上手系列教程索引
这是一个经典的贝叶斯案例,也是很反直觉的,很多解释认为这个反直觉是因为我们的日常错误的思维习惯,但我觉得可能恰恰相反,下面我们先回顾一下这个案例,然后再进一步讨论。
案例回顾
对所有人来说某种癌症的患病率为5%,医生使用某设备为你做了检查,此设备检查的准确率为80%,检查结果显示你患有此病(阳性)。请问你真实患有此病的概率是多少?
常见解答
首先我们要理解5%和80%这两个概率是什么意思。
患病率为5%,也就是说100个普通人里面有5个人生病,如图中红色。
设备的准确率为80%,也就是说有20%会搞错,95个真实无病的人来做检查,也会有95x0.2=19个人被查出病来,同样5个有病的也只查出4个来。
这么算的话,总共有4+19=23个人被查出有病,你是其中之一。而实际上真有病的可能是4/23大约是17%,所以你可以稍微放宽心一些,因为你真的患了这种癌症的可能性还不足五分之一,这就是常见解答给出的结论。
文字游戏
上面的解说看似科学完美,而且结果足够的乐观,但是不要高兴的太早。
你的乐观完全建立在对“检查准确率80%”这个说法的理解之上的,如果我把它解释成检查出100个有病,那么80个就真实有病,你还会乐观起来吗?
这简直就是纯粹文字游戏而已。
“检查准确率80%”到底怎么解?为100个人做检查,最终结果(无论真有病或真无病)有80%是正确的吗?真这么解释的话就不用买设备了,直接来问我吧,100个人来问我,我说100个人无病,那么我的准确率岂不是95%?(因为我对95个人的判断是正确的)。
在上面的常规解答中认为,80%的解释是:
- 100个真有病的来检查,此设备能查出80个有病,20个无病;
- 100个真无病的来检查,此设备能查出80个无病,20个有病。
对真有病和真无病的分辨能力可以控制在同一水平,是不是太巧合了?这就好像说如果100个男人中你可能错误认为其中20个是女人,那么你就一定也会把100个女人中的20个误认为是男人一样不靠谱。
一个反例
假设某种疾病,只要某个血液指标k超过500就可以断定患有这种病,真实患病者中一半的患者都k>500,而k<500的普通人中也有1/4的人可能患病,这批人占病患总数的另一半。
某设备就是根据k值进行检查的,只要k>500就判断有病,k<500就判断健康。
普通人中这种病的发病率是40%,那么100人来检查,20个被正确检查为有病,另外80人中的1/4也就是20个病患没有检测出来,60个没病的被正确判断,那么设备的“准确率”是80%。
如果这个设备也检查你并判断有病,那么你真实患病可能是多少?100%!和30%、80%完全无关。
所以,如果你已经被检查出有病,那么真实的患病可能性只和设备对于真实病患的识别能力有关,换句话说,它查出100个有病结果中实际多少人真的有病。
TP、FP、TN、FN
为了搞明白这个问题,我们要首先明确几个词语的定义,否则讨论是没有意义的。
对于设备检查病情这个事情,无外乎四种情况:
- TP,实际有病且检查也说有病。也就是有病,而且被正确查出来了,报告上的阳性Positive是真的,即True Positive真阳性。虽然生病,但还有得治。
- FP,实际没病但检查说有病。也就是没病,但被误诊为有病了,报告上的阳性Positive是错误的,即False Positive假阳性。这是倒霉,要浪费医药费了。
- TN,实际没病且检查也说没病。也就是没病,检查结果也是正确的没病,报告上的阴性Negative是真的,及True Negative真阴性。皆大欢喜。
- FN,实际有病但检查说没病。也就是有病,但被误诊为没病了,报告上的阳性Positive是错误的,即False Positive假阴性。最大悲剧,最后不知道怎么死的。
如下图所示,False开头的红色FP、FN都是误诊。
精准率Precision和准确度Accuracy
打的准和打的对是两回事,你枪枪爆头固然是打得准,但如果杀得都是自己人那就不是打的对。
直接从公式上可以看出它们的不同含义。
精确率Precision也叫查准率,或PPV(positive predictive value阳性预测值),就是你不管你从多少人中查出100个有病的,其中实际多少人真的有病,即真阳病患数TP除以所有阳性报告数量TP+FP。
准确度Accuracy就是你总共就查了100个人出了100份报告,其中有多少报告被你写对了,既包含真有病你写的也是阳性,也包含真没病你也写的是阴性,就是所有真阳和真阴TP+TN的数量占所有报告总数的比例,也就是1减误诊率。
准确度Accuracy有些时候没卵用,比如类似上面刚才举过的例子,某普通人患病率0.01%的癌症,随便弄台机器检查谁都说没病,这机器的Acc都能达到99.99%,Acc对于这种有病没病的数量比例严重失调的情况可以说毫无意义。
所以后来又发明出了平衡准确度Balanced Accuracy。
在这里,TPR是指真阳率true positive rate,也叫Recall召回率或者hit rate命中率、sensitivity敏感度,即查出的真患病人数占实际所有病患人数的比例;TNR是真阴率true negative rate,即查出的真没病人数占实际所有没病人数的比例;平衡准确度Balanced Accuracy是这两个比例的平均数。
从上面看,对于重病检查的案例,我们知道的如果是准确度Accuracy,其实没啥用。我们要的是精确率Precision,就是你查出100个有病,其中多少人实际会中招。
精确率Precision、召回率Recall和F值F-measure
再看一下上面我们在Balanceed Accuracy中提到的TPR,Recall召回率,它也叫做查全率,它表示全部生病的人里面你能查出多少个来,比如开始例子中,5个人生病,如果只查出4个,那么这个设备的召回率就是4/5等于80%。
对比下图可以帮助我们理解精确率Precision和召回率Recall的关系:
Recall查准率和Precision查全率往往有此消彼长的关系。比如开始的案例,如果我们把100人都检查为有病,那么查全率就是100%,一个不漏,但这样导致查准率变为5/100等于5%,低的可怜。反之,我们只查出5个人中的1个有病,那么查准率就是100%,查全率却只有1/5等于20%,也是低的可怜。最好的情况是查准率和查全率都是100%,5个有病的都查出来,一个不多一个也不少。
从上面我们也看出,单用查全率或者查准率都不全面,于是就出现了将两者糅合在一起的F值F-measure:
就是查准率Precision和查全率Recall的调和平均数,两数积2倍除以两数和。
由于Precision又叫PPV(positive predictive value阳性预测值),Recall又叫做
TPR(true positive rate真阳性率),所以有:
F值就是2倍真阳除以2倍真阳、假阳与假阴的和,它的分母部分看起来像这样:
另外,如果认为查准率或者查全率更重要的话,F值还可以为Precision和Recall使用不同的权重,得到更多变体。此外也有很多其他用于评估类似设备或算法质量的方法,大家有兴趣可以多关注一些。
回到开始
假阳率FPR(false positive rate)也叫fall-out,是误诊为有病的数量除以真实无病的数量(假阳性加真阴性):
最初我们的案例的下图中,由于设定了假阳率FPR也是80%,查全率Recall是80%,所以设备的查准率Precision是4/23大约是17%,F1值是(2x5)/(2x5+1+19)大约等于28%,都还是蛮低的。
总之,如果一个查准率只有17%的设备检查你患了绝症,你还是可以坚强一些再看看进一步情况,但如果一个查准率有80%的设备检查你患了绝症,那么你很可能遇到了大麻烦。
总结
- T、F、P、N的含义
- Accuracy、Balanced Accuracy
- Precision、Recall、F-measure
- 反常识的科学知识很多,但我们要认真甄别,仔细思考,因为常识是我们赖以生存的根本,不要轻易因为新奇的事情而放弃。
请注意,这里大多时候把Precision讲做查准率,但请记住它的更常用名称是精确度;Recall更科学的名字是召回率,查全率只是方便理解的说法。
智能决策上手系列教程索引
每个人的智能决策新时代
如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~
END