假设你是侦探韩青,接到一桩蹊跷的案子:某老城区居民近两年健康持续恶化,而所有患者家中都长期饮用同一品牌的桶装水。现场证据链近乎完美——喝水的人群患病率高出 13%,供水台账、投诉记录全都指向它。可你心里清楚:案发并非“随机实验”,喝桶装水的多是中产家庭,他们应酬多、熬夜多、外卖多。这些看不见的因素,就像案发现场那个“没被拍到脸的帮凶”,随时可能替桶装水顶罪。本案的胜负手,不是罗列现有证据,而是回答一个更刁钻的问题——那个隐藏帮凶,至少要多大“本事”(强度),才能把桶装水彻底洗白?如果这个帮凶要强到荒谬才能翻案,桶装水的罪名就成立;反之,结论一推就倒。Rosenbaum 敏感度分析,就是给侦探配的这台“帮凶测力机”。本文会用这台测力机,把因果结论的稳健性一测到底。

岗位关联

对 AI 从业者而言,敏感度分析是因果结论的“安检机”:模型在真实世界数据上做出的每个因果断言,都需要向审阅者交代它抵御未观测混杂的稳健程度。学会它,是从算法工程师走向可解释 AI 架构师的必修一课。

目录
  1. 可视化演示
  2. 观察性研究的困境
  3. 敏感度分析的核心思想
  4. 配对结构的基本假设
  5. 符号检验与p值上界
  6. 临界Gamma的解读
  7. 敏感性分析的算法流程
  8. 实战案例与应用场景
  9. 方法的边界与局限
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

观察性研究的困境

韩青翻开案卷第一页,发现整条街的目击证词都齐刷刷指向桶装水。可她在警校学过第一课:目击证词会骗人。最理想的证据来自“随机实验”——让法官掷骰子,骰子决定谁喝桶装水、谁喝自来水,两边人群除了喝水不同,其余特征理应均衡。可现实世界没有这种法庭:人喝不喝桶装水是自己选的,中产更爱订水,而中产本身应酬多、熬夜多、外卖多,这些生活方式的差异本身就是健康杀手。数据里观察到的 13% 患病率差异,到底归功于桶装水,还是归功于这些藏在暗处的习惯?

统计学家把这种“自己选出来的暴露”称为观察性研究。它没有随机化的护身符,因果推断就成了一个反事实问题:假如这些家庭从不喝桶装水,他们的健康结局会怎样?反事实框架把这个“假如”变成可计算的缺口——真正要估计的,是同一个体在接受处理与不接受处理两种平行世界下的结局之差。

韩青合上案卷,若有所思:目击者(可观测变量)都审过了,可真正的危险来自那些没被记录的特征——看不见的帮凶。要守住这个案子,她需要一个能估算帮凶力量上限的工具。

δi=Yi(1)−Yi(0)\delta_i = Y_i(1) - Y_i(0)
$\delta_i$ 表示个体 $i$ 的处理效应:同一人在“喝桶装水”与“不喝桶装水”两个世界里健康结局的差。观测数据只能看到 $Y_i(1)$ 或 $Y_i(0)$ 其中一个,所以反事实缺口永远存在,混杂就是补这个缺口的“障眼法”。
  1. 处理世界的结局$Y_i(1)$ 表示个体 $i$ 在接受处理这个平行宇宙里的结果,比如喝了桶装水之后的健康评分。
    Yi(1)Y_i(1)
  2. 对照世界的结局$Y_i(0)$ 是同一个体“从未接触桶装水”的假设结局,是永远无法直接观测的幽灵。
    Yi(0)Y_i(0)
  3. 做差得到净因果$\delta_i$ 用两个平行世界的结局相减,剥离个体本身的健康基础,剩下的才是处理单独造成的净影响。
    δi=Yi(1)−Yi(0)\delta_i = Y_i(1) - Y_i(0)

敏感度分析的核心思想

老侦探的经验是:破案时你不能假装帮凶不存在,而要问“帮凶得有多强,才能把这个案子整个翻过来”。Rosenbaum 敏感度分析正是这个思路。它不试图证明不存在未观测混杂,而是预设一个隐藏因素 $u$(比如“生活不规律”),然后计算:当 $u$ 对“是否喝桶装水”的影响力达到某个强度时,原本显著的因果证据会不会变得站不住脚。

这个“影响力强度”被压缩成一个参数 $\Gamma$。在匹配好的两个人(一个喝桶装水、一个不喝)之间,$u$ 使前者接受处理的几率(odds)相对后者最多放大 $\Gamma$ 倍。$\Gamma=1$ 意味着 $u$ 完全不影响喝水决策,等价于随机实验;$\Gamma=2$ 则意味着隐藏因素可以让某个人的喝水几率是另一个人的两倍,即便两人表面特征完全相同。这个放大倍数就是帮凶的“作案能力上限”。

