共计 1971 个字符,预计需要花费 5 分钟才能阅读完成。
问题定义:电商优惠券效果评估的挑战
假设某电商平台想要评估发放优惠券对用户消费金额的影响。由于优惠券通常针对特定用户群体发放(如高价值用户),直接比较领券用户和未领券用户的消费差异会导致严重偏差——我们无法确定消费差异是优惠券效果还是用户本身特征差异导致的。这就是典型的因果推断问题:在观测数据中存在混杂变量(用户特征)影响干预分配(是否发券)和结果(消费金额)。

数学原理
倾向得分匹配(PSM)
PSM 的核心思想是:如果两组用户在可观测特征 X 上的倾向得分 e(X)=P(T=1|X)相同,那么特征 X 在处理组 (T=1) 和对照组 (T=0) 的分布应该相同,即满足平衡性:
$$T \perp X | e(X)$$
倾向得分通常通过逻辑回归估计:
$$e(X) = \frac{1}{1+exp(-(\alpha + X\beta))}$$
关键定理:当满足强可忽略性(unconfoundedness)和重叠性(overlap)假设时,倾向得分能消除选择偏差。
因果森林(Causal Forest)
因果森林是广义随机森林的扩展,其分裂准则最大化处理效应异质性。对于每个节点分裂:
-
估计局部平均处理效应:
$$\hat{\tau}(x) = \frac{1}{|{i:X_i \in l(x)}|} \sum_{i:X_i \in l(x)} (Y_i(1)-Y_i(0))$$ -
选择分裂特征 j 和切点 s 最大化:
$$\sum_{child} |{i:X_i \in child}| \cdot \hat{\tau}_{child}^2$$
通过 honest estimation(训练 / 估计样本分离)和方差估计,能获得更稳健的异质性效应评估。
代码实现
PSM 实现(Python 示例)
from causalml.match import NearestNeighborMatch
from sklearn.linear_model import LogisticRegression
# 假设 df 包含特征 X、处理变量 T、结果 Y
ps_model = LogisticRegression().fit(df[X_cols], df['T'])
df['ps_score'] = ps_model.predict_proba(df[X_cols])[:,1]
# 进行 1:1 最近邻匹配(设置 caliper=0.2)matcher = NearestNeighborMatch(
caliper=0.2,
replace=False,
random_state=42
)
matched = matcher.match(data=df,
treatment_col='T',
score_cols=['ps_score'])
# 平衡性检验(标准化差异 <0.1 为良好平衡)from causalml.metrics import smd
for col in X_cols:
print(f"{col}: {smd(matched[matched['T']==1][col], matched[matched['T']==0][col])}")
因果森林实现
from causalml.inference.meta import CausalForest
cf = CausalForest(
n_estimators=1000,
honest=True, # 启用 honest estimation
inference=True, # 计算置信区间
random_state=42
)
cf.fit(X=df[X_cols],
treatment=df['T'],
y=df['Y'])
# 获取个体处理效应 (ITE) 及置信区间
ite = cf.predict(X=df[X_cols])
ite, ci = cf.predict(X=df[X_cols], return_ci=True)
工程考量
PSM 的敏感性问题
- 重叠假设:需要通过倾向得分分布图检查共同支持域
- 模型误设:建议尝试非线性模型(如 GBM)或加入交互项
- 平衡性不足:可结合 Mahalanobis 距离匹配
因果森林的过拟合风险
- 高维特征下建议:
- 使用特征重要性筛选变量
- 调整 max_depth/min_samples_leaf
- 监控样本外表现
避坑指南
- 倾向得分模型误设
- 错误:仅用线性逻辑回归处理非线性关系
-
解决:使用 XGBoost/BART 等非线性模型估计倾向得分
-
忽略共线性问题
- 错误:高度相关的特征导致倾向得分不稳定
-
解决:先进行特征筛选或 PCA 降维
-
样本重叠不足
- 错误:在倾向得分差异大的区域强行匹配
- 解决:检查重叠域,考虑 trimming 或调整研究问题
总结
通过电商案例可以看到,PSM 通过构建可比较的对照组解决选择偏差,而因果森林能捕捉用户群体的异质性处理效应。实际应用中建议:
- 先用 PSM 检验核心因果效应
- 再用因果森林分析效应差异
- 始终进行敏感性检验和稳健性检查
因果推断不是银弹,需要领域知识指导模型构建,同时保持对假设条件的警惕。
