你是一位健身营的教练,今天要做一个重要决定:新学员入营后,到底该推行高强度间歇训练(HIIT),还是温和的慢跑计划?可每位学员的基础天差地别——有人天生易瘦,有人喝水都胖;有人日常就爱运动,有人加班久坐身体水肿。如果只盯着入营两周后的体重秤读数,你会很快发现:同组内部学员的体重变化千差万别,组间那点平均值差异,完全被组内巨大的“个体噪声”淹没了。实验白做,还耗掉了学员两周汗水。 聪明的做法是:入营前先让每个学员戴运动手环,记录两周“自然状态”下的体重、步数和睡眠。这份“赛前摸底”的数据,能让你猜出每个人即使不干预也会瘦多少。CUPED 技术做的正是这件事:让 A/B 测试利用实验前已有的用户数据,把每个人“固有且可预测的那部分变化”先扣掉,再去比较两组的真实差异。噪声小了,实验更快、更准、更省钱。

岗位关联

对 AI 从业者而言,CUPED 是 A/B 测试方差缩减的必备武器:掌握它,你就能用更少的流量、更短的时间,得出可靠的实验结论——这是数据科学家在增长实验与模型评估面试中的高频考点。

目录
  1. 可视化演示
  2. A/B测试之痛
  3. 核心思想
  4. 方差缩减原理
  5. 协变量选择
  6. 工程实现
  7. 效果提升
  8. 对比分层法
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示CUPED的核心机制,通过入门/进阶/实战/优化四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

CUPED:CUPE CUPED方差缩减核心原理 预实验数据的协变量利用 核心机制可视化 CUPED整体架构与关键组件

A/B测试之痛

你入职了一家互联网健身公司的增长团队,老板丢给你一个任务:两周内比较两套训练计划——HIIT 和高强度间歇训练,到底哪个更能帮用户减重。于是你租来十台体脂秤,给两组学员各称了入营体重和结营体重。结果一出来你就傻眼了:A 组平均掉了 1.2 公斤,B 组平均掉了 0.9 公斤,看起来只差 0.3 公斤;但两组内部个体差异高达 ±2.5 公斤——有人越练越胖,有人躺着也瘦。这份“秤上的平均值”就像暴风雨里的风速计读数,信号明明存在,却被噪声吹得东倒西歪。

互联网的 A/B 测试就是这场学员实验:把用户随机分成对照组和实验组,各体验一版策略,再比较业务指标。业务指标(人均观看时长、付费率、次日留存)天生携带巨大个体差异——有人本来就重度使用,有人下载后再没打开过。这些差异构成实验的随机噪声。噪声一大,均值差异的置信区间就宽得吓人,实验要么拖到地老天荒才显著,要么必须拉上百万用户当“分母”,流量和时间的账单都让人肉疼。

聪明的教练不会默默加租十台秤、多招一万个学员——那只是把分母里的 n 变大,成本高得离谱。真正厉害的做法,是收起秤、先给学员戴上运动手环,摸清每个人的“底子”。于是,CUPED 登场了。

t=YˉA−YˉBσA2nA+σB2nBt = \frac{\bar{Y}_A - \bar{Y}_B}{\sqrt{\dfrac{\sigma_A^2}{n_A} + \dfrac{\sigma_B^2}{n_B}}}
t 统计量就是“信号除以噪声”:分子是两组均值差(信号),分母是均值差的标准误(噪声的最终形态)。噪声砍半,t 值翻倍,显著性来得更快。
  1. 两组均值差分子里的两个平均数,代表 A、B 两组平均业务水平的差距,也就是策略带来的效果信号。
    YˉA−YˉB\bar{Y}_A - \bar{Y}_B
  2. 组内方差分母里的 σ² 是组内个体指标的方差,相当于同一训练计划内部学员之间的身体差异。
    σA2,σB2\sigma_A^2, \quad \sigma_B^2
  3. 样本量n_A、n_B 是两组用户数,样本越多,平均值的随机抖动越小。
    nA,nBn_A, \quad n_B
  4. 标准误整个根号把两组方差折算成“均值差”的波动幅度,这是最终的噪声大小。
    σA2nA+σB2nB\sqrt{\frac{\sigma_A^2}{n_A} + \frac{\sigma_B^2}{n_B}}
  5. t 值t 越大,p 值越小,越有把握说差异不是巧合。
    tt

