如果你是一所高中的校长,想验证新推的「晨读晚练」教学法到底有没有用,你会怎么做?最省事的办法是看期末成绩:试点班平均分高出 15 分,结论似乎呼之欲出。可你心里清楚,这个班本来就是年级选拔出来的尖子班——他们基础更好、习惯更好、家庭支持更多。就算不试点,他们大概率还是考第一。想从这种“先进去的人本来就特别”的数据里读出真实效果,直接比较是行不通的。 统计学家给出的解法很浪漫:给每个试点学生找一个「影子双胞胎」——一个在成绩、习惯、家境等方方面面几乎一样、唯独没接受教学法的学生。但人不是乐高积木,多维特征完全相同的两个人几乎不存在。于是倾向得分匹配(PSM)登场了:它把一堆特征压缩成一个「相似度指纹」——接受处理的概率,然后让指纹相近的人结对比较,让观察性研究尽力模拟随机实验的效果。本文就沿着这个故事,拆解 PSM 的来龙去脉。

岗位关联

PSM 是从观察性数据中逼近因果效应的经典武器。掌握它,你就具备了政策评估、医学研究和商业归因中处理选择偏差的硬核能力,是 AI 从业者理解因果推断的必修课。

目录
  1. 可视化演示
  2. 问题背景
  3. 潜在结果框架
  4. 倾向得分定义
  5. 得分计算
  6. 匹配方法
  7. 匹配后检验
  8. 实际应用
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示倾向得分匹配流程(处理组与对照组按e(x)配对)、协变量平衡性检验(匹配前后SMD对比)、以及ATT估计与反事实推断,交互切换三种模式探索因果匹配方法。

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

'+CAPS.mode1+'

问题背景

假定你是某所高中的校长。新学期你力推「晨读晚练」新教学法,挑了高二的一个班试点,期末把试点班和普通班的平均分一摆:试点班高出 15 分。正当你准备开庆功会时,教务主任泼来冷水——试点班本来就是分班考试的前 40 名,他们的基础、习惯、家庭支持都强一大截。就算不试点,他们照样考得好。直接比平均分,就像让姚明和普通人比摸高,然后断言“巨人症患者弹跳力惊人”,把天赋误当成了训练效果。

这种“先进去的人本来就特别”的现象,在统计里叫选择偏差,它广泛存在于观察性研究——我们只能“看”而不能“干预”的数据场景。医学里,吃某保健品的人本来就更注重健康;商业里,买会员的人本来就更爱消费。想从这样的数据里读出因果,第一步就是直面选择偏差。

问题是,因果效应的定义天然要求“同时看到两个世界”:同一个学生,既要知道他参加教学法的成绩,又要知道他不参加时的成绩。可现实里他只能走一条路,没走的那条路的结果永远缺失,这就是反事实难题。随机化实验之所以被奉为金标准,是因为随机分组让处理组和对照组在期望意义上完全相同——但很多场景根本无法随机。

所以校长真正需要的,不是两个人数相等的班级,而是一批“影子双胞胎”——每个试点班学生都有一个特征几乎一致却未试点的对照者。这正是 PSM 的出发点。

τi=Yi(1)−Yi(0)\tau_i = Y_i(1) - Y_i(0)
这个式子是因果推断的“初心”:个体 i 的因果效应,等于他接受处理的结果减去他不接受处理的结果。可惜两个结果永远只能看见一个。
  1. 两个平行世界的结果$Y_i(1)$ 是学生 i 参加教学法后的成绩,$Y_i(0)$ 是不参加时的成绩,二者合称潜在结果。
    Yi(1), Yi(0)\displaystyle Y_i(1),\ Y_i(0)
  2. 个体因果效应参加与不参加的成绩之差,就是教学法对这个学生的真实效果,是所有因果推断都想逼近的目标量。
    τi=Yi(1)−Yi(0)\displaystyle \tau_i = Y_i(1) - Y_i(0)
  3. 反事实不可观测现实中观测结果等于处理指示变量挑选出的那个潜在结果,缺失的另一半就是反事实,正是难点所在。
    观测值=Di⋅Yi(1)+(1−Di)⋅Yi(0)\displaystyle \text{观测值} = D_i \cdot Y_i(1) + (1 - D_i) \cdot Y_i(0)

