4. 实验指标设计:核心指标、代理指标、统计显著性、最小样本量计算
指标设计这事儿,说简单也简单,说复杂能让你掉一层皮。我见过太多团队,实验做了一堆,最后发现选的指标根本反映不了业务真实变化。嗯,今天咱们就把这块掰开揉碎讲清楚。
4.1 核心指标 vs 代理指标:你得知道自己在测什么
先问个问题:你为什么要做这个实验?
说白了,你想知道某个改动到底有没有带来业务价值。那什么能代表「业务价值」?这就是核心指标要回答的事。
核心指标:直接衡量业务目标的北极星指标。比如电商的 GMV、社交产品的 DAU、SaaS 的续费率。
代理指标:当核心指标观测成本太高或周期太长时,用来「近似」核心指标的替代指标。
举个例子。我在做推荐系统优化时,核心指标其实是「用户长期留存率」。但等一个月看留存?黄花菜都凉了。所以我们用「点击率」和「人均播放时长」作为代理指标。注意,代理指标必须和核心指标有强相关性,否则就是自欺欺人。
| 维度 | 核心指标 | 代理指标 |
|---|---|---|
| 定义 | 直接衡量业务目标 | 间接反映业务目标 |
| 观测周期 | 长(周/月/季度) | 短(天/小时) |
| 因果链路 | 直接因果 | 相关关系 |
| 风险 | 观测延迟大 | 可能偏离真实目标 |
| 典型场景 | LTV、GMV、留存率 | CTR、转化率、页面停留时长 |
我曾经踩过一个坑:用「页面停留时长」作为代理指标来优化内容推荐。结果实验组停留时长显著提升,但用户满意度反而下降了。后来一查,是因为推荐的内容太难懂,用户被迫花更多时间理解——这根本不是我们想要的效果。
所以记住:代理指标选不好,实验做得越漂亮,业务死得越惨。
4.2 统计显著性:别被随机波动骗了
实验组比对照组高了 2%,你就觉得改动有效?别急,这 2% 可能是随机波动。
统计显著性(p-value)就是帮我们判断:观察到的差异,到底是真实效果,还是抽样误差导致的偶然现象。
我个人习惯用这个标准流程:
- 设定零假设 H₀:实验组和对照组没有差异(μ₁ = μ₂)
- 设定备择假设 H₁:实验组和对照组有差异(μ₁ ≠ μ₂)
- 计算 p-value:在 H₀ 为真的前提下,观察到当前结果(或更极端结果)的概率
- 做出判断:如果 p-value < 显著性水平 α(通常取 0.05),拒绝 H₀,认为差异显著
你想想看,α=0.05 意味着什么?意味着即使实验没效果,每做 20 次实验,也会有 1 次「碰巧」显著。这就是第一类错误(假阳性)。
小技巧:如果你的实验涉及多个指标,记得做多重比较校正。我常用的方法是 Bonferroni 校正——把 α 除以指标个数。比如测 5 个指标,α 就设为 0.01。虽然保守了点,但能有效控制假阳性。
4.3 最小样本量计算:实验要做多久才够
这是实操中最容易被忽视的问题。样本量不够,实验跑再久也得不到可靠结论。
最小样本量的计算公式长这样:
n = (Z_α/2 + Z_β)² × 2σ² / δ²
其中:
- Z_α/2:显著性水平对应的 Z 值(α=0.05 时取 1.96)
- Z_β:统计功效对应的 Z 值(β=0.2 时取 0.84,功效=0.8)
- σ²:指标的方差
- δ:最小可检测效应量(MDE,Minimum Detectable Effect)
看着有点晕?没关系,我一般直接用 Python 算:
import scipy.stats as stats
import numpy as np
def min_sample_size(effect_size, alpha=0.05, power=0.8):
"""
计算双样本 t 检验的最小样本量(每组)
Parameters:
- effect_size: 标准化效应量(Cohen's d)
- alpha: 显著性水平
- power: 统计功效
Returns:
- n: 每组所需样本量
"""
z_alpha = stats.norm.ppf(1 - alpha / 2)
z_beta = stats.norm.ppf(power)
n = (2 * (z_alpha + z_beta) ** 2) / (effect_size ** 2)
return int(np.ceil(n))
# 示例:想检测 0.2 个标准差的效应量
print(min_sample_size(effect_size=0.2))
# 输出:393
这里有几个关键点:
- 效应量越小,需要的样本量越大。想检测 0.1% 的转化率提升?准备好几百万样本吧。
- 方差越大,需要的样本量越大。这就是为什么收入类指标比转化率指标难做——收入方差太大了。
- 统计功效通常设为 0.8。意思是如果真实效果存在,你有 80% 的概率能检测出来。剩下 20% 就是第二类错误(假阴性)。
我曾经犯过一个错误:在某个推荐算法实验中,我算出来每组需要 10 万样本,但当时流量只够跑 3 万。我心想「先跑着看看趋势」,结果跑了两周,p-value 一直在 0.06 到 0.12 之间晃悠,既不能确认有效也不能确认无效。白白浪费了两周流量。
所以我的建议是:样本量不够,宁可不做,也别做半吊子实验。
4.4 指标设计的完整流程
把上面这些串起来,我一般按这个步骤走:
- 明确业务目标:这次实验到底想提升什么?
- 选定核心指标:找到最能代表业务目标的那个数字
- 设计代理指标:如果核心指标观测周期太长,找相关性强的代理指标
- 确定效应量:和业务方对齐,多大的提升才算「有意义」
- 计算样本量:根据效应量、方差、显著性水平、功效,算出所需样本量
- 预估实验时长:样本量 ÷ 日均流量 = 最少需要跑的天数
- 设定显著性水平:默认 0.05,多指标时做校正
下面这张图把整个流程串起来了:
4.5 实操中的几个避坑点
最后分享几个我这些年攒下来的经验:
- 效应量别拍脑袋。我见过产品经理说「提升 1% 就算有效」,结果算出来样本量要跑三个月。这时候要么降低效应量预期,要么接受更长的实验周期。
- 方差估算要保守。用历史数据估算方差时,我习惯取过去 30 天的 90 分位值,而不是平均值。这样算出来的样本量更保险。
- 别忘了做 AA 检验。实验开始前,先跑一组 AA 实验(两组都用旧版本),验证分桶是否均匀、指标是否有系统性偏差。我遇到过好几次 AA 实验就显著的情况——后来发现是分桶逻辑有 bug。
- 关注实际显著性,别只看统计显著性。p-value 再小,如果效应量只有 0.01%,对业务来说可能毫无意义。统计显著 ≠ 业务显著。
我的个人习惯:每次实验上线前,我都会写一份「实验设计文档」,里面包含核心指标、代理指标、效应量、样本量、实验时长、显著性水平。这份文档会发给团队 review 一遍。别嫌麻烦——这一步能拦住 80% 的实验设计问题。