核心思想

教练换了策略:正式训练开始前两周,给每位学员发一只运动手环,记录他们“没人管时”的日常体重、步数和睡眠。两周后开营,等结营数据出来,教练不再直接看秤,而是先把手环记录摆出来:那个入营前每天走两万步的学员,掉秤 2 公斤可能只是惯性;而那个久坐不动、一坐一整天的程序员学员,同样掉秤 2 公斤,才是训练计划实打实的功劳。

CUPED 的全称是 Controlled-experiment Using Pre-Experiment Data——利用实验前数据的受控实验。它做的正是教练这件事:每个用户在实验前都留下大量行为数据(历史观看时长、历史点击率、历史消费金额),我们从中挑出一个与目标指标高度相关的协变量 X_i,相当于那只手环。然后用回归系数 θ 度量“X_i 每变化一单位,实验指标 Y_i 平均跟着变多少”,最后把 Y_i 中可被 X_i 预测出来的背景部分扣掉。每个用户校正后的指标写成:

注意,这里不是简单做差。θ 选得聪明,Ŷ 的方差才能最小;选得不好,反而可能放大噪声。CUPED 的标准做法是让 θ 取“最优回归系数”,即用预实验数据估计协方差与方差之比。手环不是摆设,它把每个人的“老本”提前记了账。教练从此能精准区分:谁掉秤靠天赋,谁掉秤靠训练——剩下的差异,才真正属于实验。

Y^i=Yi−θXi\hat{Y}_i = Y_i - \theta X_i
校正后的新指标 Ŷ_i = 实验观测值 − 背景预测值。它保留了实验干预带来的增量信息,去掉了凭历史数据就能猜到的“老底”。
  1. 实验观测值Y_i 是用户 i 在实验期间的指标读数,比如本期人均观看时长。
    YiY_i
  2. 预实验协变量X_i 是用户 i 在实验前的手环数据,例如前两周日均观看时长。
    XiX_i
  3. 回归系数θ 给出“X 对 Y 的预测斜率”——背景每高出一分,预测 Y 也跟着变化 θ 分。
    θ\theta
  4. 扣减动作减法把可预测的背景从观测值中抹去,剩下的就是相对纯净的实验增量。
    Yi−θXiY_i - \theta X_i
  5. 校正指标把每个用户都“换算到同一起跑线”,再比较两组才有说服力。
    Y^i\hat{Y}_i

方差缩减原理

为什么扣掉背景,噪声就变小了?还是看手环的魔力。学员们的体重变化里,有很大一块其实是可以预测的:基础代谢高的人、日常活动量大的人,就算不被训练,体重也自然往下走。这部分“有规律的漂移”,手环数据早就记录了。CUPED 把这部分预测出来后,剩下的随机毛刺——今天多吃夜宵、明天熬夜水肿——才是真正的噪声,天然就小得多。

数学上,“有规律的同步变化”用协方差 Cov(X, Y) 度量:X 高时 Y 也整体偏高,协方差就大。CUPED 选择让校正后方差最小的 θ,这个最优系数正好等于协方差除以 X 的方差——也就是 Y 对 X 做线性回归的斜率。代入后,校正指标的方差有一个非常优美的封闭解:

可见 CUPED 的方差缩减率完全由相关系数 ρ 决定:ρ=0.5 时,方差变为原来的 75%,同样功效下样本量打七五折;ρ=0.8 时,方差骤降到 36%,样本量只需原来的三分之一多一点。这就是为什么 CUPED 在实践中特别强调选协变量——ρ 的高低直接决定收益多寡。手环数据里藏着的“规律性”就是 ρ,ρ 越大,教练扣除的背景越准确,剩下的噪声越小。不过 ρ 不是天上掉下来的,它取决于教练挑了哪只手环指标。

