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

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

1.gif


该文章主要介绍倾向得分匹配(PSM, Propensity Score Matching)方法的原理以及实现。这是一种理论稍微复杂、但实现较为容易的分析方法,适合非算法同学的使用。可用于(基于观察数据的)AB实验、增量模型搭建等领域。文章主要分为四部分:前置知识(因果推断)介绍、倾向得分计算与匹配与匹配质量检验、匹配示例与增量计算还有一些补充的小知识点。对因果推断有简单了解的同学可以跳过第一部分,直接从第二节开始阅读。


前置知识介绍

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


 概念一:干预效果 Treatment Effect

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


图片.png


其中image.gif表示潜在结果,1和0代表是否受到干预。
举个例子:我们想知道我养狗给我提升了多少幸福度,理想情况下就是用我养狗时的幸福度减去我不养狗时的幸福度。

 概念二:ATT Average Treatment Effect on the Treated


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


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

image.gif图片.png

图片.png


 计算ATT所需满足的假设


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


图片.png


  1. 共支撑 Common Support
在一些文献中,该条件也被称为strong ignotability.

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

图片.pngimage.gif

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


 估算ATT


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

图片.pngimage.gif

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


PSM实现

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


 倾向得分预测


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


  • 特征选择


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

  1. 同时影响干预分配和结果的变量应该被包括(使CIA成立);
  2. 被干预项影响的变量应该排除(变量需要在干预项前计算)。


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

  1. 不应使用过多的参数,因为会导致如下两个问题:
  • 恶化support问题,导致存在某些image.gif使得image.gif
  • 不会增加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匹配


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


 匹配质量检验


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

图片.png

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

图片.png


匹配结果+增量计算

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


 匹配结果示例


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


  1. 在干预之前,匹配后的实验组和对照组呈现几乎相同或平行的趋势(匹配质量较好的情况下)
  2. 在干预后,两组用户在目标指标上会开始出现差异,可以认为是干预带来的影响


图片.png


 增量计算


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

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


 其他情况


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


  1. 无显著增量

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

图片.png


  1. 不满足平行趋势假设

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

图片.png


其他值得一提的点

 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
  2. Some Practical Guidance for the Implementation of Propensity Score Matching


团队介绍


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

相关文章
|
2月前
|
算法 Go 区块链
YOLOD也来啦 | 优化YOLOv5样本匹配,顺带设计了全新的模块
YOLOD也来啦 | 优化YOLOv5样本匹配,顺带设计了全新的模块
23 0
|
2月前
【SPSS】两独立样本的极端反应检验和两配对样本的非参数检验详细操作教程(附案例实战)
【SPSS】两独立样本的极端反应检验和两配对样本的非参数检验详细操作教程(附案例实战)
53 0
|
4月前
|
机器学习/深度学习 数据挖掘 Python
统计回归模型中的一些概念解释
统计回归模型中的一些概念解释
|
6月前
|
数据挖掘 数据库
R实战 | 倾向性评分匹配(PSM)
R实战 | 倾向性评分匹配(PSM)
69 0
|
10月前
|
算法 Go
差异分析|DESeq2完成配对样本的差异分析
差异分析|DESeq2完成配对样本的差异分析
301 0
差异分析|DESeq2完成配对样本的差异分析
|
10月前
|
数据挖掘
R-apply| 基因表达量批量二分类,Get!(修正版)
R-apply| 基因表达量批量二分类,Get!(修正版)
|
11月前
|
算法 计算机视觉
Two-Stage目标检测困难负样本如何利用?大小目标如何同时优化?nRPN给你答案!
Two-Stage目标检测困难负样本如何利用?大小目标如何同时优化?nRPN给你答案!
84 0
|
11月前
|
机器学习/深度学习 自然语言处理
架构瓶颈原则:用注意力probe估计神经网络组件提供多少句法信息
架构瓶颈原则:用注意力probe估计神经网络组件提供多少句法信息
|
人工智能 计算机视觉
CVPR 2019|APCNet:基于全局引导的局部匹配度自适应金字塔上下文网络
不同物体可能有相似的特征,如木桌和椅子有相似的纹理,会造成歧义
102 0
CVPR 2019|APCNet:基于全局引导的局部匹配度自适应金字塔上下文网络
|
机器学习/深度学习 算法
【论文写作分析】之五《融合类别特征扩展与N-gram子词过滤的fastText短文本分类》
【论文写作分析】之五《融合类别特征扩展与N-gram子词过滤的fastText短文本分类》
【论文写作分析】之五《融合类别特征扩展与N-gram子词过滤的fastText短文本分类》

热门文章

最新文章