📈 第6章 贝叶斯统计
📄 一句话概括

条件概率就是「已知 A 的前提下,B 的概率」。竖线后面那个条件,就是把样本空间缩小到那一堆人。 四个术语要能对上号:基础率、灵敏度、特异度、假阳性率。 它们不是四个独立的知识点,是同一件事的四个侧面。 整数格是把概率题变回数数题:1000 个人摆成格子,该数的数一遍,答案就出来了。

📝 本章和前面几章的关系

前两篇算出了数,这一篇把术语和写法补齐,让这套算法能被复述、能被检查。 这一篇的公式与整数格会算出同一个 16.7%,两条路都走一遍,是为了以后遇到复杂题能挑顺手的走。

一、四个术语先对上号

术语 意思 本节设定值
基础率 人群中患病的比例 1%
灵敏度 病人里测出阳性的比例 99%
特异度 健康人里测出阴性的比例 95%
假阳性率 健康人里测出阳性的比例 5%

基础率说的是「测之前」,后三个说的是「试验本身」。 灵敏度与假阳性率是一对:一个管「别漏」,一个管「别冤」。两个都高,试验才贵。 特异度和假阳性率加起来正好 1:健康人要么测出阴性,要么测出阳性,没有第三种。

二、竖线到底在说什么

P(病|阳) 读作「在测出阳性的条件下,真得病的概率」。竖线后面的东西是条件。 条件的实际作用是把样本空间缩小:不再从 1000 个人里挑,只在 59.4 个阳性的人里挑。 在缩小后的空间里,数一数有几个真病人,就是条件概率。 所以条件概率从来不是抽象概念,它就是「换一堆人数比例」。

记住这个动作,比记住公式有用:换分母、重数一遍。

三、整数格:把概率题变回数数题

取 1000 个人(方便,因为 1% 正好是 10 个)。 按 1% 切开:一行 10 个病人,一行 990 个健康人。 病人那一行,99% 亮阳性 → 9.9 个;健康人那一行,5% 亮阳性 → 49.5 个。

亮灯的总共 59.4 个,其中真病人 9.9 个。9.9 ÷ 59.4 = 16.7%。 全程只用乘法和加法,没有一处需要「理解概率的含义」。这就是整数格的好处。

四、公式和整数格是同一件事

公式写法:P(病|阳) = P(阳|病)P(病) ÷ [P(阳|病)P(病) + P(阳|没病)P(没病)]。 把数代进去:0.99 × 0.01 ÷ (0.99 × 0.01 + 0.05 × 0.99) = 0.1667。 分子是「真阳性」,分母是「所有阳性」,跟整数格里的两个数一模一样。

公式只是把整数格那两步写成了代数。先懂整数格,公式就不用背。

五、「1% 的人患病」,你仍然非常低

算出来的 16.7%,比直觉的 99% 低得多,但比基础率 1% 高得多。 两个方向的比较都要做:相对 99% 它很低,相对 1% 它高了 16 倍。 所以正确的说法不是「我没事」,也不是「我完了」,而是「我的风险从 1% 涨到了 16.7%,值得复查」。

概率的作用不是给你一个结论,是给你一个可以拿去决策的数。

六、动手 Demo:条件概率与整数格

同一道题走两条路:公式一条、整数格一条,看两个答案是否一致。 顺便把四个术语的值打出来,确认它们之间的加减关系。

BASE, SENS, SPEC = 0.01, 0.99, 0.95

print("基础率 %.2f  灵敏度 %.2f  特异度 %.2f  假阳性率 %.2f"
      % (BASE, SENS, SPEC, 1 - SPEC))

# 路线一:公式
hit = BASE * SENS
fa = (1 - BASE) * (1 - SPEC)
p1 = hit / (hit + fa)
print("公式法  %.4f" % p1)

# 路线二:整数格(1000 人)
N = 1000
sick = N * BASE
well = N - sick
true_pos = sick * SENS
false_pos = well * (1 - SPEC)
p2 = true_pos / (true_pos + false_pos)
print("整数格  %.4f" % p2)

