Python CUPED 降低方差的实验优化

2次阅读

cuped方差未降反升的核心原因是协变量与因变量线性关系弱(相关系数

Python CUPED 降低方差的实验优化

为什么 CUPEDpython 里跑出来方差没降反升?

核心原因通常是协变量 pre_treatment 和因变量 post_treatment 的线性关系太弱,或者用了错误的训练/评估切分——比如拿实验组数据拟合模型,又用同一组数据算校正后均值,导致过拟合式“方差压缩”,实际泛化更差。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 必须用**对照组历史数据**(实验前指标)拟合 CUPED 回归模型,且该数据不能参与后续效应估计
  • 检查 pre_treatmentpost_treatment 的皮尔逊相关系数,低于 0.3CUPED 收益极小,甚至因噪声放大而劣化
  • 别直接用 sklearn.linear_model.LinearRegression 拟合全量数据;先用对照组样本 fit,再对实验组和对照组分别 predict 校正值

CUPED 的 Python 实现关键三步(不用第三方实验库)

很多人卡在“校正后效应怎么算”,其实就三步:建模 → 预测 → 差值。重点不是算法多炫,而是每步的数据来源必须隔离。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 建模:只用 control_df[pre_col]control_df[post_col] 训练 LinearRegression,得到 theta 和截距
  • 预测:对所有用户(含实验组),用同一模型计算 predicted = theta * pre_value + intercept
  • 校正:新指标 = post_value - predicted + control_mean_pre,其中 control_mean_pre 是对照组 pre 均值(不是全量均值)

示例片段:

from sklearn.linear_model import LinearRegression<br>model = LinearRegression().fit(control_df[[pre_col]], control_df[post_col])<br>control_df['cuped'] = control_df[post_col] - model.predict(control_df[[pre_col]]) + control_df[pre_col].mean()<br>test_df['cuped'] = test_df[post_col] - model.predict(test_df[[pre_col]]) + control_df[pre_col].mean()

statsmodels 还是 sklearn?参数差异在哪

两者都能做回归,但默认行为不同,直接影响 theta 稳定性。特别是当 pre_col 有强共线性(比如多个 lag 特征)时,结果偏差明显。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • sklearn.LinearRegression 默认不加截距(fit_intercept=True 是对的),但不会报告标准误,无法做 t 检验
  • statsmodels.OLS 默认带截距,且能直接输出 model.params[pre_col]model.bse[pre_col],方便诊断协变量贡献度
  • 如果想加正则(防过拟合),用 sklearn.Ridge,但 alpha 要从对照组交叉验证选,不能扫全量

AB 实验中 CUPED 最容易被忽略的兼容性坑

它不是万能开关,和分层、分流逻辑、指标口径冲突时,方差反而爆炸。最典型的是把校正后的指标再套一层分位数聚合(比如 95% 分位耗时),此时线性假设崩塌,CUPED 失效。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 只对满足近似正态或大样本中心极限成立的指标用 CUPED,比如人均点击、平均停留时长;别用于转化率类稀疏指标(应改用 CUPED+ 或分层 CUPED)
  • 若实验做了多层分流(如国家 → 设备 → 用户),pre_col 必须和分流层级对齐,比如国家层实验就得用国家粒度的 pre 数据,不能塞用户级原始值
  • 上线前务必对比校正前后 p-value 分布:在模拟零假设(A/A 实验)下,校正后 p-value 应仍均匀分布在 [0,1],否则存在系统性偏移

复杂点在于,CUPED 不是独立模块,它嵌在实验链路里每一环——数据抽取逻辑、特征时间窗口、分组一致性、甚至离线报表缓存策略,动一处可能让方差优化变成方差污染。

text=ZqhQzanResources