θ∗=Cov⁡(X,Y)Var⁡(X),Var⁡(Y^)=Var⁡(Y)(1−ρ2)\theta^* = \frac{\operatorname{Cov}(X, Y)}{\operatorname{Var}(X)}, \qquad \operatorname{Var}(\hat{Y}) = \operatorname{Var}(Y)\bigl(1 - \rho^2\bigr)
第一式是“最佳扣除斜率”:X 每变 1,Y 平均变 Cov/Var。第二式是方差缩减公式:ρ 是 X 与 Y 的相关系数,ρ 越接近 1,缩减后的方差越小。
  1. 协方差刻画 X、Y 两列数据同步游走的程度,是公式的分子。
    Cov⁡(X,Y)=1n∑i=1n(Xi−Xˉ)(Yi−Yˉ)\operatorname{Cov}(X, Y) = \frac{1}{n}\sum_{i=1}^{n}(X_i - \bar{X})(Y_i - \bar{Y})
  2. 方差X 自身的离散程度,是公式的分母。
    Var⁡(X)=1n∑i=1n(Xi−Xˉ)2\operatorname{Var}(X) = \frac{1}{n}\sum_{i=1}^{n}(X_i - \bar{X})^2
  3. 最优系数协方差除以方差,即最小二乘回归斜率,保证校正后方差最小。
    θ∗=Cov⁡(X,Y)Var⁡(X)\theta^* = \frac{\operatorname{Cov}(X,Y)}{\operatorname{Var}(X)}
  4. 噪声比例1−ρ² 是“未被 X 解释的噪声比例”,ρ² 越大,留下的噪声越小。
    1−ρ21 - \rho^2
  5. 缩减后的方差原方差乘以 (1−ρ²),就是 CUPED 的最终收益。
    Var⁡(Y^)=Var⁡(Y)(1−ρ2)\operatorname{Var}(\hat{Y}) = \operatorname{Var}(Y)(1-\rho^2)

协变量选择

手环也不是随便发的。如果教练发给学员的是“颜值打卡记录”,和体重变化八竿子打不着,扣背景就像没扣一样;如果教练发给学员的是“训练期间是否偷吃零食”,那又不对了——这条数据已经受了训练计划的影响,拿它当协变量会偷走实验的功劳。所以,挑协变量有两条硬规矩加上一条保护原则。

第一条,X 与 Y 必须强相关。因为方差缩减率是 1−ρ²,ρ 越接近 1 越划算。第二条,X 必须独立于实验干预。协变量只能反映用户“天然的惯性”,绝不能受到 A/B 版本差异的影响。比如测“新推荐算法是否提升观看时长”时,用实验开始前的观看时长做协变量很合适;但若用实验期间的观看次数做协变量,就被实验干预污染了。第三条,X 必须在实验开始前确定指标口径,并在看到实验结果前固定下来,防止“挑出显著的那个再写报告”的 p-hacking。评估候选协变量是否合格,靠的就是相关系数:

实操中常用的协变量包括:目标指标在实验前一周到两周的均值、历史行为频率、活跃天数、历史转化次数等。比如电商测新首页的转化率,预实验期老用户的“周均加购次数”就是很好的协变量;短视频测新推荐流,用户“实验前日均观看时长”就是标准的 CUPED 协变量。教练最终挑了“自然状态日均步数+基础代谢”作为手环指标——既和体重变化强相关,又完全不受训练计划影响。协变量选对了,CUPED 才真正奏效。

ρ=Cov⁡(X,Y)Var⁡(X)⋅Var⁡(Y),0≤ρ<1\rho = \frac{\operatorname{Cov}(X, Y)}{\sqrt{\operatorname{Var}(X) \cdot \operatorname{Var}(Y)}}, \qquad 0 \le \rho < 1
这就是评估协变量好坏的“相关性公式”:用它计算候选 X 与 Y 的 ρ,选 ρ 最大、且满足独立性约束的指标作为手环。
  1. 分子协方差衡量 X 与 Y 的共变强度,是“手环指标”和“实验指标”的默契程度。
    Cov⁡(X,Y)\operatorname{Cov}(X, Y)
  2. 分母标准化两个标准差相乘,把分子缩放到 −1 到 1 之间的无量纲系数。
    Var⁡(X)⋅Var⁡(Y)\sqrt{\operatorname{Var}(X) \cdot \operatorname{Var}(Y)}
  3. 相关系数范围ρ 越接近 1,说明 X 能解释 Y 的确定性越高;等于 0 则毫无帮助。
    0≤ρ<10 \le \rho < 1
  4. 选择准则在满足独立性的候选变量里,挑 ρ 最大的那个做协变量。
    ρ→max⁡\rho \to \max

工程实现

手环数据选好了,教练开始做表。正式实验前两周,所有学员的手环数据录进系统;实验期一结束,系统自动跑一遍回归,给每个学员算出“校正后体重变化”,再比较两组。整个过程四步走,每一步都对应着算法代码里的一个模块。