print("两者差 %.2e,是同一个数" % abs(p1 - p2))
print()
print("病人 %.0f 人,真阳性 %.1f,假阳性 %.1f,阳性合计 %.1f"
      % (sick, true_pos, false_pos, true_pos + false_pos))

实跑输出:

--------------------------------------------------------------------
条件概率与整数格
--------------------------------------------------------------------

  ① 三个术语,先对上号
  --------------------------------------------------------------------

| 术语 | 意思 | 本节设定值 |
|---|---|---|
| 基础率 | 人群中患病比例 | 1% |
| 灵敏度 | 病人里测出阳性的比例 | 99% |
| 特异度 | 健康人里测出阴性的比例 | 95% |
| 假阳性率 | 健康人里测出阳性的比例 | 5% |

  这四个词是同一件事的四个侧面:基础率说的是「事先」,后三个说的是「试验本身」。

  ② 公式长什么样
  --------------------------------------------------------------------
  P(病|阳) = P(阳|病) × P(病) 除以 [P(阳|病) × P(病) + P(阳|没病) × P(没病)]
  竖线读作「在……条件下」。P(病|阳) 读作「在测出阳性的条件下,真得病的概率」。
  这就是条件概率的定义:把样本空间从「所有人」缩到「测出阳性的人」,再在这个小空间里数比例。

  ③ 两种算法,一个答案
  --------------------------------------------------------------------
  公式法:9.9 / (9.9 + 49.5) = 0.1667
  整数格法:同样三个数,同样 0.1667
  两种算法是同一件事,只是一个用小数、一个用人数。整数格好在能画、能数、能讲给别人听。

  ④ 为什么整数格更好记
  --------------------------------------------------------------------
  1000 个人摆成格子:10 个病人、990 个健康人。病人那一列 99% 亮灯,健康人那一列 5% 亮灯。
  数一数亮灯的总数,再数一数其中真病人几个,答案就出来了。全程只用加法和乘法。
  ! 人脑对「%」这种抽象比例很不敏感,对「1000 个人里有几个」非常敏感。
  所以换算成人头再算,错的概率小得多。

  ⑤ 「99% 准确」到底在说什么
  --------------------------------------------------------------------
  它说的是灵敏度,不是「阳性者有 99% 得病」。这两句话差了一个分母。
  试验报告里写「准确率」是最含糊的一种写法,因为「准确」可能指灵敏度、特异度、或者两者的平均。
  看到这种写法,正确反应是追问:病人里多少测出阳性?健康人里多少测出阳性?两个数都要。

两条路算出同一个 0.1667,误差在浮点精度以内。这不是巧合,是两个式子的代数等价。 整数格那一行输出里,假阳性 49.5 比真阳性 9.9 大得多——上一节讲的就是这件事。

30 秒实验

  1. 把 1000 人换成 10000 人,整数格的结果会变吗?为什么?
  2. 如果特异度写成 0.95,假阳性率是多少?为什么这两个数加起来必须是 1?
  3. 想一想:为什么用 1000 人而不是 100 人?换成 100 人会算不清楚吗?

常见误区

  1. 把竖线两边调换:P(病|阳) 和 P(阳|病) 不是一回事,调换等于换了分母。
  2. 术语混用:把特异度当假阳性率,答案会从 16.7% 变成 83.3%。
  3. 只背公式不懂整数格:公式一变形就蒙,整数格永远能重数一遍。
  4. 把 16.7% 读成「没事」:它比基础率高 16 倍,是「值得复查」而不是「可以放心」。
自测三问(点开对答案) 1. 条件概率里「条件」起了什么作用? —— 把样本空间缩小到满足条件的那一堆人,然后在这堆人里重新数比例。 2. 特异度和假阳性率是什么关系? —— 加起来等于 1。健康人要么测出阴性(特异度),要么测出阳性(假阳性率)。 3. 为什么整数格比公式好记? —— 它把概率题变回数数题:分堆、乘一下、数一数,全程不需要理解抽象定义。

术语和算法都齐了,接下来把它写成能反复用的东西。下一篇把贝叶斯规则做成一个函数。

相关笔记