韩青把这个参数牢牢记下:它就像测谎压力表的刻度,旋钮越大,帮凶被赋予的力气越大。下一步,她需要找到一对对“双胞胎证人”,让证据结构真正站得住。

πa (1−πb)(1−πa) πb≤Γ,πa=P(D=1∣xa,ua)\frac{\pi_a\,(1-\pi_b)}{(1-\pi_a)\,\pi_b} \le \Gamma, \qquad \pi_a = P(D=1 \mid \boldsymbol{x}_a, u_a)
这个式子刻画了匹配对内两个体“接受处理概率”的 odds 比值上界。$\Gamma$ 是一个旋钮:旋到 1 代表“没有未观测混杂”,旋得越大代表隐藏帮凶越强,我们的因果结论要经受的考验越严酷。
  1. 定义处理概率$\pi_a$ 与 $\pi_b$ 是匹配对内两人各自喝桶装水的概率,它同时受可观测特征 $\boldsymbol{x}$ 和隐藏因素 $u$ 的影响。
    πa=P(D=1∣xa,ua)\pi_a = P(D=1 \mid \boldsymbol{x}_a, u_a)
  2. 构造几率比值把两人的“喝与不喝的 odds”写成比例形式,如果 $u$ 不存在,这个比例应当等于 1。
    πa/(1−πa)πb/(1−πb)\frac{\pi_a / (1-\pi_a)}{\pi_b / (1-\pi_b)}
  3. 压上上限Rosenbaum 假设这个比例最大不超过 $\Gamma$,于是 $\Gamma=1$ 对应无混杂,$\Gamma$ 越大允许的隐藏偏倚越强。
    πa (1−πb)(1−πa) πb≤Γ\frac{\pi_a\,(1-\pi_b)}{(1-\pi_a)\,\pi_b} \le \Gamma

配对结构的基本假设

韩青决定启用“双胞胎证人”策略:给每个喝桶装水的患者,找一个年龄、性别、收入、病史几乎一模一样的街坊作对照。两个人像一对同卵双胞胎,表面特征高度一致,唯一的区别是一个喝了桶装水、一个没喝。这样一比,桶装水的“罪责”就被精确地孤立出来了。统计上这叫匹配对设计,实际操作中常用倾向得分匹配——先估计每个人“在自身特征下喝水概率” $e(\boldsymbol{x})$,再把得分接近的人配成一对。

匹配解决了看得见的差异,却解决不了看不见的差异。这对“双胞胎”看着像,骨子里的隐藏因素 $u$ 仍可能不同:一个天天熬夜,一个生活规律。由于 $u$ 会同时影响喝水决定和健康结局,匹配对内“谁喝水”就不再是公平的抛硬币。Rosenbaum 的模型允许这种不公平,只是把不公平的程度限制在 $\Gamma$ 的范围内。换句话说:证人整体可信,但某个隐藏动机可能让其中一人更倾向于站到“喝水组”那边。

双胞胎证人到位,韩青让每位证人独立作证:他们的健康差异是正是负?接下来,陪审团要用投票来决定是否起诉桶装水。

e(x)=P(D=1∣X=x)e(\boldsymbol{x}) = P(D=1 \mid \boldsymbol{X} = \boldsymbol{x})
$e(\boldsymbol{x})$ 是倾向得分——根据个人特征 $\boldsymbol{x}$ 预测其喝桶装水的概率。匹配之后,每个匹配对内可观测特征大致同质,但未观测 $u$ 导致的“分配偏差”仍未排除,这正是 $\Gamma$ 要施加限制的地方。
  1. 估计喝水倾向用逻辑回归等模型,根据协变量 $\boldsymbol{x}$ 估计每个人喝桶装水的概率 $e(\boldsymbol{x})$。
    e(x)=P(D=1∣X=x)e(\boldsymbol{x}) = P(D=1 \mid \boldsymbol{X} = \boldsymbol{x})
  2. 按得分配对把倾向得分相近的两人组成一对,一人入处理组、一人入对照组,从而控制可观测混杂。
    ∥e(xa)−e(xb)∥≤ε\| e(\boldsymbol{x}_a) - e(\boldsymbol{x}_b) \| \le \varepsilon
  3. 接受残余偏差即使得分完全相等,隐藏 $u$ 仍可能让两人接受处理的几率比达到 $\Gamma$,这是后续一切敏感性分析的地基。
    πa (1−πb)(1−πa) πb≤Γ\frac{\pi_a\,(1-\pi_b)}{(1-\pi_a)\,\pi_b} \le \Gamma

符号检验与p值上界

证人们开始投票。每个匹配对出示一份证词:如果喝水者的健康结局比对照者差,投一张“正向票”,反之投“负向票”。如果没有隐藏帮凶,每对证词的方向应当像公平硬币——正负各半的概率。这就是符号检验:统计正向票数 $k$,在“处理无效”的原假设下,$k$ 服从二项分布。若 $k$ 大得离谱,说明桶装水嫌疑极大。把每对差值的绝对值排个名再加权,还能升级成更灵敏的 Wilcoxon 符号秩检验,原理类似,只是给大差额更高的权重。