工程上,CUPED 的标准流程是这样的:第一步,定义两个周期——预实验期(pre-experiment period)和实验期(experiment period),预实验期通常取实验开始前的一到两周,长度与实验期相当。第二步,在预实验期收集协变量 X_i,实验期积累目标指标 Y_i。第三步,用全部参与实验用户的预实验数据,按最小二乘法估计 θ。第四步,对每个用户计算校正指标 Ŷ_i,再构造两组均值差并做 t 检验。

工程落地上有几个要点:第一,θ 的估计一般用全部参与实验用户的预实验数据,样本量越大估计越稳;如果担心预实验期行为受版本影响,也可用对照组估计,两者差异通常很小。第二,协变量 X 必须在实验开始前“冻结”取值,防止被实验期干预污染。第三,计算调整指标后,原先习惯用的 t 检验公式照样适用,只是方差变小、统计量变大。许多实验平台(如微软的 Exp、字节的 Abtest 平台)都已把 CUPED 内置为默认选项。教练的四步表一行行对应着 CUPED 的工程链路:定周期、收手环、算斜率、扣背景后再比较。把公式固化成代码,实验系统就能在报告发布前自动完成这一切。

Y^=Yˉ−θ^Xˉ,θ^=∑i=1n(Xi−Xˉ)(Yi−Yˉ)∑i=1n(Xi−Xˉ)2\hat{Y} = \bar{Y} - \hat{\theta}\bar{X}, \qquad \hat{\theta} = \frac{\sum_{i=1}^{n}(X_i-\bar{X})(Y_i-\bar{Y})}{\sum_{i=1}^{n}(X_i-\bar{X})^2}
第一式:把两组的平均观测值整体减去“平均背景预测”,得到校正后的组均值。第二式:θ 的样本估计——样本协方差除以样本方差。
  1. 校正组均值把组平均观测值减去组平均背景预测,得到“纯净”的组水平。
    Yˉ−θ^Xˉ\bar{Y} - \hat{\theta}\bar{X}
  2. 交叉乘积和逐项把 X 的离差乘以 Y 的离差再求和,这是样本协方差的核心。
    ∑i=1n(Xi−Xˉ)(Yi−Yˉ)\sum_{i=1}^{n}(X_i-\bar{X})(Y_i-\bar{Y})
  3. 平方和把 X 的离差平方求和,这是样本方差的核心。
    ∑i=1n(Xi−Xˉ)2\sum_{i=1}^{n}(X_i-\bar{X})^2
  4. 斜率估计两者相除得到回归斜率,也就是实践中用的 θ。
    θ^=Cov⁡(X,Y)Var⁡(X)\hat{\theta} = \frac{\operatorname{Cov}(X,Y)}{\operatorname{Var}(X)}

效果提升

老板对教练说:“我只有 400 个体脂秤,够吗?”教练算了笔账:原来需要 1000 人才能跑出的实验,因为 CUPED 扣掉了 60% 的背景噪声,现在 400 人就能达到同样的统计把握。秤还是那些秤,学员还是那些学员,实验却能更早收工。

方差缩减带来的收益是多方面的,最常见的是三种换算。其一,保持统计功效不变,样本量可缩减为原来的 (1−ρ²),这就是常说的“省流量”;其二,保持样本量不变,统计功效上升,能检测出更小的效应量,即“更灵敏”;其三,样本量节省往往意味着实验可以提前结束,迭代更快。三者本质是同一笔账:

举个数值例子:若选中的协变量 ρ=0.7,则样本量几乎减半;若 ρ=0.8,则只需 36% 的样本,相当于一个 14 天的实验 5 天就能出结果。更敏锐地,相同样本量下可检测的效应量也随方差缩减而缩小,团队能用同样的流量测试更小但策略上真实的增量。教练在计划书上写道:“利用 CUPED,实验人数砍半、结论天数从 14 天缩到 7 天。”老板看完立刻批了。用更少的资源拿到同样可靠的结论,这就是方差缩减的硬价值。