潜在结果框架

校长试着招募“影子”,却发现即使是同卵双胞胎也会有细微差别:一个爱吃辣,一个不吃;一个选文科,一个选理科。既然个体层面永远找不到完美的“双世界对照”,那就退一步——我们不看单个学生,看平均。这正是潜在结果框架(Rubin 因果模型)的核心思想:把“谁吃了药、谁没吃药”抽象成二值处理变量 D(1 为处理组,0 为对照组),每个人的结果都是处理状态的函数。

框架里,处理组就是实际接受了教学法的那群学生,对照组是没接受的。虽然单个人的反事实结果缺失,但我们可以比较两组总体的平均表现差。然而,直接算 E[Y|D=1] − E[Y|D=0] 得到的平均值里,混进了“尖子班天生更强”的杂质——这是因为两组学生的协变量分布根本不同,就像拿苹果和橘子比甜度。

为了把杂质滤掉,框架提供了两个更精细的目标量:平均处理效应(ATE)回答“如果所有人都被处理,相比所有人都不被处理,平均多收获多少”;处理组效应(ATT)只关心“实际接受了处理的那群人”从处理中获得的平均收益。政策评估中更常报告 ATT,因为决策者关心的是“我送去培训的人到底赚了多少”。

可惜,现实中我们看到的 $E[Y(1)|D=1] - E[Y(0)|D=0]$ 里,两组人的“底色”并不相同。要滤掉杂质,就得知道每个学生进入试点班的概率——下一节,校长将请出“倾向得分”这台过滤器。

τATE=E[Yi(1)]−E[Yi(0)]\tau_{ATE} = E[Y_i(1)] - E[Y_i(0)]
ATE 把个体因果效应在全体上取平均。期望算子就像“全校平均分”——抹平个体差异,给出总体层面的答案。
  1. 期望算子 E将全体个体的潜在结果取平均,抹平个体噪声,得到总体层面的平均水平。
    E[⋅]\displaystyle E[\cdot]
  2. 潜在结果之差$Y_i(1) - Y_i(0)$ 是同一个体接受与不接受处理的差值,先求差再平均,顺序不能颠倒。
    E[Yi(1)−Yi(0)]\displaystyle E[Y_i(1) - Y_i(0)]
  3. 线性展开期望是线性算子,ATE 等价于“处理组潜在结果均值”减“对照组潜在结果均值”。
    E[Y(1)]−E[Y(0)]\displaystyle E[Y(1)] - E[Y(0)]

倾向得分定义

校长恍然大悟:要找影子双胞胎,不一定要在每个维度上都一模一样,只要他们“进入试点班的概率”一样就行。这就像查指纹——不需要把一个人的身高、体重、鞋码、发型全部列出,一个指纹号码就足以锁定身份。倾向得分就是这个“相似度指纹”:它把成绩、习惯、家境等一堆协变量,压缩成一个 0 到 1 之间的分数。

形式化地说,倾向得分 $e(X)$ 是给定一组可观测协变量 X 时,个体接受处理的概率。有了这个分数,多维匹配的“维度灾难”瞬间化为乌有:我们不再需要在高维空间里找邻居,只需要在一维数轴上比大小。这也带来巨大的工程便利——原本“相似”难以定义,现在“分数差多少”清晰可算。

为什么指纹相似就够?因为可忽略性假设(无混淆假设)保证:如果处理分配只由已观测协变量决定,那么倾向得分相同的个体,其协变量分布也相同。这好比两朵形状完全相同的云——尽管微观水滴各异,宏观上却可以互为镜像。换句话说,得分相同的两个人,一个被送进处理组、一个留在对照组,几乎等价于随机抛硬币。

有了指纹,校长只需做一件事:让指纹接近的学生两两结对。至于这个指纹怎么算出来——就是逻辑回归的表演时间了。

