倾向得分匹配(PSM)的原理以及应用

Posted 阿里巴巴淘系技术团队官网博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了倾向得分匹配(PSM)的原理以及应用相关的知识,希望对你有一定的参考价值。

该文章主要介绍倾向得分匹配(PSM, Propensity Score Matching)方法的原理以及实现。这是一种理论稍微复杂、但实现较为容易的分析方法,适合非算法同学的使用。可用于(基于观察数据的)AB实验、增量模型搭建等领域。

文章主要分为四部分:前置知识(因果推断)介绍、倾向得分计算与匹配与匹配质量检验、匹配示例与增量计算还有一些补充的小知识点。对因果推断有简单了解的同学可以跳过第一部分,直接从第二节开始阅读。

前置知识介绍

对因果推断概念‍有所了解或想直接学习PSM的同学可跳过这一节。

  概念一:干预效果 Treatment Effect

‍‍

干预效果(Treatment Effect):干预下的潜在结果减去未干预时的潜在结果(Rubin框架),即:

其中表示潜在结果,1和0代表是否受到干预。

举个例子:我们想知道我养狗给我提升了多少幸福度,理想情况下就是用我养狗时的幸福度减去我不养狗时的幸福度。‍

  概念二:ATT Average Treatment Effect on the Treated

相较于个人的干预效果,我们更希望了解人群整体的干预效果,毕竟我们通常用策略干预的是一个人群。

应用PSM,我们通常希望计算得到被干预的用户的平均干预效果,即ATT(average treatment effect on the treated),即

其中变量代表是否收到干预。

可以看到代表被干预的用户假如不被干预的情况下的潜在结果,是一个无法观测的数值。倘若可以建立AB测试,我们可以利用对照组得到该结果,在无法进行AB测试的情况(例如是一个主动的行为)我们可以通过PSM拟合一个虚拟的对照组进行计算。

  计算ATT所需满足的假设

‍‍

这里引入一个新的概念,倾向性得分(Propensity Score),即用户受到(参与)干预的概率

  1. 条件独立假设 CIA (Conditonal Independence Assumption)

给定一系列可观测的协变量,潜在结果和干预分配相互独立。

可认为所有影响到干预分配与潜在结果的变量都同时被观测到。此时可能是高维度的。

若上式成立,则干预分配与潜在结果基于同样条件独立[可证明],即:

  1. 共支撑 Common Support

在一些文献中,该条件也被称为strong ignotability.

除了独立外的另一个条件是存在重叠的部分,即:

这个条件能够排除掉——给定时能准确确定的情况(也因为如此才有匹配的空间)。

  估算ATT

在满足CIA和common support的情况下,我们能够对ATT进行估算:

即:在common support 上,以倾向分为权重、对实验组与对照组平均值的差值进行求和。

PSM实现

倾向得分匹配的实现步骤其实就如其名称中提到的,主要有两步:倾向得分的计算,以及基于倾向得分的匹配。

  倾向得分预测

预测用户被干预的概率,其实就是一个常见的二分类问题,常见的机器学习模型都可以在这里使用。

  • 特征选择

需要注意的是在特征选择上,具体需要哪些特征呢?有两个基本的原则是需要遵守的:

  1. 同时影响干预分配和结果的变量应该被包括(使CIA成立);

  2. 被干预项影响的变量应该排除(变量需要在干预项前计算)。

而至于特征的量级,不同的文献中有不同的说法:

  1. 不应使用过多的参数,因为会导致如下两个问题:

    • 恶化support问题,导致存在某些使得

    • 不会增加bias但会增加variance,因为匹配困难一些treatment样本会被丢弃、或control样本被重复使用

  1. 尽可能使用更多的参数以满足CIA假设,除非有明确的共识特征与干预无关。

为方便起见,通常在实际应用中我们会选取尽量多的特征,同时也会用到一些机器学习中常规的特征筛选方法。

  • 重要特征

当我们已知一些特征十分重要(对干预、结果)时,我们可能通过一些方式加强这些特征对匹配的影响:

  1. 在匹配时在该特征上两组一致,如男性只跟男性匹配

  2. 在子人群中做匹配(男性、女性分别做匹配)

换句话说:就是在重要特征上做完全匹配,再辅助倾向分匹配(当预期在不同分组上会有不同的ATT时尤其推荐这么做)。

  匹配算法

当不使用propensity score时,可以直接基于协变量进行匹配,直接计算两个样本协变量之间的(马氏距离(Mahalanobis Distance) - 知乎 (zhihu.com)),这种方式通常称为CVM(Coviate Matching)。

完成倾向分模型及预测后,每个样本会得到一个propensity score,此时便可以进行匹配步骤了:为每个被干预的样本匹配一个(或多个)虚拟的对照样本

匹配的基础思路很简单,即找到一个距离最近的样本,实现的具体方法按照渐进的顺序阐述如下:

  • Nearest Neighbour Matching 最近邻匹配