Ncuped=Norig×(1−ρ2)N_{\text{cuped}} = N_{\text{orig}} \times (1 - \rho^2)
在维持原有统计功效(如 80% 功效、5% 显著性)的前提下,CUPED 所需样本量等于原样本量乘以未被解释的噪声比例。
  1. 原样本量N_orig 是做传统 A/B 测试所需的用户数量。
    NorigN_{\text{orig}}
  2. 噪声比例(1−ρ²) 是 X 解释不掉的那部分方差占比,也就是还残存的噪声。
    1−ρ21 - \rho^2
  3. 缩减后样本量两者相乘得到 CUPED 方案所需的新样本量。
    Ncuped=Norig×(1−ρ2)N_{\text{cuped}} = N_{\text{orig}} \times (1 - \rho^2)
  4. 数值直觉ρ=0.7 时样本量减半;ρ=0.8 时只需 36% 的样本。
    (1−0.72)=0.51,(1−0.82)=0.36(1 - 0.7^2) = 0.51, \quad (1 - 0.8^2) = 0.36

对比分层法

还有位同事给教练出了个主意:“这么多学员,何不先按高矮胖瘦分个层,每层里再比较两种训练方案?”教练一试发现:分层确实能消掉一部分身体差异,但层分得再细,每层里学员还是有差异;连续的身高体重信息被切成了几段,信息就这么被“离散化”扔掉了。

分层法(stratification)是经典实验设计方法:把用户按类别(设备、地区、会员等级)分成若干层 S,在每层内比较处理效应,再按权重合并。它之所以有效,是因为把用户间的某些差异“挡在层外”;但它的天生缺点是只能处理离散的、有限个层。面对连续协变量(观看时长、历史消费),分层必须人为切分,切分点选得不好反而损失信息。方差可以分解为层间方差和层内方差,分层只能消掉层间部分:

CUPED 与分层相比有三点优势:第一,协变量可以是连续型,不用人为分箱;第二,回归调整自动利用协变量与 Y 的所有线性信息,不被层数限制;第三,实现时只要加一个协变量参数,不需要预先定层,更灵活。两者并不互斥,实际实验平台常用“先分层再 CUPED”的组合拳:分层处理离散分类变量,CUPED 处理连续历史指标,彼此叠加,方差能再往下压。教练最终没用同事那种粗放的分层方案,而是手环加 CUPED 双管齐下;当然,如果学员里有特别的“性别层”,他也照样保留。最优秀的实验工程师从来不是二选一,而是像配餐一样,把分层和 CUPED 组合到同一张实验桌上。

Var⁡(Y)=Var⁡(E[Y∣S])+E[Var⁡(Y∣S)]\operatorname{Var}(Y) = \operatorname{Var}\bigl(E[Y\mid S]\bigr) + E\bigl[\operatorname{Var}(Y\mid S)\bigr]
总方差 = 层间方差 + 层内方差。分层消除的是第一项,CUPED 用连续回归把第二项也压缩了一大块。
  1. 层间方差不同层之间的平均水平差异,分层后这部分被固定住、不再算作噪声。
    Var⁡(E[Y∣S])\operatorname{Var}\bigl(E[Y\mid S]\bigr)
  2. 层内方差同一层内部个体仍然存在的差异,分层对这部分束手无策。
    E[Var⁡(Y∣S)]E\bigl[\operatorname{Var}(Y\mid S)\bigr]
  3. 总方差分解总噪声等于两者之和,想彻底降噪,两条路都要走。
    Var⁡(Y)=Var⁡(E[Y∣S])+E[Var⁡(Y∣S)]\operatorname{Var}(Y) = \operatorname{Var}(E[Y\mid S]) + E[\operatorname{Var}(Y\mid S)]

AI 应用场景

短视频推荐策略灰度实验

阶段:模型评估与实验分析

解决的问题:短视频 App 做新推荐算法的 A/B 验证时,北极星指标“人均观看时长”个体差异极大——有人每天刷两小时,有人一周只打开三次。直接比较实验组和对照组,方差巨大,实验要跑两三周才能显著。CUPED 用用户实验前一周的日均观看时长做协变量,剔除了“本来就爱刷”的用户固有差异,让策略增量更快显现。

具体案例:某短视频平台上线新推荐排序模型,传统 A/B 需要 14 天才能达到 95% 置信;引入 CUPED 后,使用用户历史播放时长作为协变量,第 8 天即出显著结论,样本需求减少约 40%,帮助算法团队一周内完成两轮迭代。

电商首页改版转化率验证

阶段:前端策略评估