e(Xi)=P(Di=1∣Xi)e(X_i) = P(D_i = 1 \mid X_i)
倾向得分不是“结果”,而是“进入处理组的概率”。它把多维特征压缩成一维号码,号码越接近的人越有资格互为影子。
  1. 协变量向量 X记录每个学生的可观测特征,如入学成绩、自习时长、家庭收入,这是制作指纹的原料。
    X=(X1, X2, ⋯ , Xk)\displaystyle X = (X_1,\ X_2,\ \cdots,\ X_k)
  2. 条件处理概率在已知特征 X 的前提下,这个学生有多大可能被分入处理组,这是倾向得分的本质。
    P(Di=1∣Xi)\displaystyle P(D_i = 1 \mid X_i)
  3. 压缩成一维分数倾向得分把多维特征映射到 0 到 1 的一个数,得分相同意味着协变量分布相同。
    e(Xi)=P(Di=1∣Xi)\displaystyle e(X_i) = P(D_i = 1 \mid X_i)

得分计算

校长委托统计老师设计“指纹采集器”。统计老师翻了翻档案,发现进入试点班的概率主要受三个因素影响:入学排名、每晚自习时长、是否请过家教。把这些变量喂给逻辑回归,就能输出每个学生 0 到 1 之间的处理概率。逻辑回归先把特征做线性组合,再用 S 型函数把任意实数压进 (0,1) 区间,输出天然可以解读为“概率”。

系数的大小反映了该特征对“是否进试点班”的影响程度:如果“入学排名”的系数很大,说明尖子生进试点班的概率被它强力推高——这正是选择偏差的来源。因此 PSM 实践中常先做变量筛选,指纹的清晰度取决于原料质量:漏掉重要协变量,指纹就会失真。

算完得分,还必须检查“重叠假设”:处理组与对照组的得分分布要有足够的公共区域,即共同支撑域。如果某类学生的得分直逼 1 或 0,说明他们几乎没有对手方——就像全校都找不到“影子”的独苗学生,强行配对反而是灾难。实践中会用修剪法先丢掉得分没有重叠的个体,再进入匹配环节。

指纹采集完毕,每个学生头上都顶着一个 0 到 1 的号码。接下来是“对号入座”的匹配环节——校长要选一种配对方式:是找最像的,找够像的,还是按权重综合比较。

e(X)=11+e−(β0+β1X1+⋯+βkXk)e(X) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k)}}
这是逻辑回归的经典表达式:先给每个特征加权求和,再用 S 型函数压缩成概率。输出就是每个学生的倾向得分指纹。
  1. 线性组合打分每个特征乘上权重后求和,再加上截距,刻画特征推动“进入试点班”的总趋势。
    z=β0+β1X1+⋯+βkXk\displaystyle z = \beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k
  2. S 型函数压缩logistic 函数把任意实数 z 压到 (0,1) 区间,保证输出可以当作概率使用。
    11+e−z\displaystyle \frac{1}{1 + e^{-z}}
  3. 逻辑回归输出两部分结合后,模型输出的就是每个学生接受处理的概率,即倾向得分估计值。
    e(X)=11+e−(β0+β1X1+⋯+βkXk)\displaystyle e(X) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k)}}

匹配方法

现在校长手里有一串 0 到 1 的号码:试点班 8 个号,普通班 12 个号。最朴素的配对,是给每个试点班学生找一个号码最接近的普通班学生——这叫最近邻匹配。它直观、计算快,是 PSM 最常用的默认选项,就像给每个孩子指定一个“同桌影子”。

但“最接近”也可能太远:假如试点班某学生得分 0.95,而普通班离他最近的人只有 0.55,硬凑一对就像让北极熊和企鹅当双胞胎。于是引入卡尺匹配:规定匹配对象的得分差不得超过某个阈值(如 0.05 或 0.02 倍标准差),超过就放弃匹配。卡尺越小,配对质量越高,但被放弃的样本也越多——这是质量与数量的博弈。

除了最近邻和卡尺,还有核匹配:不锁定单一对象,而是把所有对照按得分距离加权,合成一个“虚拟影子”,权重由核函数决定,距离近的权重大。此外匹配比例也可调节:1:1 偏差最小但样本利用少;1:2 或 1:4 能保留更多样本,却会掺入“远房亲戚”抬高偏差。还可以组合无放回、有放回等策略,实践中要按样本量权衡。

