用一道体检题复习贝叶斯公式

Published 2025-08-23 15:30 737 words 4 min read Handwritten Every word here was typed by me.

This post is not yet available in English. Showing the original.
检测呈阳性,真正患病的概率有多大?用一道经典的条件概率题复习贝叶斯公式,文末附四道小练习,可以直接在页面上作答。

最近帮朋友看一道概率题,发现自己对贝叶斯公式的印象只剩下「分母很长」。这里重新推一遍,顺便出几道题给自己练手。

题目

假设某种疾病在人群中的患病率是 1%。有一种检测:

  • 患病的人去检测,99% 会呈阳性
  • 没患病的人去检测,5% 会被误判为阳性

一个人检测结果为阳性,他真正患病的概率是多少?

先凭直觉猜一个数,再往下看。

推导

记 DD 为「患病」,++ 为「检测阳性」。题目给出的是:

P(D)=0.01,P(+∣D)=0.99,P(+∣¬D)=0.05P(D) = 0.01,\quad P(+ \mid D) = 0.99,\quad P(+ \mid \neg D) = 0.05

我们要求的是 P(D∣+)P(D \mid +)。贝叶斯公式:

P(D∣+)=P(+∣D) P(D)P(+)P(D \mid +) = \frac{P(+ \mid D)\,P(D)}{P(+)}

分母用全概率公式展开:

P(+)=P(+∣D) P(D)+P(+∣¬D) P(¬D)P(+) = P(+ \mid D)\,P(D) + P(+ \mid \neg D)\,P(\neg D)
展开计算过程

代入数值:

P(+)=0.99×0.01+0.05×0.99=0.0099+0.0495=0.0594P(+) = 0.99 \times 0.01 + 0.05 \times 0.99 = 0.0099 + 0.0495 = 0.0594

于是:

P(D∣+)=0.00990.0594=16≈16.7%P(D \mid +) = \frac{0.0099}{0.0594} = \frac{1}{6} \approx 16.7\%

答案是:大约六分之一,也就是 16.7%

为什么和直觉差这么多

直觉往往会盯着「99% 的准确率」,忽略了患病率本身只有 1%。换成具体人数会更直观:假设有 10000 人去检测,

人数检测阳性
患病10099
未患病9900495

阳性的一共 594 人,其中真正患病的只有 99 人,正好是六分之一。没患病的人基数太大,5% 的误判也就不少了。

这种「忽略基础比率」的倾向,在心理学里叫 基础比率谬误。

用代码验证

p_d = 0.01
p_pos_given_d = 0.99
p_pos_given_not_d = 0.05

p_pos = p_pos_given_d * p_d + p_pos_given_not_d * (1 - p_d)
print(p_pos_given_d * p_d / p_pos)  # 0.1666...
const pD = 0.01;
const pPos = 0.99 * pD + 0.05 * (1 - pD);
console.log((0.99 * pD) / pPos); // 0.1666...

练习

  • 如果患病率从 1% 提高到 10%,其他条件不变,阳性者真正患病的概率会怎样变化?
    • 基本不变
    • 明显升高
    • 明显降低

解析:基础比率变大,分子增长得比分母快。代入计算约为 68.75%。

  • 以下哪些做法可以提高阳性结果的可信度?
    • 降低误判率
    • 对阳性者再做一次独立检测
    • 扩大检测人数

解析:扩大检测人数不改变任何一个概率。第二次独立检测相当于用第一次的结果作为新的先验。

  • 贝叶斯公式中的分母 P(+)P(+) 可以用全概率公式展开。

解析:P(+)P(+) 按「患病」与「未患病」两种情况分别计算再相加。

  • 在本题中,P(+∣D)P(+ \mid D) 叫作检测的 灵敏度,1−P(+∣¬D)1 - P(+ \mid \neg D) 叫作检测的 特异度。

解析:灵敏度衡量「有病能查出来」,特异度衡量「没病不误报」。

Written by Handwritten

Random Posts

Loading...