解决的问题:电商平台改版首页信息流,要验证新布局是否提升下单转化率。但用户的购买力、活跃度差异极大:高活跃用户本身就常买,低活跃用户怎么改都不点。CUPED 用预实验期“周均加购次数”和“历史客单价”作为协变量,把用户固有的购买倾向扣除后,新布局的真实增量从噪声中浮出水面。

具体案例:某头部电商双十一前测试新首页,原实验需 200 万用户;用 CUPED 后仅需 90 万用户即可达到同等功效,将实验周期从 10 天压缩到 5 天,抢在大促前完成改版决策。

广告投放平台实验提效

阶段:广告模型效果度量

解决的问题:广告平台要评估新的竞价策略是否提升千次曝光收入(RPM)。但广告主质量、用户付费能力参差不齐,实验噪声巨大。CUPED 选取用户“实验前 7 天广告点击数”和“历史付费金额”作为协变量,让竞价策略的增量效果在更短时间内显著。

具体案例:某广告平台在冷启动新竞价模型时,用 CUPED 将实验所需流量降为原来的 45%,避免了大规模流量实验对收入的冲击,两周内完成了新模型的全量放量决策。

Python 演示

python38 行
import numpy as np  def generate_data(n, rho, effect, rng):    # 生成预实验协变量x, 分组group和实验期指标y    x = rng.normal(0.0, 1.0, n)    group = rng.integers(0, 2, n)    noise = rng.normal(0.0, 1.0, n)    y = effect * group + rho * x + np.sqrt(1.0 - rho * rho) * noise    return x, group, y  def t_stat(scores, group):    a = scores[group == 1]    b = scores[group == 0]    diff = a.mean() - b.mean()    se = np.sqrt(a.var(ddof=1) / a.size + b.var(ddof=1) / b.size)    return diff / se  def run_cuped_demo(n=800, rho=0.75, effect=0.12, seed=42):    rng = np.random.default_rng(seed)    x, group, y = generate_data(n, rho, effect, rng)    t_raw = t_stat(y, group)    ctrl = group == 0    theta = np.cov(x[ctrl], y[ctrl], ddof=1)[0, 1] / np.var(x[ctrl], ddof=1)    y_adj = y - theta * x    t_cuped = t_stat(y_adj, group)    var_raw = y.var(ddof=1) / n    var_adj = y_adj.var(ddof=1) / n    shrink = 1.0 - var_adj / var_raw    print("原始实验   t = %7.2f" % t_raw)    print("CUPED调整  t = %7.2f" % t_cuped)    print("方差缩减率   = %5.1f%%" % (shrink * 100))  if __name__ == "__main__":    run_cuped_demo()
目的:模拟一场 A/B 测试,对比传统 t 检验和 CUPED 校正后的统计量,直观展示方差缩减带来的显著性提升。
  1. y = effect * group + rho * x + np.sqrt(1.0 - rho * rho) * noise生成实验数据:效应项、协变量影响和独立噪声三部分叠加。
  2. group = rng.integers(0, 2, n)把用户随机分成对照组和实验组,对应 A/B 测试的随机分流。
  3. t_raw = t_stat(y, group)对原始观测指标计算 t 值,此时噪声较大。
  4. ctrl = group == 0选取对照组用户,用于估计回归系数,避免实验干预污染协变量关系。
  5. theta = np.cov(x[ctrl], y[ctrl], ddof=1)[0, 1] / np.var(x[ctrl], ddof=1)用样本协方差除以样本方差,得到最优回归系数 θ。
  6. y_adj = y - theta * x这就是 CUPED 的核心公式:从实验观测值中扣除背景预测。
  7. t_cuped = t_stat(y_adj, group)对校正后的指标重跑 t 检验,方差更小、t 值更大。
  8. shrink = 1.0 - var_adj / var_raw计算实际达到的方差缩减率,检验与理论值 (1−ρ²) 是否吻合。

常见误区

误区有些同学学完 CUPED 后觉得,回归校正会“引入偏差”,所以协变量应该选干净、和业务指标完全无关的变量,这样才安全。

正解恰恰相反!协变量必须与目标指标 Y 强相关,才能获得高缩减率;真正要独立的是协变量与实验分组(treatment)的关系。想象健身营的教练,手环测的步数和体重完全没关系,那扣背景等于白扣;但只要手环数据不受训练计划影响,它和体重越相关越有价值。