无论用哪一招,配对都只是手段而非终点。就像校长不能看一眼影子就宣布胜利——他还得检查配出来的“双胞胎”是否真的长得像,这就要进入匹配后的体检环节。

j(i)=arg⁡min⁡j∈C∣ei−ej∣j(i) = \arg\min_{j \in C} |e_i - e_j|
最近邻匹配的数学表达:在对照组候选池 C 里,为处理组个体 i 挑出倾向得分距离最小的那个人当影子。
  1. 候选对照组集合C 表示全体未接受处理的个体,这是匹配影子的候选池。
    C={j∣Dj=0}\displaystyle C = \{ j \mid D_j = 0 \}
  2. 倾向得分距离$|e_i - e_j|$ 衡量两个学生“相似度指纹”的接近程度,距离越小越像影子双胞胎。
    ∣ei−ej∣\displaystyle |e_i - e_j|
  3. 取距离最小者arg min 表示在候选池中挑出使距离最小的对照个体,作为 i 的影子。
    j(i)=arg⁡min⁡j∈C∣ei−ej∣\displaystyle j(i) = \arg\min_{j \in C} |e_i - e_j|

匹配后检验

校长把配对结果拿给统计老师验收。统计老师不急着算平均分,而是先做“双胞胎体检”:比较每一对影子在入学成绩、自习时长、家教背景上是否真的接近。如果匹配后两组在这些变量上仍有天壤之别,说明匹配是失败的——影子压根不像,后面的平均分比较也就没有意义。

体检指标是标准化差异:两组均值之差除以合并标准差。经验法则是:绝对值小于 0.1 视为平衡良好,大于 0.2 则拉响警报。与 t 检验不同,标准化差异不随样本量膨胀——样本再大也不会“假装平衡”,它只老老实实地回答“两组像不像”。

通过体检后,才轮到效应估计:将每个处理组个体的结果减去其影子对照组的结果,再取平均,得到 ATT。这个数值才是“新教学法对被送去试点的学生平均多拉高了多少分”的可信答案。若体检不达标,就需要回头调整匹配方法、更换卡尺或重新筛选协变量,直到影子真的像为止。

体检合格,校长终于敢拿着结论去开庆功会了。而统计老师把相同的方法打包,送去了更广阔的天地——政策、医学与商业的舞台上,还有无数个“校长”在等同一个答案。

d=xˉT−xˉC(sT2+sC2)/2d = \frac{\bar{x}_T - \bar{x}_C}{\sqrt{(s_T^2 + s_C^2)/2}}
标准化差异是“双胞胎相似度”的客观尺子:两组均值差距越小、组内波动越接近,d 越趋近 0,说明平衡越好。
  1. 均值之差匹配后处理组与对照组在某个协变量上的均值差异,趋近 0 说明该变量已经被平衡好。
    xˉT−xˉC\displaystyle \bar{x}_T - \bar{x}_C
  2. 合并标准差取两组方差的平均再开根号,作为分母把差异无量纲化,让不同量纲的变量共用一把尺。
    sT2+sC22\displaystyle \sqrt{\frac{s_T^2 + s_C^2}{2}}
  3. 平衡判定规则标准化差异的绝对值小于 0.1 视为平衡良好,说明影子双胞胎“长得够像”。
    d=xˉT−xˉC(sT2+sC2)/2\displaystyle d = \frac{\bar{x}_T - \bar{x}_C}{\sqrt{(s_T^2 + s_C^2)/2}}

实际应用

校长的故事落幕,但方法登台。PSM 的本质是一个朴素的承诺:但凡我们能观测到影响“是否被处理”的关键特征,就能用倾向得分制造一场“事后随机化”,让比较变得公平。它不完美,却足够实用,因此在三类场景中成为标配。

