第二次试验是阴性。把 16.7% 当基础率代进去,答案是 0.21%——比人群的 1% 还低。 算阴性要换参数:第二个参数填 1 − 灵敏度,第三个填 1 − 特异度。这一步最容易填错。 新信息改变基础概率,基础概率改变结论。这一章的全部方法就是这一句。
上一篇把规则写成了函数,这一篇用它处理「结果和上次相反」的情形。 这一篇只讲一件事:换了结果方向,三个输入都要跟着换,否则算出来的是一个毫无意义的数。
一、第二次结果:阴性
医生让你复查,第二次结果出来了:阴性。 这时候你的基础率已经是 16.7%,不再是人群的 1%。 如果照抄「灵敏度 99%、特异度 95%」,你会算出 79.8%——一个完全错误的答案,而且看上去还挺合理。
阴性不是「反向的阳性」,它是一次新的试验,三个输入都要重新想一遍。
二、算阴性的时候,三个参数都要换
函数里第二个参数是「有病的人被测出阳性的概率」。 现在结果不是阳性,这句话就变成了「有病的人被测出阴性的概率」,即 1 − 99% = 1%。 第三个参数是「没病的人被测出阴性的概率」。 现在要反过来,填「没病的人被测出阳性的概率」,即 1 − 95% = 5%。 所以调用写成 bayes(0.167, 0.01, 0.05):基础率、假阴性率、假阳性率。算出来 0.21%。
只改第二个、忘了第三个,答案变成 3.8%;两个都不改,答案还是 79.8%。三种写法,三个答案。
三、为什么压得这么狠
算完 0.21%,只有人群基础率的五分之一。 原因在似然比:阳性是 0.99 ÷ 0.05 = 19.8,阴性是 0.01 ÷ 0.95 = 0.0105。 19.8 的意思是「阳性把可能性放大 20 倍」,0.0105 的意思是「阴性把可能性压小 95 倍」。 所以一次阴性的证据强度,大约抵得上 4.8 次阳性。反过来说,阳性结果本身真的不怎么值钱。
这也是筛查类检测的普遍规律:阴性几乎能排除,阳性只值得复查。
四、新信息改变基础概率
整章的方法,压缩成一句话:新信息进来,基础概率变,结论跟着变。 阳性一次:1% → 16.7%。阳性两次:→ 79.8%。阳性后阴性:16.7% → 0.21%。阴性两次:→ 0.011%。 每一条证据都在动这个数,动的幅度由证据的诊断性决定。
做决策时用的就是这个数,不是「阳性」「阴性」这两个字。「阳性」只是一个输入,不是一个结论。
五、这一章的收尾
第 6 章讲完了贝叶斯规则:先给事前判断,再用证据调它,调完的结果能当下一轮的起点。 它最难的地方不在数学,在承认「我先有一个判断」。很多人不肯承认这一点,于是把先验偷偷设成 50%。 第 7 章换一个话题:数据里的模式看着很像真的,其实可能只是随机涨落——怎么分辨这两种情况。
六、动手 Demo:第二次试验与新的基础概率
算阴性结果时,第二个参数换成 1 − 灵敏度,第三个换成 1 − 特异度。这是本节最容易错的地方。 算完把几条路径摆在一起,看概率怎么一路动过来。
def bayes(base, sens, spec):
hit = base * sens
fa = (1.0 - base) * (1.0 - spec)
return hit / (hit + fa)
SENS, SPEC = 0.99, 0.95
p1 = bayes(0.01, SENS, SPEC) # 阳性一次
p_pp = bayes(p1, SENS, SPEC) # 阳性两次
p_pn = bayes(p1, 1 - SENS, 1 - SPEC) # 阳性后阴性
p_nn = bayes(0.01, 1 - SENS, 1 - SPEC) # 阴性两次
for name, v in (("没做试验", 0.01), ("阳性一次", p1), ("阳性两次", p_pp),
("阳性后阴性", p_pn), ("阴性两次", p_nn)):
print("%-8s %8.3f%%" % (name, v * 100))
print()
lr_pos = SENS / (1 - SPEC)
lr_neg = (1 - SENS) / SPEC
print("似然比:阳性 %.1f,阴性 %.4f" % (lr_pos, lr_neg))
print("阴性一次抵得上 %.1f 次阳性" % ((1 / lr_neg) / lr_pos))
print()
print("照抄参数不改:%.1f%%,只改第二个:%.1f%%"
% (bayes(p1, SENS, SPEC) * 100, bayes(p1, 1 - SENS, SPEC) * 100))
实跑输出:
--------------------------------------------------------------------
第二次试验与新的基础概率
--------------------------------------------------------------------
① 第二次试验结果:阴性
--------------------------------------------------------------------
医生让你复查,第二次结果出来了:阴性。
这时候你的基础率已经是 16.7%,不再是人群的 1%。
算阴性要换参数:「病人被测出阴性」的概率是 1 减灵敏度 = 1%,
「健康人被测出阴性」的概率是特异度 95%。
算出来 0.21%。
② 比路人的 1% 还低
--------------------------------------------------------------------
阳性一次把你从 1.00% 抬到 16.7%,阴性一次直接压到 0.21%。
压得比人群基础率还低,是因为阴性方向的证据强得多:假阴性只有 1%,假阳性有 5%。
再加上健康人本来就多,阳性那一轮里混进来的假阳性太多,一遇到阴性就全被排除了。
! 结论是:0.21% 远低于 1%,可以暂时放心。
③ 同一条规则,输入不同,输出天差地别
--------------------------------------------------------------------
| 经历 | 这一轮的灵敏度/假阳性率 | 患病概率 |
|---|---|---:|
| 没做试验 | — | 1.00% |
| 阳性一次 | 0.99 / 0.05 | 16.7% |
| 阳性两次 | 0.99 / 0.05 | 79.8% |
| 阳性后阴性 | 0.01 / 0.95 | 0.21% |
| 阴性两次 | 0.01 / 0.95 | 0.011% |
第二列两个数之比就是似然比:阳性 0.99/0.05 = 19.8(把可能性放大 20 倍),
阴性 0.01/0.95 = 0.0105(压小 95 倍)。
一次阴性的证据强度,大约抵得上 4.8 次阳性。所以复查结果一出来,数字掉得这么狠。
④ 阴性也有代价
--------------------------------------------------------------------
灵敏度 99% 的意思是:100 个真病人里,有 1 个会被判成阴性。
所以「阴性」不等于「一定没病」,它只是「概率低到可以暂时不管」。
要不要继续查,取决于漏掉一个病人的代价有多大——这是决策问题,不是概率问题。
⑤ 这一章的收尾
--------------------------------------------------------------------
贝叶斯规则就一件事:先给一个事前判断,再用证据去调它。调的方向和幅度都由证据的诊断性决定。
下一章换一个话题:数据里的模式看起来很像真的,其实是随机的——怎么分辨这两件事。
最后一行是反面教材:照抄参数得 79.8%,只改第二个得 3.8%,两个都改才是 0.21%。 参数填错不会报错,只会给你一个看不出问题的错数。 似然比 95 比 19.8,是这一节最该记住的两个数:阴性几乎能排除,阳性只值得复查。
30 秒实验
- 把灵敏度改成 0.90、特异度改成 0.99,阳性后阴性会变成多少?
- 如果第二次用的是另一种试验(灵敏度 0.80、特异度 0.99),阳性后再阴性会是多少?
- 想一想:为什么「阳性」「阴性」这两个词本身不能当结论用?
常见误区
- 算阴性时忘了换参数:三个输入是三个不同的概率,照抄就是换了一道题。
- 把阴性当「反向的阳性」:它不是取反,是一次新试验,参数要重新对号。
- 把阳性当结论:阳性只是一个输入,要不要行动看最终那个概率。
- 不承认先验:偷偷把先验设成 50%,等于假装自己什么都不知道。
自测三问(点开对答案)
1. 算阴性结果时,函数的第二、三个参数该填什么? —— 1 − 灵敏度(假阴性率)和 1 − 特异度(假阳性率)。两个都要换,不是只换一个。 2. 为什么一次阴性能把 16.7% 压到 0.21%? —— 因为似然比是 0.0105,等于把可能性压小 95 倍;阳性方向只放大 19.8 倍。 3. 这一章的方法用一句话怎么说? —— 新信息改变基础概率,基础概率改变结论;后验可以当下一轮的先验。第 6 章收尾。第 7 章开始处理另一类误判:你看到的规律,可能只是随机涨落。
- ☐ (本篇完,下一篇 7.1 背水投资公司与专家信念)