这是最直接的一种方法,即:对干预组中的用户,选取对照组中在倾向分上相差最小的用户做匹配。

实现上,会有有放回和无放回两种实现方式:

  1. 有放回(对照组样本可重复使用):此时整体匹配质量上升,bias下降,当干预组与对照组倾向分分布差异较大时推荐应用。此时使用的对照组样本数会减少,导致variance上升;

  2. 无放回:此时匹配结果与匹配顺序有关,顺序需要保证随机。

除了是否放回之外,还有一个可调整的地方在于对单个用户是否可匹配多个样本(over-sampling):通过匹配最近的多个邻居降低了variance,提升了匹配的稳定性。但此时需要给每个邻居赋予权重(eg. 按距离衰减)。

  • Caliper and Radius Matching 有边界限制的半径匹配

当最近的邻居也相距很远的时候,NN匹配会存在低质匹配的风险。很自然的,我们想到可以限定样本间分数差值的上限,即Caliper。

  1. Caliper Matching:匹配时引入倾向分差值的忍受度,高于忍受度的样本丢弃。理论上通过避免低质量匹配降低了bias,但在样本数量较少时也可能因为匹配过少而升高了variance;

  2. Radius Matching:不止匹配caliper中的最近样本,使用caliper中的所有样本进行匹配。这种方法的优势在于,当有高质量匹配时使用了更多的样本、而当缺乏高质量匹配时则使用较少的样本。

  • Stratification and Interval Matching 分层区间匹配

分层匹配可以看作radius matching的一种相似版本,即将倾向得分分成多个区间,在每个区间内进行匹配。需要注意的是,分层的依据除了propensity score,也可以用一些我们认为重要的特征(如性别、地区),在相同特征的用户间进行匹配。


  匹配示例SQL

在计算复杂度不太高的情况下,我们通常能够使用sql进行匹配算法的实现,示例如下:

with matching_detail as (
    select t1.user_id as treatment_userid,
      t1.score as treatment_pscore,
      t2.user_id as control_userid,
      t2.score as control_pscore,
      row_number() over (partition by t1.user_id order by abs(t1.score-t2.score) asc) as rn
    from propensity_score_treatment t1
    left join propensity_score_control t2
      -- 分层匹配
        on t1.gender = t2.gender and round(t1.score, 1)*10 =  round(t2.score, 1)*10
    where abs(t1.score-t2.score) <= 0.05 -- caliper matching
)
select * from matching_detail where rn = 1  # rn大于1时为多邻居/radius匹配

上述的三种方法实际上都只使用了对照组中的部分样本,若希望使用对照组中的所有样本可对对照组中的样本整体赋权,计算整体的差值。

  匹配质量检验

鉴于我们基于倾向分做匹配,需要检测其他特征在实验组与对照组之间的分布是否相近。

理论依据:因为,在给定的情况下,应该相互独立。也就是说倾向得分相同时,的分布应该趋近一致。

  1. 可量化的指标——标准化偏差 Standardised Bias

通过标准化偏差我们可以衡量在实验组与对照组分布的差异大小,通常我们认为低于5%的偏差是可以接受的(当然越小越好)。

我们也可以在匹配前后分别计算该值,去看看通过匹配让Standardised Bias减少了多少。

  1. 对样本均值的假设检验——T检验

我们也可以通过双侧T检验去判断两组的变量均值是否有显著差异。缺点是匹配前后偏差的减少量无法很直观的感受到。进一步的,我们也可以基于倾向分先做一个分层,再进行T-Test。这样可以看到不同分值下匹配的质量。

  1. 联合显著性/伪

另一种思路是我们把特征当作自变量,是否干预当作因变量,计算判定系数。在完成匹配后,两组间的协变量应该不存在系统性差异(即无法通过预测是否干预),从而应该很低。类似的,可以对所有变量做一个联合F-Test,匹配有效的话,匹配后会拒绝假设(即解释变量对被解释变量的共同影响不显著)。

除此之外,我们可以通过QQplot的可视化、计算匹配后两组方差的比值、计算匹配前后倾向分偏差减小量等方式衡量匹配质量。但总体来说还是推荐前两种方式——计算SB和T检验,兼具了可解释性和可量化性。假如匹配的质量达不到要求,那么我们就要回到上一步对匹配算法进行调整。

匹配结果+增量计算

示例数据均为虚拟构造数据,仅用于参考说明方法。

  匹配结果示例

匹配之后,常见的趋势会如下图一所示:

  1. 在干预之前,匹配后的实验组和对照组呈现几乎相同或平行的趋势(匹配质量较好的情况下)

  2. 在干预后,两组用户在目标指标上会开始出现差异,可以认为是干预带来的影响

  增量计算

因为满足平行趋势假设,我们可以用双重差分法(DID)去计算干预带来的增量;需注意的是,计算实验组与对照组的差异时,我们通常需要取一段时间的均值,避免波动带来的影响。