政策评估中,地方政府想知道就业培训是否真的提高了失业者收入——参加培训者往往本就更有求职动力,直接用前后收入差会高估效果。分析师用年龄、学历、失业时长做倾向得分,给每个参训者匹配一个“没参训的影子”,估算出培训的真实 ATT。医学研究中,电子病历里“用了他汀的患者”和“没用药的人”病情轻重不一,研究团队用 PSM 平衡合并症、血压、血脂后,再比较五年心血管事件率。

商业决策里,电商平台给高活跃用户发会员券,可高活跃本身就会带来高复购,无法归因于券。增长分析师把不活跃用户中“行为最像”的找出来当镜子,评估券对复购的真实拉动。需要提醒的是:PSM 只能控制可观测协变量,无法消除未观测混杂;使用前要检查重叠,使用后要检查平衡。技术的价值不在于万能,而在于知道边界。

如果校长再开办一所新学校,他一定会让统计老师先把 PSM 跑起来——不是为了证明教学法“有效”,而是为了在无数干扰因素中,诚实地说出那 15 分里到底有多少是教学法挣来的。数据会撒谎,方法帮我们听出真话。

τATT=1NT∑i:Di=1[Yi−Yj(i)]\tau_{ATT} = \frac{1}{N_T} \sum_{i: D_i = 1} \left[ Y_i - Y_{j(i)} \right]
ATT 估计量:对每个实际接受处理的人,用他匹配到的影子结果替代反事实,差值取平均,就是处理组的平均因果效应。
  1. 只对处理组求和累加只在实际接受处理($D_i = 1$)的个体上进行,对应 ATT 的定义范围。
    ∑i:Di=1[Yi−Yj(i)]\displaystyle \sum_{i: D_i = 1} \left[ Y_i - Y_{j(i)} \right]
  2. 影子替代反事实$Y_{j(i)}$ 是匹配出的对照组个体结果,充当“未处理世界里 i 会怎样”的替身。
    Yj(i)=Y^i(0)\displaystyle Y_{j(i)} = \hat{Y}_i(0)
  3. 取平均得 ATT除以处理组人数 $N_T$,得到实际受处理者的平均因果效应,即教学法真实挣来的分数。
    τATT=1NT∑i:Di=1[Yi−Yj(i)]\displaystyle \tau_{ATT} = \frac{1}{N_T} \sum_{i: D_i = 1} \left[ Y_i - Y_{j(i)} \right]

AI 应用场景

政策评估:就业培训补贴值不值

阶段:因果推断与反事实分析

解决的问题:政府想评估“就业技能培训”是否提高了学员收入,但报名者本就更有求职意愿和学历优势,直接对比参训者与未参训者的收入会严重高估效果,补贴决策可能被假象误导。

具体案例:某市人社局将 3000 名参训者与 12000 名未参训者做 PSM,用年龄、学历、失业时长、技能证书数作为协变量估计倾向得分,执行 1:1 最近邻匹配并检验标准化差异均小于 0.1,最终估算出培训使月收入平均提高约 600 元,据此决定下一年度补贴规模。

医学研究:电子病历里的用药疗效

阶段:回顾性队列因果分析

解决的问题:真实临床数据中,用某种药的患者往往合并症更多、病情更重,直接比较用药组与未用药组会低估甚至颠倒药效,无法支撑循证决策。

具体案例:研究团队从电子病历库抽取 5000 名他汀用药者和 20000 名未用药者,以年龄、血压、血脂、糖尿病史、吸烟史为协变量计算倾向得分,卡尺匹配后两组基线完全平衡,再比较五年心血管事件发生率,为临床指南提供观察性证据。

商业决策:会员券的真实拉动

阶段:用户增长反事实评估

解决的问题:电商平台给高活跃用户发会员券,但高活跃本身就会带来高复购,无法判断复购率提升是券的功劳还是用户自身的行为惯性,营销预算可能被无效投放。

具体案例:某电商对 20 万发券用户与 80 万未发券用户,按历史消费频次、客单价、近 30 天活跃度做倾向得分匹配,匹配后计算券用户的复购率增量,发现券的真实拉动仅为表面数字的三分之一,于是调整了投放人群策略。

Python 演示