为何常见:大家容易把“相关性”和“因果污染”混为一谈,以为凡是和 Y 有关联的变量都会搞乱实验,却忽略了独立性约束真正指向的是“不受干预影响”。

误区学会了样本量公式 N×(1−ρ²) 后,就认为 CUPED 的唯一作用是把实验人数减少百分之几十,省点流量。

正解方差缩减的收益是一鱼三吃:可以省样本、可以提功效(检测更小效应)、可以缩周期。真实业务里,很多团队用 CUPED 并不是为了缩减流量,而是想在相同样本下提升实验灵敏度,捕捉那些微小却重要的策略增量,或者把两周的实验压缩到一周完成快速迭代。

为何常见:教程和面试题最常强调样本量缩减这个最直观的结论,让大家忽略了它只是“方差变小”之后的三种等价表述之一。

误区既然缩减率由 ρ 决定,那我实验跑完后,把手里十几个候选协变量都算一遍,哪个 ρ 最大就用哪个,报告里写“方差缩减 90%”。

正解协变量必须在实验开始前确定口径,不能拿同一份实验数据事后挑最优。反复尝试后用最大 ρ 报数,属于典型的 p-hacking,会让显著性结论虚高。正确的做法是实验设计阶段就基于预实验数据选定协变量,然后冻结不变。

为何常见:数据分析师习惯了探索性分析里“多试几个特征”的思路,忽略了 A/B 测试是确认性分析,任何事后选择都会破坏统计推断的有效性。

误区CUPED 方差缩减效果这么好,那它是不是也能消除分流不均、新奇效应、幸存者偏差这些系统性问题?

正解CUPED 只做一件事——把可预测的背景噪声从随机误差里挤出去,提升的是精度(precision),不是准确度(accuracy)。如果实验组和对照组本身就不随机(比如流量污染、自选择),协变量再多也无济于事。教练的手环能解释体重的“自然浮动”,但解释不了“有人偷偷报了另一个减肥班”这种系统性干扰。

为何常见:“方差”和“偏差”在中文语境里容易被混为一谈,很多人想当然以为方差小了,偏差也就一起没了。

误区分层是经典方法,CUPED 是新方法,它们是同一问题的两种竞争方案,用了 CUPED 就不用分层,反之亦然。

正解两者解决的是不同粒度的信息:分层只能处理离散类别(设备、地区),把用户切成有限块;CUPED 用连续回归充分利用协变量的全部线性信息。实际平台经常“先分层再 CUPED”,让离散变量和连续协变量各自立功,方差压缩效果叠加。

为何常见:教材喜欢把新旧方法并排比较,学员容易形成“非此即彼”的思维定式,忽略了工程实践中方法可以组合使用。

面试题

Q1. CUPED 中 "Pre-Experiment Data" 指哪段数据?

单选题 · easy

  • A.实验进行中的数据
  • B.实验开始前的数据← 正确答案
  • C.实验结束后的数据
  • D.随机生成的模拟数据

答案:B。CUPED 的全称是 Controlled-experiment Using Pre-Experiment Data,直译是“利用实验前数据的受控实验”。它的核心资产就是实验开始前收集的历史行为数据,相当于健身营学员入营前两周戴手环记录的“赛前摸底”数据——那段数据完全不受实验干预影响。

Q2. CUPED 技术最核心的作用是什么?

单选题 · easy

  • A.减少实验的时间成本
  • B.压缩指标的随机方差← 正确答案
  • C.增加实验的样本规模
  • D.消除选择偏差的影响

答案:B。CUPED 的本质是方差缩减技术:利用协变量 X 扣除可预测的背景,把指标中“自然波动”的那部分噪声挤出去,让均值差异更早显著。注意它不增加样本、也不消除系统性偏差,时间成本下降只是方差缩减带来的间接收益。

Q3. 最优回归系数 θ* 的表达式是什么?

单选题 · easy

  • A.Var(X) 与 Cov(X,Y) 的比值
  • B.Cov(X,Y) 与 Var(X) 的比值← 正确答案
  • C.Var(Y) 与 Cov(X,Y) 的比值
  • D.Cov(X,Y) 与 Var(Y) 的比值