最终得到的结论类似于:用户在购买商品后,能够给来访率带来1.5%(30天日均)的提升

  其他情况

在一些情况下,也会有其他结果的出现。

  1. 无显著增量

用户在干预之后来访率有一个短暂的提升,但随着时间的推移两组用户趋于一致。这种情况下我们通常认为干预并没有给用户来访带来显著的提升。为了识别出这种情况,我们也可以通过假设检验或计算差值中位数的方式进行验证。

  1. 不满足平行趋势假设

从下图可以看到,左侧区域实验组与对照组的趋势不一致(不平行),这代表我们前面完成的匹配质量较差,需要优化匹配模型。对于平行趋势的检验,除了图示法(肉眼看是否平行)我们也可以通过T检验的方式来验证。

其他值得一提的点

  ATT与ATE的区别

  1. ATE:average treatment effect

  2. ATT:average treatment effect on the treated

可以认为ATE是人群整体的干预增量效果,而ATT是实际被干预人群的干预增量效果。通常我们通过PSM+DID计算的是ATT,因为ATE还会涉及人群的干预率。更详细的解释可以参考stackexchange上的这个回答:https://stats.stackexchange.com/questions/308397/why-is-average-treatment-effect-different-from-average-treatment-effect-on-the-t

  Bias与Variance

在匹配算法的步骤,我们有提到bias与varianc:

  1. Bias 偏差:期望预测与真实结果之间的偏离程度,刻画算法本身的拟合能力

  2. Variance 方差:同样大小训练集的变动所导致的学习性能变化,刻画数据扰动所造成的影响

可以认为bias代表算法本身的拟合能力而variance代表算法的稳定性,在匹配的不同方法中它们也存在trade-offs:

算法

Bias

Variance

NN+多邻居

+

-

NN+最近邻

-

+

+边界值

-

+

无边界值

+

-

有放回

-

+

无放回

+

-

  敏感性测试 Sensitivity Analysis

在前置知识介绍的部分有提到,做PSM需要满足两个假设——条件独立和共支撑。

对于第一个条件,其含义便是我们需要观测到所有同时影响到treatment和outcome的特征,否则估算的ATT会存在偏差。对于common support,我们实际上计算的是倾向得分重叠区域的ATT,其实际上也可能是有偏的。在这种情况下,我们需要去进行sensitivity analysis。换句话说,我们计算得到的增量结果其实是不稳健的,我们可以通过纳入不确定性的来估算一个ATT的区间,使之稳定性得到提升。

总结

在文章的最后,我们对PSM的整体流程进行一个梳理(可以看到真的不复杂),同时对PSM的优点与缺点进行简单的介绍。

  完整流程

  1. 选择同时影响treatment与outcome的特征,基于特征对treatment进行二分类建模,得到倾向分;

  2. 在支撑集上,基于重要特征与倾向分进行匹配,为被干预用户找到匹配的样本;

  3. 对匹配结果的质量进行检验,检验通过的话进入下一步,否则返回第二步进行匹配的优化;

  4. 基于匹配的结果进行平行趋势验证,验证通过后通过双重差分法进行增量计算。

  PSM的优缺点

  • 优点

    1. 在无法进行随机试验的情况下,可构建虚拟的对照组并对增量进行可信的估算;

    2. 实现较为容易,实验组的样本能够充分的利用。

  • 缺点

    1. PSM最主要的一个缺点是——使用者永远无法保证所有的混淆变量都被包含在建模用的特征当中;

    • 但可通过敏感性分析校验:如增减混淆变量后重复完成计算步骤观测结果是否一致,或通过纳入不确定性对估算增量的区间值

    1. 当支撑集(实验、对照组的倾向分交集)较小时,PSM+DID估计的局部样本的增量,可能无法代表整体。

整体来说,若不过分追求准确性,PSM+DID是一个对因果增量预估的较为靠谱的方式。当实现过程中存在卡点或假设无法满足时,除了优化模型还可以尝试看看逆概率加权和合成控制法等其他方法。

参考文献

  1. Evaluating the performance of propensity score matching methods

  1. Some Practical Guidance for the Implementation of Propensity Score Matching

团队介绍

大淘宝技术用户平台数据洞察团队,利用数据科学能力助力淘宝用户增长、提升用户价值,从用户视角洞察用户需求,实现用户与平台的双赢。

✿  拓展阅读

作者|八卜

编辑|橙子君

以上是关于倾向得分匹配(PSM)的原理以及应用的主要内容,如果未能解决你的问题,请参考以下文章

因果推断笔记——python 倾向性匹配PSM实现示例

因果推断笔记——python 倾向性匹配PSM实现示例

PSM的stata实现

运用真实世界数据,开展治疗方案与预后关系研究 | 一键实现基于R语言的倾向性评分匹配(PSM)

如何用R语言实现倾向评分匹配(Propensity Score Matching)

因果推断中期学习小结