python73 行
# -*- coding: utf-8 -*-"""倾向得分匹配的简单实现"""import numpy as npfrom sklearn.linear_model import LogisticRegression  def estimate_ps(X, D):    """用逻辑回归估计倾向得分"""    model = LogisticRegression(max_iter=1000)    model.fit(X, D)    return model.predict_proba(X)[:, 1]  def nearest_neighbor_match(ps_t, ps_c):    """最近邻匹配, 为每个处理组找得分最近的对照"""    matches = []    used = set()    for i, p in enumerate(ps_t):        dists = np.abs(ps_c - p)        for j in np.argsort(dists):            if j not in used:                used.add(j)                matches.append((i, j))                break    return matches  def att_estimate(Y_t, Y_c, matches):    """估计处理组的平均处理效应 ATT"""    diffs = [Y_t[i] - Y_c[j] for i, j in matches]    return float(np.mean(diffs))  def standardized_diff(X, idx_t, idx_c):    """计算两组在各协变量上的标准化差异"""    diffs = []    for k in range(X.shape[1]):        xt = X[idx_t, k]        xc = X[idx_c, k]        pooled = np.sqrt((np.var(xt) + np.var(xc)) / 2.0)        diffs.append(abs(xt.mean() - xc.mean()) / pooled)    return np.array(diffs)  if __name__ == "__main__":    np.random.seed(42)    n = 400    # 可观测协变量: 年龄, 收入    age = np.random.normal(35, 10, n)    income = 8000 + age * 100 + np.random.normal(0, 500, n)    X = np.column_stack([age, income])    # 处理分配受协变量影响, 存在选择偏差    p = 1 / (1 + np.exp(-(-2 + 0.05 * age + 0.0002 * income)))    D = np.random.binomial(1, p)    # 潜在结果: 处理有真实效果 200    Y = 500 + age * 3 + D * 200 + np.random.normal(0, 50, n)     ps = estimate_ps(X, D)    idx_t = np.where(D == 1)[0]    idx_c = np.where(D == 0)[0]    ps_t, ps_c = ps[idx_t], ps[idx_c]     matches = nearest_neighbor_match(ps_t, ps_c)    matched_t = [idx_t[i] for i, _ in matches]    matched_c = [idx_c[j] for _, j in matches]     naive = Y[idx_t].mean() - Y[idx_c].mean()    att = att_estimate(Y[idx_t], Y[idx_c], matches)     print("朴素估计(有偏差):", round(naive, 2))    print("PSM 估计 ATT    :", round(att, 2))    print("匹配前标准化差异:", standardized_diff(X, idx_t, idx_c).round(3))    print("匹配后标准化差异:", standardized_diff(X, matched_t, matched_c).round(3))
目的:合成一份存在选择偏差的观察性数据(真实处理效应为 200),用逻辑回归估计倾向得分,执行最近邻匹配后估计 ATT,并对比匹配前后的协变量平衡性。
  1. model = LogisticRegression(max_iter=1000)构建逻辑回归分类器,用来估计每个样本的倾向得分。
  2. return model.predict_proba(X)[:, 1]返回预测概率矩阵的第二列,即接受处理的概率。
  3. matches.append((i, j))把处理组个体 i 和对照个体 j 的配对关系记入列表,形成影子双胞胎。
  4. diffs = [Y_t[i] - Y_c[j] for i, j in matches]计算每一对影子的结果差,作为个体因果效应的估计。
  5. return float(np.mean(diffs))所有配对差值取平均,得到处理组平均效应 ATT 的估计值。
  6. pooled = np.sqrt((np.var(xt) + np.var(xc)) / 2.0)计算合并标准差,用作标准化差异的分母。
  7. p = 1 / (1 + np.exp(-(-2 + 0.05 * age + 0.0002 * income)))人为构造“进组概率受协变量影响”的选择偏差。

常见误区

误区“用了 PSM 就等于做了随机实验,连没测到的变量也被自动平衡掉了。”

正解PSM 只能平衡已纳入模型的协变量。影子双胞胎只看得见身高体重和成绩单,看不见性格、基因和运气;如果存在影响处理分配却没被观测的变量,匹配后的估计依然有偏。随机实验的“随机”处理了所有混杂,PSM 只是尽力模拟,不能继承全部性质。

