AB实验与因果推断:从统计原理到工程实践

1次阅读
没有评论

共计 1935 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

传统 AB 实验的局限性

在推荐系统效果评估中,我们经常遇到这样的场景:新算法在 AB 测试中点击率提升 5%,但上线后整体收益反而下降。这种情况往往源于样本偏差(sampling bias)——比如实验组用户本身更活跃,或测试期间有季节性活动干扰。

AB 实验与因果推断:从统计原理到工程实践

另一个典型案例是价格敏感度测试:当对 VIP 用户和非 VIP 用户采用不同定价策略时,传统 AB 实验会错误地将用户等级差异归因于价格变动本身,这就是典型的混杂变量(confounding variable)干扰问题。

RCT 与观察性研究对比

  1. 随机对照实验(RCT):通过完全随机分组保证协变量平衡,如临床药物试验
  2. 观察性研究:利用历史数据进行分析,需处理自选择偏差,如经济学政策评估

反事实推理框架(Counterfactual Framework)的核心问题是:” 如果同一个体同时经历实验组和对照组会发生什么?” 这在现实中无法实现,因此需要因果推断方法构建近似对比。

DoWhy 实战演示

因果图构建

from dowhy import CausalModel
import networkx as nx

# 图 1:包含未观测变量 U 的因果图
dag = nx.DiGraph([('X', 'Y'), ('U', 'X'), ('U', 'Y')])
model = CausalModel(
    data=df,
    treatment='X',
    outcome='Y',
    graph=dag.to_dot())

倾向得分匹配

from sklearn.linear_model import LogisticRegression

# 数据预处理
df['ps_score'] = LogisticRegression().fit(df[['age', 'income']], 
    df['treatment_flag']
).predict_proba(df[['age', 'income']])[:,1]

# 计算 ATE
treated = df[df['treatment_flag']==1]
control = df[df['treatment_flag']==0]
matched_control = control.iloc[
    np.argmin(np.abs(control['ps_score'].values - 
        treated['ps_score'].values.reshape(-1,1)),
        axis=1)
]

te = treated['outcome'].mean() - matched_control['outcome'].mean()

敏感性分析

from dowhy.plotter import plot_sensitivity_analysis

# 检验未观测变量需要多大影响才能推翻结论
plot_sensitivity_analysis(
    est_ate=0.15,
    stderr=0.03,
    sensitivity_params={'confounder_influence': 0.1}
)

工程实践关键点

样本量计算

from statsmodels.stats.power import tt_ind_solve_power

# 基于最小可检测效应 (MDE) 计算
required_n = tt_ind_solve_power(
    effect_size=0.2,  # 期望检测的效应大小
    alpha=0.05,       # 显著性水平
    power=0.8,        # 统计功效
    ratio=1.0         # 实验组 / 对照组比例
)

多重检验校正

from statsmodels.stats.multitest import multipletests

# Bonferroni 校正
reject, pvals_corrected, _, _ = multipletests(pvals=[0.01, 0.03, 0.005], 
    alpha=0.05,
    method='bonferroni'
)

分组泄露预防方案

  • 用户级别哈希分桶(避免同一设备多次进入不同组)
  • 特征编码隔离(实验组特征工程代码独立版本控制)
  • 数据管道隔离(从日志采集到模型训练全链路分组标记)

避坑指南

辛普森悖论案例:某电商发现整体转化率下降,但各用户分群转化率均提升。经排查发现高价值用户占比实验组显著降低,此时需要:

  1. 进行分层效应分析
  2. 使用 CUPED 等方差缩减技术
  3. 增加用户画像维度监控

开放式思考题

  1. 当实验流量必须非随机分配时(如地理位置实验),如何设计因果评估方案?
  2. 在长期效应评估中,如何区分算法效果和用户行为自然变化?
  3. 对于小样本场景(如冷启动问题),有哪些增强因果推断可靠性的方法?

结语

因果推断不是 AB 实验的替代品,而是增强工具。在实际业务中,我通常采用 ”RCT+ 因果验证 ” 的双重保障策略:先用随机实验获得基准结论,再通过因果方法解释异常现象。这种组合拳在金融风控和内容推荐场景中都取得了不错的效果。

正文完
 0
评论(没有评论)