问题来了:帮凶一发力,投票就不再公平。当 $\Gamma>1$,正向票出现的概率不再固定在二分之一,而是落在 $1/(1+\Gamma)$ 到 $\Gamma/(1+\Gamma)$ 的区间内。Rosenbaum 给出一个著名的上界公式:在给定 $\Gamma$ 下,无论帮凶怎么挑拨,p 值最多也不能超过下面这个值。

陪审团的第一轮投票结果出来了:20 对证人里有 15 对投正向票,无混杂时 p 值只有 2%。但韩青知道,这 2% 只是理想情况。测谎机开始加压,她要看到压力表指针在哪里越过红线。

pmax⁡=∑i=kn(ni)Γi(1+Γ)np_{\max} = \sum_{i=k}^{n} \binom{n}{i} \frac{\Gamma^{i}}{(1+\Gamma)^{n}}
这是存在未观测混杂时,符号检验单侧 p 值的最坏情况(上界)。当 $\Gamma=1$ 时它恰好退化为经典二项检验;当 $\Gamma$ 增大时 $p_{\max}$ 随之上升,原本显著的证据可能被“稀释”到不显著。
  1. 列出正向投票数$k$ 是 $n$ 个匹配对中“处理组结局更差”的对数,$i$ 从 $k$ 累加到 $n$。
    ∑i=kn(ni)\sum_{i=k}^{n}\binom{n}{i}
  2. 计算单对概率上界在 $\Gamma$ 限制下,一个正向票出现的概率最高为 $\Gamma/(1+\Gamma)$,全部 $n$ 对联合出现的上界写为 $\frac{\Gamma^{i}}{(1+\Gamma)^{n}}$。
    Γi(1+Γ)n\frac{\Gamma^{i}}{(1+\Gamma)^{n}}
  3. 求和得到最坏 p 值把“至少出现 $k$ 个正向票”的组合概率全部相加,得到原假设下可容忍的最大 p 值 $p_{\max}$。
    pmax⁡=∑i=kn(ni)Γi(1+Γ)np_{\max} = \sum_{i=k}^{n} \binom{n}{i} \frac{\Gamma^{i}}{(1+\Gamma)^{n}}

临界Gamma的解读

测谎压力表开始缓缓加压。$\Gamma$ 从 1 往上涨,$p_{\max}$ 这根红线就跟着往上抬。当 $\Gamma$ 增大到某个值时,$p_{\max}$ 恰好越过 0.05 这条“不起诉”线——这个值就是临界 $\Gamma^\star$。它回答的问题非常具体:隐藏帮凶的力量要达到多少倍,才能让陪审团对桶装水的指控从“证据确凿”变成“证据不足”。

临界 $\Gamma$ 越大,说明原结论越难被推翻,因果推断越稳健。经验上:$\Gamma^\star \ge 2$ 被认为是可接受的,$\Gamma^\star \ge 3$ 则相当稳健;若 $\Gamma^\star$ 只比 1 大一点点(比如 1.1),说明任何一个微小的未观测混杂都可能让结论崩盘,这种结论只能算“纸糊的罪名”。反过来,若 $\Gamma^\star$ 达到 3 以上,几乎需要一种荒谬的隐藏力量才能翻案,那么研究者可以理直气壮地宣称:结论对未观测混杂是耐冲击的。

韩青盯着压力表:指针稳稳停在 3.2 的位置才报警。这意味着,隐藏帮凶必须比普通人强出 3 倍以上才能给桶装水翻案——这种剧本太牵强了,案子稳了。

Γ⋆=inf⁡{Γ∈[1,∞):pmax⁡(Γ)>0.05}\Gamma^{\star} = \inf\left\{ \Gamma \in [1, \infty) : p_{\max}(\Gamma) > 0.05 \right\}
$\Gamma^\star$ 是使 $p_{\max}$ 首次突破显著性水平 $\alpha=0.05$ 的最小 $\Gamma$。它是因果结论稳健性的核心输出指标,业界报告标准之一。
  1. 扫描整个区间从 $\Gamma=1$ 开始逐步增大,依次计算每个 $\Gamma$ 下的 $p_{\max}$。
    Γ∈[1,∞)\Gamma \in [1, \infty)
  2. 寻找越线点找到第一个让 $p_{\max}(\Gamma)$ 超过 0.05 的 $\Gamma$,即 p 值从显著变为不显著的分界。
    pmax⁡(Γ)>0.05p_{\max}(\Gamma) > 0.05
  3. 取下确界$\inf$ 保证我们取到的是“最小的那个越线值”,记作 $\Gamma^{\star}$,它就是测谎仪的报警临界值。
    Γ⋆=inf⁡{⋯ }\Gamma^{\star} = \inf\{\cdots\}