为何常见:倾向得分看起来像“随机化工具”,人们容易把“模拟随机”误解为“等于随机”。

误区“1:1 匹配浪费样本,用 1:4、1:5 把对照组全用上,样本大了估计才准。”

正解匹配比例增加会引入更多“远房亲戚”——得分差距大的对照被拉进来当影子,偏差随之上升。样本量增加只降低方差,却可能牺牲偏差。常见做法是 1:1 或 1:2,并在增加比例时观察平衡性是否仍然达标。

为何常见:人们习惯性地把“样本量越大越好”从统计推断的直觉搬过来,忽略了匹配本质是质量优先的挑选。

误区“模型把处理组得分都预测到 0.9 以上、对照组都预测到 0.1 以下,区分度这么高,说明指纹很有效。”

正解得分极端恰恰意味着重叠不足——处理组和对照组几乎没有可比的影子,PSM 无从谈起。倾向得分模型的评价标准不是分类准确率,而是得分分布的“重叠程度”和匹配后的平衡性。完美的分类器反而宣告了匹配的死刑。

为何常见:把机器学习里“分类越准越好”的惯性思维套在倾向得分建模上,混淆了预测任务与平衡任务。

误区“配对都做完了,两组平均分一减就是因果效应,不用再检查什么。”

正解匹配只是中间步骤,不是终点。如果匹配后协变量仍不平衡,说明配对失败,算出的效应不可信。严谨的 PSM 流程必须包含标准化差异检验、共同支撑域检查,必要时循环调整匹配方案,直到所有关键协变量平衡达标。

为何常见:匹配过程肉眼可见“配上了”,给人完成感,容易忽略统计意义上的验证环节。

误区“每个人算出来的倾向得分就是教学法对他的提升效果,得分高的人获益大。”

正解倾向得分只是“被处理的概率”,描述的是这个人多像处理组,而不是他从处理中获益多少。效应估计必须回到结果变量:用匹配后的两组结果做差。概率高只说明他“容易被送进试点班”,不代表他“从试点班赚得多”。

为何常见:得分和效应都是数值,又都在 0 到 1 附近出现,初学者容易把“预测处理”与“预测结果”混为一谈。

面试题

Q1. 倾向得分匹配(PSM)最初是为了解决什么问题?

单选题 · easy

  • A.数据缺失导致的估计偏差
  • B.选择偏差导致的组间不可比← 正确答案
  • C.样本量过小导致的方差过大
  • D.变量之间存在的多重共线性

答案:B。PSM 针对的是观察性研究中“先进组的人本来就特别”的选择偏差问题。它通过匹配让处理组与对照组在已观测特征上可比,从而模拟随机实验。A 与数据缺失无关,C 与样本量无关,D 是建模问题而非因果问题。

Q2. 倾向得分的数学定义是什么?

单选题 · easy

  • A.处理组结果变量的平均值
  • B.对照组结果变量的方差
  • C.给定协变量时接受处理的概率← 正确答案
  • D.协变量和结果的相关系数

答案:C。倾向得分定义为 $e(X) = P(D=1|X)$,即给定可观测协变量时个体接受处理的概率。它把多维协变量压缩成一维分数。A 描述的是结果均值,B 是方差,D 是相关性,都与“处理概率”无关。

Q3. 已知某学生接受新教学法的概率为 0.7,他实际参加了并考了 580 分。关于他未参加时的反事实成绩,下列说法正确的是?

单选题 · mid

  • A.可以直接用全班平均分替代
  • B.永远无法观测到,只能估计← 正确答案
  • C.等于 580 分的加权平均值
  • D.等于倾向得分的倒数乘积

答案:B。反事实是“走了另一条路”的结果,现实中永远观测不到,只能借助匹配或加权等方法估计。全班的平均分是总体汇总而非这个人未参加时的成绩,C 和 D 是编造的变换,没有统计依据。

Q4. 在最近邻匹配中,处理组个体 i 的匹配对象是?

