带你读《2022技术人的百宝黑皮书》——倾向得分匹配(PSM)的原理以及应用(3) https://developer.aliyun.com/article/1243258?groupCode=taobaotech
匹配的基础思路很简单,即找到一个距离最近的样本,实现的具体方法按照渐进的顺序阐述如下:
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匹配
上述的三种方法实际上都只使用了对照组中的部分样本,若希望使用对照组中的所有样本可对对照组中的样本整体赋权,计算整体的差值。
带你读《2022技术人的百宝黑皮书》——倾向得分匹配(PSM)的原理以及应用(5) https://developer.aliyun.com/article/1243255?groupCode=taobaotech