共计 1883 个字符,预计需要花费 5 分钟才能阅读完成。
为什么传统 AB 测试结果可能不可靠
在理想情况下,AB 测试通过随机分组可以保证实验组和对照组的特征分布一致,从而直接比较两组结果差异得到策略效果。然而现实中常遇到以下问题:

- 混杂变量干扰:用户行为受多因素影响(如活跃度、设备类型等),这些变量若在分组中分布不均,会混淆策略效果评估
- 样本选择偏差:实际业务中难以实现完全随机分组(如新策略仅对部分用户开放)
- 外部因素干扰:季节性波动、运营活动等外部事件会污染实验结果
主流因果推断方法对比
1. 双重差分法(DID)
- 原理:比较实验组与对照组在策略前后的变化差异
- 适用场景:存在自然实验环境,且满足平行趋势假设
- 优势:能消除时间不变混杂因素影响
2. 倾向得分匹配(PSM)
- 原理:为每个实验组用户寻找特征相似的对照组用户
- 适用场景:观测数据中存在大量混杂变量
- 优势:直观易解释,适合高维特征
3. 工具变量(IV)
- 原理:寻找与处理变量相关但不受结果变量影响的工具变量
- 适用场景:存在无法观测的混杂因素
- 劣势:有效工具变量难以寻找
PSM 的 Python 实现详解
import pandas as pd
import statsmodels.api as sm
from sklearn.neighbors import NearestNeighbors
# 模拟数据生成
np.random.seed(42)
data = pd.DataFrame({'age': np.random.normal(35, 5, 1000),
'activity': np.random.poisson(10, 1000),
'treatment': np.random.binomial(1, 0.3, 1000),
'conversion': np.zeros(1000)
})
# 生成结果变量(处理效应设为 0.1)data.loc[data['treatment']==1, 'conversion'] = \
0.2 + 0.1*data['age']/10 + 0.05*data['activity'] + np.random.normal(0, 0.1, sum(data['treatment']))
data.loc[data['treatment']==0, 'conversion'] = \
0.1 + 0.1*data['age']/10 + 0.05*data['activity'] + np.random.normal(0, 0.1, sum(1-data['treatment']))
# 计算倾向得分
X = data[['age', 'activity']]
X = sm.add_constant(X)
y = data['treatment']
ps_model = sm.Logit(y, X).fit()
data['ps_score'] = ps_model.predict(X)
# 最近邻匹配
treatment = data[data['treatment']==1]
control = data[data['treatment']==0]
nbrs = NearestNeighbors(n_neighbors=1).fit(control['ps_score'].values.reshape(-1,1))
_, indices = nbrs.kneighbors(treatment['ps_score'].values.reshape(-1,1))
matched_control = control.iloc[indices.flatten()]
# 计算 ATT
treatment_effect = treatment['conversion'].mean() - matched_control['conversion'].mean()
print(f'Estimated ATT: {treatment_effect:.4f}')
生产环境关键考量
- 样本量需求:
- 匹配后样本应保留足够统计功效
-
建议实验组: 对照组 ≥ 1:3
-
计算复杂度:
- 最近邻匹配时间复杂度 O(n²)
-
大数据场景建议使用近似算法或分层匹配
-
结果解释:
- 需报告匹配前后特征平衡性检验
- 明确估计的是 ATT(平均处理效应)还是 ATE
常见陷阱与解决方案
- 忽略共线性:
- 问题:高度相关的特征会导致倾向得分估计不稳定
-
解决:使用 VIF 检测并剔除高相关特征
-
匹配偏差:
- 问题:匹配后仍存在系统差异
-
解决:检查标准化均值差异 (SMD) 应 <0.1
-
忽略重叠区域:
- 问题:在倾向得分非重叠区域强行匹配
- 解决:可视化得分分布,裁剪非重叠样本
开放思考题
- 如何量化评估匹配质量?除了 SMD 还有哪些指标?
- 当特征维度极高时(如用户行为序列),如何改进 PSM 方法?
- 如何将因果推断方法融入持续交付体系实现自动化效果评估?
正文完