单选题 · mid

  • A.倾向得分差距最小的对照个体← 正确答案
  • B.协变量均值最接近的个体总数
  • C.结果变量数值最大的处理个体
  • D.随机抽取任意一名对照成员

答案:A。最近邻匹配在对照组候选池中挑选 $|e_i - e_j|$ 最小的人作为影子,即“指纹最接近的对照个体”。B 说的是求均值而非个体匹配,C 在结果变量上挑选违背了因果方向,D 是随机匹配而非最近邻。

Q5. 卡尺匹配与最近邻匹配的最大区别是?

单选题 · mid

  • A.卡尺匹配要求对照组共同表决
  • B.卡尺匹配设定了最大允许距离← 正确答案
  • C.最近邻匹配不使用倾向得分值
  • D.最近邻匹配要求结果完全一致

答案:B。卡尺匹配规定匹配对象的得分差必须小于预设阈值,超过就放弃匹配,避免“远房亲戚”硬凑。最近邻匹配也使用倾向得分,只是不设距离上限,因此 B 正确,其余选项均不符合定义。

Q6. PSM 能得到可靠因果效应需要满足哪些条件?(多选)

多选题 · mid

  • A.可忽略性假设无未观测混杂← 正确答案
  • B.处理与对照得分有重叠区域← 正确答案
  • C.所有个体的处理效应恒相等
  • D.匹配后协变量分布能平衡← 正确答案

答案:ABD。可忽略性保证已观测协变量足以解释处理分配,重叠保证每个处理个体都能找到影子,平衡保证匹配确实消除了组间差异。C 假设处理效应恒定并非 PSM 的前提,PSM 允许个体效应异质,估计的是平均效应。

Q7. 匹配后反映协变量平衡性的标准化差异,通常认为小于多少说明平衡良好?

单选题 · hard

  • A.0.01 表示非常严格标准
  • B.0.05 表示中等严格标准
  • C.0.10 表示常规经验阈值← 正确答案
  • D.0.50 表示严重不平衡

答案:C。经验法则是标准化差异绝对值小于 0.10 视为协变量平衡良好,大于 0.20 需警惕。0.01 过于苛刻,0.05 偏保守,0.50 显然失衡。该指标与样本量无关,不会因为样本大而“假装平衡”。

Q8. 一项评估培训项目的研究中,处理组有 300 人,对照组有 90 人,倾向得分重叠良好。若采用 1:1 最近邻匹配(无放回),最终用于效应估计的样本情况是?

单选题 · hard

  • A.处理组 300 人,对照组 90 人
  • B.处理组 90 人,对照组 90 人← 正确答案
  • C.处理组 300 人,对照组 300 人
  • D.处理组 150 人,对照组 150 人

答案:B。1:1 无放回匹配为每个处理个体分配一个未被使用过的对照,配对数受少数方限制。对照组只有 90 人,最多形成 90 对,因此匹配后两组各保留 90 人。A 是匹配前的原始分布,C 和 D 在人数上都不符合约束。

Q9. 下列关于倾向得分匹配的说法,正确的有哪些?(多选)

多选题 · hard

  • A.只能控制可观测协变量的混杂← 正确答案
  • B.可以完全替代随机对照实验
  • C.匹配后仍需检验协变量平衡性← 正确答案
  • D.仅适用于小样本观察性研究

答案:AC。PSM 的一大局限就是只能平衡已观测变量,未观测混杂仍需其他方法兜底;匹配后的平衡性检验是流程刚需,否则无法确认匹配有效。B 错误,PSM 无法消除隐性混杂,不能完全替代随机实验;D 错误,大样本下 PSM 往往更稳定。

Q10. 下列哪些属于常见的倾向得分匹配方法?(多选)

多选题 · easy

  • A.最近邻匹配← 正确答案
  • B.卡尺匹配← 正确答案
  • C.核匹配← 正确答案
  • D.聚类匹配

答案:ABC。最近邻、卡尺和核匹配是 PSM 的三种经典实现方式,分别对应“找最像的”“限定距离的”和“加权合成影子”。聚类匹配不是倾向得分匹配的标准方法,它属于无监督分组,不涉及处理与对照的配对。