敏感性分析的算法流程

破案不能只靠直觉,韩青把整个测谎流程写进了办案手册。第一步,数据预处理:清洗电子病历、补齐缺失协变量,把可能的混杂因素都整理成结构化表格。第二步,构建匹配对:估计倾向得分,用最邻近匹配或卡尺匹配把处理组与对照组配成对,必要时做卡尺带匹配以控制匹配质量。第三步,基础检验:对配对差值做符号检验或 Wilcoxon 符号秩检验,得到 $\Gamma=1$ 时的基准 p 值。第四步,扫描 $\Gamma$:在 $[1, 5]$ 或更宽的网格上遍历 $\Gamma$,每个点重算 $p_{\max}$,寻找穿越 $\alpha$ 的临界值。第五步,绘图与报告:以 $\Gamma$ 为横轴、$p_{\max}$ 为纵轴画出敏感性曲线,标注临界点和 $\alpha$ 参考线。

这套流程的价值在于“可复现的严谨”。任何人拿到报告,都可以沿着同一套工序重新算一遍,确认你的结论没有在某个隐蔽的角落偷偷依赖未观测混杂。报告规范通常要求:给出基准检验的效应量与 p 值,列出 $\Gamma^{\star}$,附上敏感性图,并配一句关键结论:“即使存在使喝水几率翻 3.2 倍的未观测混杂,结论依然保持显著。”

手册写完,韩青把它带出了警局。她发现,这套“帮凶测力机”在药物评审、政策评估、AI 审计的会议室里,远比在案发现场更抢手。

Γgrid={1, 1.1, 1.2, …, Γmax⁡}\Gamma_{\text{grid}} = \{1,\ 1.1,\ 1.2,\ \ldots,\ \Gamma_{\max}\}
$\Gamma$ 网格扫描是算法流程的核心步骤。网格步长越细,$\Gamma^\star$ 定位越精确;实际工作中常用步长 0.1 或 0.05,上限根据问题取 3 到 10 不等。
  1. 确定扫描范围网格从 1 出发,以固定步长递增到预设上限 $\Gamma_{\max}$,覆盖所有值得怀疑的帮凶强度。
    Γgrid={1, 1.1, 1.2, …, Γmax⁡}\Gamma_{\text{grid}} = \{1,\ 1.1,\ 1.2,\ \ldots,\ \Gamma_{\max}\}
  2. 逐点计算 p 上界对网格内每个 $\Gamma$ 值套用 $p_{\max}$ 公式,得到一条单调上升的曲线。
    pmax⁡(Γ)=∑i=kn(ni)Γi(1+Γ)np_{\max}(\Gamma) = \sum_{i=k}^{n}\binom{n}{i}\frac{\Gamma^{i}}{(1+\Gamma)^{n}}
  3. 定位并列报告用二分或线性查找定位 $p_{\max}$ 首次超过 $\alpha$ 的网格点,输出 $\Gamma^{\star}$ 与敏感性图。
    Γ⋆=min⁡{Γ∈Γgrid:pmax⁡(Γ)>α}\Gamma^{\star} = \min\{\Gamma \in \Gamma_{\text{grid}} : p_{\max}(\Gamma) > \alpha\}

实战案例与应用场景

韩青的第一站是药企评审会。某降糖新药在电子病历的真实世界数据里被观察到“显著降低并发症风险”,可患者是否用药是医生和病人商量出来的,病情轻的人更可能规律用药。统计师用 Rosenbaum 敏感性分析给证据做了压力测试:匹配上千对患者后,$p_{\max}$ 直到 $\Gamma=2.6$ 才越线。监管审评专家看到这句话——“需要 2.6 倍以上的未观测混杂才能推翻结论”——才在审批意见上点了头。

第二站是政府智囊团。某市推行“低收入家庭就业补贴”,政策效果评估面临严峻的自选择问题:积极求职的人才去申领补贴。分析师用同样的流程,在匹配样本上做敏感度分析,发现临界 $\Gamma$ 只有 1.4,结论脆弱得像薄冰。报告连夜改写为“政策效果证据不足,建议开展随机试点”,帮财政省下一大笔钱。第三站是韩青最意外的合作——AI 审计师找上门来:大模型招聘工具被投诉“对女性候选人压分”,可简历里性别以外的隐藏特征(如职业空窗期)同时影响性别和评分。审计团队对“性别-录用”的因果效应做敏感度分析,用 $\Gamma$ 扫描判断歧视结论到底站不站得住。

韩青的测力机被三个行业买走了,但她在回程路上想起师傅的叮嘱:任何工具都有盲区。她要写一页“使用须知”,把测力机测不到的角度也列清楚。

