Skip to content
雲里
里雾

信号检测理论 (SDT) 入门 — d′, criterion, loglinear correction

mindgym 开发 更新于 2026/5/19

N-Back 评分用的是 d′(d-prime)而不是直观的准确率。本页从”防 cheese strategy”的工程动机入手,推导 d′ 和 criterion 的几何直觉,讲清 loglinear correction 为什么要全量启用,以及 Abramowitz & Stegun 26.2.23 近似的精度传导。


概述:为什么不用准确率

N-Back 的最朴素评分是 accuracy = (hits + correctRejects) / totalTrials。但两种 cheese strategy 都能拿到不错的 accuracy:

第二种特别诡异 —— 完全没在工作记忆里持有信息,光靠不响应就能拿 67%。这显然不能反映”工作记忆能力”。SDT 通过把感知敏感性 (d′) 与决策偏好 (criterion) 分开,让两种 cheese 策略 d′ ≈ 0,真实能力 d′ > 0。

历史背景

1954 年 Tanner & Swets 研究雷达检测员时遇到一模一样的问题,从统计决策理论借来 SDT:把检测建模为两个分布重叠 ——“noise”和”signal+noise”。检测员的内部感觉强度在 criterion 以上就报告”有”。

两个核心参数:

这两个参数正交:d′ 反映能力本身,criterion 反映策略偏好。SDT 后来被认知心理学全面采纳,记忆 / 注意 / 知觉测验的标准指标。

工作方式

公式推导

设用户对每个 trial 在内心打一个连续”我觉得是 target”分数。SDT 假设 target 和 non-target 两类 trial 的内心分数都是标准正态分布(均值 d′ 和 0),用户在 criterion 以上响应。反解:

d′ = z(hitRate) - z(falseAlarmRate)
criterion = -0.5 × (z(hitRate) + z(falseAlarmRate))

z 是 inverse normal CDF(标准正态分布的分位数函数)。

Criterion 语义

长期追踪 criterion 漂移能反映”信心 / 策略”变化。新手保守 (criterion=+0.5) → 训练两周后中立 (criterion=0) 本身是认知训练的成果。

边界 case 与 loglinear correction

hitRate=1 或 faRate=0 时 z 炸成 ±∞,d′ 没法用。N=20 trial 下 totalGo 只有 6 个,完美 hit (6/6) 直接撞边界。

Hautus 1995 的 loglinear correction:

function correctRate(numerator, total) {
  return (numerator + 0.5) / (total + 1)
}

完美 hit (6/6) → corrected 0.929(不是 1.0)→ z ≈ 1.47 →
完美 FA (0/13) → corrected 0.0357 → z ≈ -1.80 →
d′ = 3.27(不是 +∞)

全量启用 vs 仅边界启用

设计决策:全量启用。仅边界会让 dPrime 在 hit=0/6 → 1/6 时跳跃 0.34 z 单位(约 7.3 分)—— 视觉上”用户多答对一题分数反而跳了一大截”。全量启用牺牲非边界精度换取单调性,在小样本任务里产品价值更高。

zScore 自实现:A&S 26.2.23

JavaScript 无内置 Φ⁻¹,自实现 ~10 行,bundle 不增加。jstat 引入 ~50KB —— 不值。

export function zScore(p: number): number {
  if (p <= 0) return -Infinity
  if (p >= 1) return +Infinity
  const flipped = p > 0.5
  const q = flipped ? 1 - p : p
  const t = Math.sqrt(-2 * Math.log(q))
  const num = 2.515517 + 0.802853 * t + 0.010328 * t * t
  const den = 1 + 1.432788 * t + 0.189269 * t * t + 0.001308 * t * t * t
  const z = -(t - num / den)
  return flipped ? -z : z
}

中部精度 ~10⁻⁴,尾部 ~5×10⁻⁴。

精度传导分析

z 误差: 10⁻⁴
dPrime = z(H) - z(F) → 误差至多 2×10⁻⁴
score = dPrime / 3.27 × 100 → 误差 < 0.007 分

result.tsx 显示整数 score,0.007 分误差远低于显示精度。精度匹配显示精度,不过度是工程美德。

与其他评分对比

任务评分公式防 cheese原因
CPT(hits − 0.5×FA) / totalGogo/no-go 范式,简单线性惩罚 FA 够用
Flankeraccuracy × (1 - RT/baseline)accuracy 接近 1 时 RT 提供区分度
N-Back (d′)z(H) - z(F),归一化两端 cheese 都被 d′ 自动惩罚

为什么 Flanker 不用 d′?Flanker target rate 50%、必须响应、accuracy 接近 1 时 d′ 退化。N-Back target rate 1/3、可不响应、accuracy 远未饱和,d′ 是最佳维度。任务设计 ↔ 评分公式是 SDT 工程的核心 trade-off。

面试问题

参见

参考