答案:B。θ* = Cov(X,Y)/Var(X),即协方差除以方差,也就是 Y 对 X 做线性回归的斜率。它度量“背景 X 每变化一个单位,实验指标 Y 平均跟着变多少”。把分子分母看反是常见错误,可以类比“每公里耗油量”——分母是行驶里程,不是油箱容量。

Q4. 适合作为 CUPED 协变量的特征有哪些?

多选题 · mid

  • A.弱相关的历史指标
  • B.干预后的用户行为
  • C.预实验期的目标指标← 正确答案
  • D.与处理分组相互独立← 正确答案

答案:CD。协变量必须与 Y 强相关才有缩减价值(A 错),必须独立于实验干预(D 对),且要在实验前收集(C 对)。干预后的行为已经被实验影响,拿它当协变量会偷走实验的真实效应(B 错)。就像教练的手环必须在开营前戴,不能用训练中偷吃了多少零食来当基线。

Q5. 假设 X 与 Y 的相关系数 ρ=0.5,方差缩减倍率是多少?

单选题 · mid

  • A.1.50 倍
  • B.2.00 倍
  • C.1.33 倍← 正确答案
  • D.4.00 倍

答案:C。方差缩减倍率 = 1/(1−ρ²) = 1/(1−0.25) = 1/0.75 ≈ 1.33。注意这里求的是“倍率”而不是“缩减后的方差比例”。如果问缩减比例则是 1−ρ²=0.75,容易把 0.75 误当成 1.50 或填成 ρ²=0.25,需要看清题干。

Q6. 当相关系数 ρ 接近 0 时,CUPED 的效果如何?

单选题 · hard

  • A.方差无限缩小
  • B.方差保持不变← 正确答案
  • C.方差缩小一半
  • D.方差增大一倍

答案:B。Var(Ŷ)=Var(Y)(1−ρ²),ρ=0 时 1−ρ²=1,方差完全不变。这说明协变量若与目标指标毫无相关性,CUPED 就白做了。现实中选错协变量会出现这种“戴了手环却没用”的情况——手环记录的如果是对体重毫无影响的颜值打卡,扣背景就是空操作。

Q7. 与分层法相比,CUPED 的优势有哪些?

多选题 · hard

  • A.方差缩减上限更高← 正确答案
  • B.无需人为划分数据层← 正确答案
  • C.所需样本量更小← 正确答案
  • D.完全消除所有偏差

答案:ABC。CUPED 用连续回归自动利用协变量的全部线性信息,不损失信息,缩减上限更高(A 对);不需要预设离散层(B 对);同等功效下样本量更小(C 对)。但没有方法能“完全消除所有偏差”,系统性问题仍需随机化等其他手段解决(D 错)。

Q8. 标准 CUPED 中 θ 的估计基于哪个阶段的数据?

单选题 · mid

  • A.实验期间数据
  • B.实验后回访数据
  • C.实验前预实验数据← 正确答案
  • D.随机抽样模拟数据

答案:C。θ 必须用预实验期数据估计,因为这段数据不受实验干预污染。若用实验期间数据估计 θ,协变量和实验效应纠缠在一起,回归会错误地扣除掉部分真实处理效应。这就好比教练必须用入营前的“自然状态步数”来预测体重趋势,而不能用实验过程中已被训练计划影响的步数。

Q9. 若要保持原有统计功效,使用 CUPED 后所需样本量约为多少?

单选题 · hard

  • A.N × ρ²
  • B.N × (1−ρ²)← 正确答案
  • C.N / (1−ρ²)
  • D.N × ρ

答案:B。样本量缩减公式为 N_cuped = N_orig × (1−ρ²),其中 N_orig 是传统实验所需样本量。ρ=0.8 时只需 36% 的样本。选项 A 把缩减倍数和剩余比例搞反了;C 是“要达到同样置信区间反而需要的更大样本”,方向完全相反。

Q10. 在 CUPED 公式 Ŷ = Y − θX 中,X 代表什么?

单选题 · mid

  • A.实验期间的观测指标
  • B.预实验期的协变量← 正确答案
  • C.随机误差的噪声项
  • D.回归系数的估计值

答案:B。X 是用户 i 的预实验期协变量,比如实验前两周的日均观看时长,它是“手环数据”;Y 才是实验期间的观测指标;θ 是回归系数;噪声项并不会显式出现在这个公式里。四个角色分清后,CUPED 的“扣背景”逻辑就非常清晰了。