τ^HL=median⁡1≤i≤j≤n{di+dj2}\hat{\tau}_{\text{HL}} = \operatorname{median}_{1 \le i \le j \le n}\left\{ \frac{d_i + d_j}{2} \right\}
$\hat{\tau}_{\text{HL}}$ 是 Hodges-Lehmann 估计量,由所有配对差值 $d_i$ 的两两中位数给出,是符号秩检验配套的点估计。实际报告中通常把 $\Gamma$ 扫描区间内 $\hat{\tau}_{\text{HL}}$ 的变化范围一并画出,直观展示结论随帮凶力量增强的衰减过程。
  1. 定义配对差值$d_i$ 是第 $i$ 个匹配对内处理组与对照组的结局差,正值表示处理组更差。
    di=Yi,处理−Yi,对照d_i = Y_{i,\text{处理}} - Y_{i,\text{对照}}
  2. 构造两两平均把任意两个配对差值取平均,得到 $\frac{d_i + d_j}{2}$,用于稳健地概括整体效应方向。
    di+dj2\frac{d_i + d_j}{2}
  3. 取中位数对所有两两平均取中位数,得到不受极端值干扰的效应估计 $\hat{\tau}_{\text{HL}}$。
    τ^HL=median⁡{di+dj2}\hat{\tau}_{\text{HL}} = \operatorname{median}\{\frac{d_i + d_j}{2}\}

方法的边界与局限

帮凶测力机不是万能的。它的第一个盲区:假设只有一个未观测混杂因素在作祟。现实世界的案发现场往往“帮凶成群”——作息、饮食、环境、遗传倾向同时存在,多个 $u$ 相互纠缠,单参数 $\Gamma$ 无法刻画它们的合谋。第二个盲区:$\Gamma$ 只是“分配概率的放大倍数”,它不告诉你混杂因素到底存不存在、影响有多大。一台测力机测出“帮凶力量必须超过 3 倍才翻案”,并不等于“测过了,现场没有帮凶”——它只证明翻案需要多么离奇的剧本。

第三个盲区最容易被忽视:$\Gamma$ 不是效应量。临界值 2.6 不表示“桶装水的危害是真效应的 2.6 倍”,它只描述未观测混杂需要多大的分配不均衡。把两者混为一谈,就像把“嫌疑人的作案时间”和“嫌疑人的作案动机”当成同一个证据,逻辑上站不住脚。另外,测量误差、匹配不完全、模型设定错误也都可能绕过 $\Gamma$ 的监管,让结论以别的方式失真。Rosenbaum 框架的优雅与局限是一体两面:它能做到“最坏情况下的稳健性声明”,却做不到“排除一切阴谋的免责声明”。

韩青把使用须知工工整整贴在了测力机上:它可以测出翻案需要多大的阴谋,却测不出阴谋是否真的存在。知道工具的边界,才配得上工具的锋利。

P(D=1∣X,u)=P(D=1∣X)⇔Γ=1P(D=1 \mid \boldsymbol{X}, u) = P(D=1 \mid \boldsymbol{X}) \quad \Leftrightarrow \quad \Gamma = 1
这个等价关系点明了方法的边界:$\Gamma=1$ 恰好对应“未观测混杂 $u$ 不再影响处理分配”,这是敏感度分析的起点而非终点。真实世界几乎不可能严格满足这一条件,因此分析者只能依赖临界 $\Gamma$ 的大小来权衡结论的可信度,而非追求绝对的证明。
  1. 写出无混杂条件给定所有可观测特征 $\boldsymbol{X}$ 后,隐藏因素 $u$ 不再改变处理分配概率,即 $u$ 对 $D$ 无净影响。
    P(D=1∣X,u)=P(D=1∣X)P(D=1 \mid \boldsymbol{X}, u) = P(D=1 \mid \boldsymbol{X})
  2. 对应到参数空间在这个条件下,匹配对内两人接受处理的几率比恰好为 1,即 $\Gamma$ 回到最小值。
    Γ=1\Gamma = 1
  3. 承认理想化等价式只在模型的单混杂假设下成立,现实数据中的偏离只能通过报告 $\Gamma^{\star}$ 来“量化风险”,无法被彻底消除。
    Γ⋆ 越大,结论对偏离的容忍度越高\Gamma^{\star} \text{ 越大,结论对偏离的容忍度越高}

AI 应用场景

真实世界药物疗效评估

阶段:证据生成与监管审评

解决的问题:观察性医疗数据库(电子病历、医保理赔)中的药物效果对比天然存在“用药适应症混杂”——病情重的患者更可能用新药,而病情本身就是结局的强预测因子。传统做法的倾向得分匹配只能控制已记录变量,审评机构永远会追问:“还有没有没记进病历的因素?”Rosenbaum 敏感度分析把这个问题转化为一个可量化的参数:只需声明临界 $\Gamma$,就能让审评者直观判断证据链有多硬。

具体案例:某医药公司分析 5 万例高血压患者的电子病历,评估新型 ARB 类药物相较老药降低心血管事件的效果。统计团队匹配 3000 对患者,基准 p 值 0.003,而 $p_{\max}$ 直到 $\Gamma=2.8$ 才越过 0.05。报告附上敏感性曲线后,国家药品评审中心的专家在意见书上写道:“未观测混杂需达到 2.8 倍才可翻转结论,证据可接受。”

