5D Library › 概率判断、布莱尔分数校准与群体智慧的统计理论 · English
第四章 信号检测论:看得清与门槛放在哪里
两种不同的能力
雷达操作员盯着屏幕上的光点:这是一架飞机,还是一团噪声?医生看一张影像:这是病灶,还是正常的变异?投资者看到一条消息:这是机会,还是噪声?在每一种情境里,判断都包含两件事。第一,看得清不清:信号与噪声在证据上分得有多开。第二,门槛放在哪里:证据达到什么程度才说「是」。一个判断者可以眼力很好但门槛太低,也可以眼力一般但门槛合适。
信号检测论把这两件事分开 (Green and Swets 1966; Macmillan and Creelman 2005)。它在第二次世界大战后的雷达与心理物理学研究中发展起来,后来被用于医学诊断、天气预报、测谎、记忆研究等许多领域 (Swets, Dawes, and Monahan 2000)。
模型与指标
最简单的形式是等方差高斯模型:在没有信号的「噪声」试次中,判断者感受到的证据 服从 ;在有信号的试次中,服从 。判断者在 超过某个标准 时说「有信号」。于是有四种结果:击中(有信号且说有)、漏报、虚报(无信号却说有)与正确拒绝。设击中率为 ,虚报率为 , 为标准正态分布函数的反函数,则
是辨别力,即两个分布的均值相距几个标准差; 是判断标准的位置, 表示门槛在两个分布的正中间, 表示偏向说「是」(宽松), 表示偏向说「否」(严格); 是门槛处的似然比 。
推导
四位虚构的判断者,以及不同辨别力下的接受者操作特征曲线(ROC 曲线)上的几个点。对等方差高斯模型,ROC 曲线下的面积为 。
推导
# Equal-variance Gaussian signal detection: noise N(0, 1), signal N(d', 1).
# d' = z(H) - z(FA), c = -(z(H) + z(FA)) / 2, beta = exp(c d'), AUC = Phi(d' / sqrt 2).
import math
from statistics import NormalDist
N = NormalDist()
def sdt(h, fa):
zh, zf = N.inv_cdf(h), N.inv_cdf(fa)
d = zh - zf
c = -(zh + zf) / 2 + 0.0
return d, c, math.exp(c * d)
def roc(d, crits):
return [(1 - N.cdf(k), 1 - N.cdf(k - d)) for k in crits]
if __name__ == "__main__":
print("observer | H FA | d' c beta")
for name, h, fa in (("neutral", 0.84, 0.16), ("liberal (says yes a lot)", 0.95, 0.40),
("conservative", 0.50, 0.023), ("weak but liberal", 0.90, 0.69)):
d, c, b = sdt(h, fa)
print(f"{name:24s} | {h:.3f} {fa:.3f} | {d:5.2f} {c:+6.2f} {b:6.2f}")
for d in (0.5, 1.0, 2.0):
pts = roc(d, (-1.0, 0.0, 1.0, 2.0))
auc = N.cdf(d / math.sqrt(2))
print(f"ROC d' = {d}: AUC = {auc:.3f}; (FA, H) at criteria -1, 0, 1, 2:")
print(" " + " ".join(f"({f:.2f}, {h:.2f})" for f, h in pts))
# observer | H FA | d' c beta
# neutral | 0.840 0.160 | 1.99 +0.00 1.00
# liberal (says yes a lot) | 0.950 0.400 | 1.90 -0.70 0.27
# conservative | 0.500 0.023 | 2.00 +1.00 7.32
# weak but liberal | 0.900 0.690 | 0.79 -0.89 0.50
# ROC d' = 0.5: AUC = 0.638; (FA, H) at criteria -1, 0, 1, 2:
# (0.84, 0.93) (0.50, 0.69) (0.16, 0.31) (0.02, 0.07)
# ROC d' = 1.0: AUC = 0.760; (FA, H) at criteria -1, 0, 1, 2:
# (0.84, 0.98) (0.50, 0.84) (0.16, 0.50) (0.02, 0.16)
# ROC d' = 2.0: AUC = 0.921; (FA, H) at criteria -1, 0, 1, 2:
# (0.84, 1.00) (0.50, 0.98) (0.16, 0.84) (0.02, 0.50)前三位判断者的辨别力几乎相同( 约为 2),差别全在门槛:中性者 ,;宽松者 ,击中率高达 95%,代价是 40% 的虚报;严格者 ,几乎从不虚报(2.3%),却漏掉一半的信号。如果只看击中率,宽松者「最厉害」;如果只看虚报率,严格者「最厉害」;其实三人看得一样清楚。第四位判断者击中率 90%,看起来不错,但虚报率高达 69%, 只有 0.79:他主要是在什么都说「是」。
最优门槛
门槛应当放在哪里?这取决于两件事:信号本来有多常见,以及四种结果各有多大的得失。
推导
推导。 设信号出现的先验概率为 ,噪声为 ;击中的收益为 ,正确拒绝的收益为 ,虚报的代价为 ,漏报的代价为 (都记为正数)。在证据为 时说「是」比说「否」的期望收益多出
当它大于零时应当说「是」。由贝叶斯定理,,其中 为似然比,于是最优规则是 ,
这就是格林与斯韦茨给出的最优似然比标准 (Green and Swets 1966)。在等方差高斯模型中 ,所以 上的门槛为 。
两个示意情境,辨别力都是 ,信号都只占十分之一。「抓机会」:把假机会当真代价为 4,抓住真机会收益为 5,错过真机会代价为 1。「筛查」:漏掉一个真病例代价为 20,虚报只需再做一次检查,代价为 1。程序同时用网格搜索验证解析解。
推导
# Optimal criterion (Green & Swets 1966): beta* = [P(N)/P(S)] [(V_CR + C_FA)/(V_H +
# C_M)]; on the evidence axis x* = ln(beta*)/d' + d'/2. d' = 1.5, P(S) = 0.10;
# illustrative payoffs.
import math
from statistics import NormalDist
N = NormalDist()
def expected_value(x, d, ps, vh, cm, vcr, cfa):
h, fa = 1 - N.cdf(x - d), 1 - N.cdf(x)
return ps * (h * vh - (1 - h) * cm) + (1 - ps) * ((1 - fa) * vcr - fa * cfa), h, fa
def report(name, d, ps, vh, cm, vcr, cfa):
beta = (1 - ps) / ps * (vcr + cfa) / (vh + cm)
xs = math.log(beta) / d + d / 2
grid = [i / 100 for i in range(-400, 601)]
xg = max(grid, key=lambda x: expected_value(x, d, ps, vh, cm, vcr, cfa)[0])
print(f"{name}: beta* = {beta:.2f}, criterion x* = {xs:+.2f} (grid search {xg:+.2f})")
for lab, x in (("optimal x*", xs), ("neutral beta = 1", d / 2),
("act on everything", -9.0), ("act on nothing", 9.0)):
ev, h, fa = expected_value(x, d, ps, vh, cm, vcr, cfa)
print(f" {lab:18s} H = {h:.2f} FA = {fa:.3f} expected value {ev:+.3f}")
if __name__ == "__main__":
report("opportunity", 1.5, 0.10, vh=5, cm=1, vcr=0, cfa=4)
report("screening ", 1.5, 0.10, vh=0, cm=20, vcr=0, cfa=1)
# opportunity: beta* = 6.00, criterion x* = +1.94 (grid search +1.94)
# optimal x* H = 0.33 FA = 0.026 expected value +0.004
# neutral beta = 1 H = 0.77 FA = 0.227 expected value -0.452
# act on everything H = 1.00 FA = 1.000 expected value -3.100
# act on nothing H = 0.00 FA = 0.000 expected value -0.100
# screening : beta* = 0.45, criterion x* = +0.22 (grid search +0.22)
# optimal x* H = 0.90 FA = 0.414 expected value -0.572
# neutral beta = 1 H = 0.77 FA = 0.227 expected value -0.657
# act on everything H = 1.00 FA = 1.000 expected value -0.900
# act on nothing H = 0.00 FA = 0.000 expected value -2.000在「抓机会」的情境里,,门槛要放得很高:最优策略只抓住三分之一的真机会,虚报率压到 2.6%,期望收益每次约为 +0.004,勉强为正。如果用「中性」门槛(),能抓住 77% 的真机会,却会在 22.7% 的假机会上出手,期望收益为每次 −0.452;见什么抓什么,期望收益为 −3.100,比什么都不做(−0.100)还差得多。也就是说,当真正的机会很少、假机会的代价又不小时,绝大多数看起来像机会的东西都应当放过,哪怕你的眼力不错。
「筛查」情境正好相反:,门槛要放低,击中率达到 90%,代价是 41.4% 的虚报。这在筛查中是合理的,因为虚报只意味着多做一次检查。同样的辨别力,两种情境的最优击中率一个是 33%,一个是 90%:门槛没有绝对的「对」,只有相对于基础率与代价的「对」。
一个类比:「总觉得抓到了机会」与「总觉得被针对」
注
这是类比,不是临床判断。 下面用信号检测论描述两种常见的日常倾向,只为说明门槛与基础率的关系,不用于评估任何人的心理状态。如果你长期感到别人在暗中伤害、监视或针对你,并因此痛苦、失眠或影响工作与人际关系,请联系医生或心理健康专业人员。 这类体验有许多可能的原因,需要专业人员面对面评估,不能靠自我测试或本书的模型判断。
有人总觉得自己抓到了机会:每条消息都像信号,每个项目都像风口。用本章的语言,这可能是门槛太低( 远小于 0),也可能是高估了机会的基础率 ,或者低估了虚报的代价 。上面的程序显示,在信号稀少的环境里,这样的门槛会带来大量虚报,即使击中率很高,总的结果也可能很差。
也有人总觉得别人在针对自己:同事的一句话、朋友的一次迟回消息,都被读成敌意的信号。在模型中,这同样表现为对「敌意」这一信号的门槛很低。但这里必须格外小心。第一,模型假设存在一个客观的「信号」与「噪声」,而人际处境中,对方的意图往往本来就模糊,旁观者也不一定能判断。第二,有些人确实处在被针对的环境里,此时低门槛是合理的警觉,而不是偏差。第三,模型不能区分一般的多疑与需要专业帮助的状况。所以,这个类比最多能提示一个问题——「在我的处境里,这类事件本来有多常见?虚报与漏报各有什么代价?」——而不能给出答案。
本章小结
信号检测论把判断拆成辨别力 与门槛 (或似然比 )两部分:同样的眼力,可以因门槛不同而表现出完全不同的击中率与虚报率。最优门槛 由信号的基础率与得失共同决定。信号稀少、虚报代价大时应当把门槛放高,漏报代价大时应当放低。把这一框架用于「总觉得抓到机会」或「总觉得被针对」只是类比;后者如果持续并带来痛苦,应寻求专业帮助。下一章讨论另一种基础率:同类项目的历史。
参考文献
Fan, Y. (2026). Probabilistic Judgement, Brier-Score Calibration and the Statistics of Collective Intelligence: From Base-Rate Neglect and Signal Detection Theory to Superforecasting, Read Beside Classical Chinese Strategic Calculation [概率判断、布莱尔分数校准与群体智慧的统计理论] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23764998 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).