《PSM》

PSM 的背景

在我们去做 AB 实验的过程中,分组时一般将用户按照一定哈希算法进行随机分桶,此时我们可以认为不同桶之间的用户是同质的,或者可以说成是用户的特征分布是相似的,但是也会面临一些问题:

  • 实验无法进行随机分组,此时用户分布是不同质的,可能面临辛普森悖论等问题
  • 随机分组算法有概率生成的结果是不均匀的

此时为了让用户同质,我们则应该回归匹配的方法,具体地有三种:

  1. 精确匹配
    对于我们实验组的每一个样本,从对照组中都去找一个一模一样的样本。这个方法在医学或者某些社会学研究中是可行的,但是对于互联网场景下,我们的维度会很多 or 我们的变量是连续变量,这么做就基本不可行了
  2. 分层匹配
    用户可能是在某些维度上的分布是不均匀的,此时我们可以将用户比较精细地划分为多层,保证每一层内的用户分布是同质的,此时我们去计算其 ATE,然后再将 ATE 进行加权平均,就可以得到总体的 ATE,比如用户在男女上分布是不均匀的,我们就可以在组内分开男女两层进行计算。
    但是当我们的层数过多之后,整个用户的分布就会变得稀疏,方差变大,此时结论可信度就会降低..
  3. PSM 匹配
    继而,大佬提出了更加普适性的方法 PSM,全称“Propensity Score Matching”,即倾向性得分匹配。我们根据分层法的思路来看,如果我们可以按照得分 p 来进行分层,和按照方法 2 来进行分层,可以得到类似的效果,则可以极大减少我们的分层数量,得到更准确的结果,当然,这一点大佬肯定已经证明是可行的~

PSM 的定义

PSM得分,即 e(x) 表示的是一个用户属于实验组的倾向性:
e(x) =Pr[T=1|X=x]
其中:
e(x):表示一个用户属于实验组的得分。注意,这不是用户是否转化的概率!
X:用户的特征向量
T:用户是否被干预
Y:用户的行为结果

这里的 e(x) 有两个性质,对于倾向性得分相同的用户,其 T 与 X,T 与 Y 都是独立的。所以此时我们可以不用去关心用户 X 的分布了,只需要去匹配用户的 e(x) ,就可以得到同质的实验组和对照组,继而去进行因果效应的评估。

  • T 与 X 是独立的比较好理解,即我们的选择的实验组不应该与 X 有相关关系,比如一个实验:
    • T-是否给孩子吃“长高糖丸”
    • Y-实验组长高 5 cm ,对照组长高 3 cm
      • 此时 T 的选择就与 X (孩子家里的经济条件、父母重视程度)有关
  • T 与 潜在结果也是独立的,即 Treatment 不影响我们的潜在结果的分布,只会影响我们的观察结果

PSM 的计算

这一步比较简单,我们可以使用常见机器学习算法,比如 LR 等对(X,T)进行建模,此时使用的是所有的数据,不区分实验组和对照组(因为我们整体来看,实验组的选取是随机的),输入是用户的特征 X ,训练的 label 则是用户是否被 treatment,然后可以利用训练好的模型对所有用户进行打分。

个人理解这个打分模型不需要花过多的参数去调整,基于以下几点认知

  • 常见模型的结果:相同特征的样本得分一致,相似样本的样本得分差异较小
  • 我们的实验组选取本身就是随机的,所以模型性能注定不会特别好

利用 PSM 进行匹配

主要有以下几步:

  1. 倾向性得分估算:计算每个用户的 PSM 得分
  2. 倾向性得分匹配:根据我们计算得到的 e(x) 分数,寻求相等或者相近的用户进行匹配
    a. 对于极端得分的用户,我们可以排除掉,比如选择[0.05,0.95]的分位区间,或者是取原本实验组和对照组的交集
    b. 得分差异上限(caliper):匹配的时候可以要求每一对的用户差异不可以高于 caliper,否则干掉
    c. 匹配方法:有很多…本质都是寻求相近分数的用户
  3. 平衡性检查:我们进行 PSM 匹配的目标就是为了让用户同质,所以我们有必要检查匹配玩之后的效果
    a. 用户是否同质,主要表现在特征分布上的不同,所以我们可以观察特征匹配前后的分布图,比如说 QQ-plot
    b. 量化指标观察,比如SMD = ( 实验组均值 - 对照组均值 ) / 实验组标准差,一般 SMD <= 0.1,则可以认为是配平了的。(标准正态分布计算)
  4. 因果效应推断
    a. 计算 ATE ,这个不必多说
    b. 拟合线性模型 f(y) = ax + bt ,此时 t 的系数 b 就是我们的因果效应
  5. 敏感性判断:主要为了判断我们的特征是否真的与 T 与 Y 都是独立的,这里 pass

PSM 实践

因具体数据涉及到业务,此处 pass