政策实施效果评估

阶段:因果推断与政策决策支持

解决的问题:政府数据天然是观测数据——是否参加就业培训、是否领取补贴、是否搬迁,都是个人选择的结果。直接对比参与与未参与者的后续收入,会被“动机”这个隐藏变量污染。用 Rosenbaum 敏感度分析,政策分析师能回答:“即使存在一个让参与几率偏倚 1.5 倍的因素,结论还显著吗?”从而把建议从“拍脑袋”升级为“有置信边界的实证结论”。

具体案例:某城市评估“低收入家庭就业补贴”对一年后家庭收入的影响。匹配了 1500 对申领与未申领家庭后,基准效应显著为正,但临界 $\Gamma=1.3$——只需要很小的隐藏偏倚就能推翻结论。评估报告据此建议暂缓推广并启动随机试点,财政因此避免了数亿资金被投入低效项目。

AI招聘模型公平性审计

阶段:模型审计与负责任 AI 治理

解决的问题:AI 招聘模型被指控性别歧视,但训练数据里的性别与职业空窗期、毕业院校、过往薪资等隐藏特征高度缠绕。审计方要在“模型决策差异”与“社会结构性混杂”之间做因果切割。Rosenbaum 敏感度分析提供了一种可辩护的审计语言:对“性别→录用”的配对比较做 $\Gamma$ 扫描,若临界 $\Gamma$ 很低,说明歧视结论脆弱,不能轻易给模型定罪;若临界 $\Gamma$ 很高,则审计报告可用“未观测混杂需极端强度才能解释差异”来支撑整改要求。

具体案例:某大型招聘平台被投诉模型压低女性简历评分。第三方审计团队将候选人在年龄、学历、技能标签上精确匹配成 800 对,仅性别不同。基准 Wilcoxon 检验显示评分差异显著,但敏感性分析给出 $\Gamma^{\star}=1.2$。审计结论改为“存在歧视嫌疑,但证据强度不足,建议补充结构化面试数据后再判定”,避免了过度指控带来的法律误伤。

Python 演示

python46 行
# -*- coding: utf-8 -*-"""Rosenbaum敏感度分析:评估未观测混杂对配对数据结论的冲击"""from math import comb  def pmax(gamma, total, pos):    """在给定Gamma下,符号检验单侧p值的上界."""    return sum(comb(total, i) * (gamma ** i) / ((1 + gamma) ** total)               for i in range(pos, total + 1))  def find_critical_gamma(total, pos, alpha=0.05, step=0.01, gmax=6.0):    """从Gamma=1扫描到gmax,返回p值首次超过alpha的Gamma临界值."""    g = 1.0    while g <= gmax:        if pmax(g, total, pos) > alpha:            return round(g, 2)        g += step    return None  def main():    # 模拟20个匹配对,其中15对处理组结局更差    total, pos = 20, 15    p0 = pmax(1.0, total, pos)    gstar = find_critical_gamma(total, pos)     print(f"匹配对数: {total}, 正向对数: {pos}")    print(f"无混杂(Gamma=1)时符号检验p值: {p0:.4f}")    if gstar is not None:        print(f"临界Gamma: {gstar:.2f} (超过此值结论失守)")    else:        print(f"在Gamma<=6.0范围内结论始终稳健")     print("\nGamma扫描表:")    print("Gamma    p上界     结论")    g = 1.0    while g <= 5.0 + 1e-9:        p = pmax(g, total, pos)        flag = "稳健" if p < 0.05 else "脆弱"        print(f"{g:5.2f}  {p:8.4f}  {flag}")        g += 0.5  if __name__ == "__main__":    main()
目的:实现 Rosenbaum 敏感度分析的核心计算——给定匹配对总数与正向对数,扫描 Γ 得到符号检验 p 值上界曲线,并输出使结论翻转的临界 Γ。
  1. def pmax(gamma, total, pos):核心函数,实现 $p_{\max} = \sum_{i=k}^{n}\binom{n}{i}\Gamma^{i}/(1+\Gamma)^{n}$,逐项累加组合概率。
  2. comb(total, i) * (gamma ** i) / ((1 + gamma) ** total)每一项是“恰好出现 i 个正向票”在未观测混杂限制下的最坏概率。
  3. for i in range(pos, total + 1)从观测到的正向对数 k 累加到总对数 n,对应“至少 k 个正向票”的单侧检验。
  4. find_critical_gamma(total, pos, alpha=0.05, step=0.01, gmax=6.0)以 0.01 步长在 [1, 6] 上扫描,返回 p 值首次越过 0.05 的 Γ。
  5. while g <= gmax:线性扫描网格;实际工程中可改用二分查找将复杂度从 O(网格数×n) 降到 O(log 网格×n)。
  6. p0 = pmax(1.0, total, pos)Γ=1 时退化为经典二项检验,是敏感度曲线的基准 p 值。
  7. flag = "稳健" if p < 0.05 else "脆弱"用 0.05 显著性线划分稳健区与脆弱区,对应可视化演示中的红绿状态。

常见误区

误区我看到敏感性分析的 Γ 是 2.3,也就是说存在 2.3 倍的混杂,那我这个结论是不是就废了?是不是必须 Γ=1 才有效?

正解Γ=1 是“完全没有未观测混杂”的理想情形,现实观察研究几乎不可能达到。Γ=2.3 的真实含义是:未观测混杂需要把处理分配几率放大 2.3 倍才能推翻结论——这通常被认为相当稳健,反而是结论的加分项。判断标准不是“Γ 是否等于 1”,而是“临界 Γ 是否足够大”:一般认为 2 以上可接受,3 以上较稳健,低于 1.5 才需要警惕。它衡量的是翻案难度,而不是罪证本身。

为何常见:初学者容易把参数 Γ 误解为“已存在的偏倚量”,把它当成一个负面事实。实际上 Γ 是一个假设压力值,敏感性分析回答的是“压力加到多大结论才垮”,不是“现在压力有多大”。

误区我做完了 Rosenbaum 敏感性分析,临界 Γ 达到了 3.5,这下可以放心地说“我们的研究没有未观测混杂”了。

正解临界 Γ=3.5 只说明一件事:需要强度极高的未观测混杂才能翻转结论。它不提供任何证据证明混杂“不存在”——可能现场确实有一个强度 2.8 的混杂在起作用,只是恰好没翻案。敏感性分析是“最坏情况压力测试”,它的结论是“结论能承受多大冲击”,而不是“没有冲击”。

为何常见:人天性倾向于把“抗压能力强”解读为“永远不会被压垮”。工具的本质是量化阈值而非探测事实,这一点容易被焦虑的论文写作者自觉或不自觉地忽略。

误区论文里写着临界 Γ=2.8,那我报告处理效应时是不是应该写“效应量 2.8 倍”?甚至说桶装水的危害是普通水的 2.8 倍?

正解Γ 是“处理分配几率比的上界”,属于偏倚参数,跟结果变量上的效应量完全是两码事。效应量说的是结局变化幅度(如健康评分差多少分),Γ 说的是“隐藏因素让某人喝水的几率翻几倍”。2.8 倍混杂能力不等于 2.8 倍危害,把两类参数混为一谈会写出实质错误的结论。

为何常见:两者都叫“倍数”,都在敏感性图里出现,语言上的相似性误导了直觉。统计术语的精确性就在于:同样是“倍”,一个作用在分配机制上,一个作用在结局规模上。

误区我做一个多变量回归分析,不加配对,也在结果里塞了个 Γ 上去,这总没问题吧?

正解Rosenbaum 敏感性分析建立在匹配对结构之上:每对一处理一对照,组内同质,检验统计量基于对内的方向差。直接套用到未配对的多变量回归上,既没有“对内部”的分配几率比,也没有对应的二项分布基础,公式中的 n 和 k 无从定义,结果没有数学依据。回归场景有它自己的敏感度工具(如 E-value),但不该把 Rosenbaum 公式生搬硬套。

为何常见:初学者看到“敏感性分析”四个字就以为是一把万能钥匙,忽略它依赖的具体实验设计。任何一个统计方法都绑定前提假设,脱离结构谈公式是教科书里最常见的翻车点。

误区敏感性曲线上的 p_max 曲线就是我的结论在不同混杂强度下的真实 p 值,我可以直接读曲线上 Γ=2 时 p=0.23 作为实际显著性。

正解p_max 是最坏情况下的上界,真实 p 值永远不超过它,但可能远低于它。当 Γ=2 时 p_max=0.23 只意味着“即使混杂使分配几率偏到上限,p 值也不可能超过 0.23”,实际 p 值可能仍是 0.03。报告时应该明确说“p 值上界”,而不是不严谨地说“p 值为 0.23”。

为何常见:曲线画得很直观,看图的读者天然把那条线当成“真实曲线”。敏感性分析给出的是置信区间式的最坏情景包络,不是点估计路径,这是区间思维与点思维的又一次碰撞。

面试题

Q1. Rosenbaum 敏感性分析主要用于评估哪种威胁?

单选题 · easy

  • A.测量误差和记录缺失
  • B.未观测混杂的冲击← 正确答案
  • C.样本量不足和抽样偏
  • D.模型过拟合和欠拟合

答案:B。Rosenbaum 敏感性分析专门量化“未观测混杂因素要多强才能推翻结论”,对应本案中的“隐藏帮凶测力机”。测量误差、样本量与过拟合由其他诊断方法负责,不是该方法的用武之地。

Q2. 在 Rosenbaum 框架中,Γ=1 的含义是什么?

单选题 · easy

  • A.效应量大小为 1
  • B.存在不可忽略的混杂
  • C.未观测混杂不扰动分配← 正确答案
  • D.匹配对样本量恰为 1

答案:C。Γ=1 时,匹配对内两人接受处理的几率比上限为 1,等价于处理分配不受未观测混杂影响,回到随机实验的理想状态。它描述的是分配机制而非效应大小,更不是样本量。

Q3. 临界 Γ 指的是哪个特殊位置的取值?

单选题 · easy

  • A.p 值恰好最小时的 Γ
  • B.效应量达到最大时
  • C.p 值上界穿越 α 线的点← 正确答案
  • D.置信区间最窄处

答案:C。临界 Γ 定义为 $p_{\max}$ 首次超过显著性水平 α(通常 0.05)时的 Γ 值。它是敏感性分析最核心的输出指标,标志着结论从“稳健区”转入“脆弱区”,也是本案测谎仪报警的位置。

Q4. 敏感性分析曲线通常以什么为横轴和纵轴?

单选题 · mid

  • A.样本量对效应量
  • B.Γ 值对 p 值上界← 正确答案
  • C.时间对累积病例数
  • D.混杂强度对匹配率

答案:B。标准敏感性图横轴为 Γ(1 到 4.5 或 5),纵轴为 $p_{\max}$(0 到 1),叠加 α=0.05 水平线。曲线与水平线的交点在横轴上的读数就是临界 Γ,这正是本文可视化演示所绘制的图形。

Q5. 当 Γ 从 1 逐渐增大时,p 值上界的变化趋势是?

单选题 · mid

  • A.单调下降趋于 0
  • B.先升后降波浪状
  • C.始终水平保持不变
  • D.单调上升直至趋近 1← 正确答案

答案:D。$p_{\max} = \sum_{i=k}^{n}\binom{n}{i}\Gamma^i/(1+\Gamma)^n$ 中,$\Gamma^i$ 给高票项加权,随着 Γ 增大,尾部概率越来越重,p 值上界单调上升并趋近 1。隐藏帮凶越强,原结论越不牢固。

Q6. 经验法则中,临界 Γ 达到多少通常被认为结论相当稳健?

单选题 · mid

  • A.0.8 左右
  • B.1.0 左右
  • C.3.0 左右← 正确答案
  • D.15 以上

答案:C。学界惯例是临界 Γ 达到 2 可接受、达到 3 相当稳健。1.0 是理想边界,真实研究几乎达不到;0.8 比 1 还小没有意义;15 属于苛求,绝大多数真实现象达不到也不需要。

Q7. 为什么 Rosenbaum 敏感性分析必须依赖匹配对结构?

单选题 · hard

  • A.匹配后样本量自然扩大
  • B.匹配能消除全部偏倚
  • C.对内分配几率比才有定义← 正确答案
  • D.匹配对可使数据变正态

答案:C。Rosenbaum 公式里的概率上界是“匹配对内两人接受处理几率之比”,只有存在同质配对,$\pi_a$ 与 $\pi_b$ 的比值才有明确意义,符号检验的二项基础才成立。没有配对结构,n 和 k 无从定义,整个公式就失去了根基。

Q8. 关于 Rosenbaum 敏感性分析的局限性,哪些说法正确?

多选题 · mid

  • A.只刻画单一未观测混杂← 正确答案
  • B.能精确估计混杂大小
  • C.Γ 不是结果效应量← 正确答案
  • D.可完全排除模型设定错误

答案:AC。该框架假设单一隐藏因素 u,无法刻画多混杂“合谋”;Γ 是分配几率比上界而非结局效应量。它不能测出混杂真实大小(排除 B),也不能豁免测量误差与模型错误(排除 D)。

Q9. 对 p 值上界公式的正确理解包括哪些?

多选题 · hard

  • A.Γ=1 时退化为二项检验← 正确答案
  • B.Γ=1 时公式失去意义
  • C.它是随机化检验的精确结果
  • D.它是真实 p 值的最坏上界← 正确答案

答案:AD。代入 Γ=1,$\Gamma^i/(1+\Gamma)^n = 1/2^n$,公式恰为经典二项单侧检验,故 A 对、B 错。它不是真实 p 值也不是精确随机化值,而是向未观测混杂屈服后的最坏情况上界,故 C 错、D 对。

Q10. 某研究计算出临界 Γ=1.3,正确的解读是什么?

多选题 · extreme

  • A.结论属于相当稳健一类
  • B.很小的混杂即可推翻结论← 正确答案
  • C.效应量为真实值的 1.3 倍
  • D.结论脆弱需谨慎措辞← 正确答案

答案:BD。临界 Γ 仅略高于 1,意味着只要未观测混杂令分配几率偏到 1.3 倍,p 值就越线,结论极其脆弱。Γ 是偏倚参数而非效应量,故 C 错;1.3 远低于 2 的稳健线,A 错,D 对。