4. 核心指标定义与口径

适用场景

本章适用于以下三类典型场景:

  • 指标口径对齐:实验分析前,数据组与业务组对核心指标的计算范围、数据来源、去重规则达成一致。
  • 结果量化解读:实验报告需要从“是否显著”升级为“效果有多大、区间有多宽、可信度多高”。
  • 决策争议仲裁:当统计显著性与业务实际感受矛盾时,通过效应量与置信区间辅助最终决策。

前置条件

  1. A/B 实验已运行至预定样本量或预定时间窗口,实验组与对照组数据已落库。
  2. 已完成数据清洗(去重、异常值过滤、机器人识别),数据质量通过验收。
  3. 业务方已确认核心转化事件定义(如注册、首单、付费等),且事件埋点已验证通过。
  4. 分析环境已安装 Python 3.8+ 及 scipy / statsmodels 库,或已有等效分析工具。

操作步骤

步骤1:定义转化率口径

转化率是A/B测试中最核心的度量,口径必须明确到“谁、做什么、在多长时间内、是否去重”。

口径维度 定义说明 常见陷阱
转化事件 用户完成的目标行为(如点击注册按钮、支付成功) 多个相似事件混用,未统一事件ID
计算单元 用户级(去重) or 事件级(可重复) 用户级转化率分母用总事件数,导致比率失真
观察窗口 用户进入实验后的固定时长(如7天、实时) 窗口长短不一,实验组与控制组窗口未对齐
过滤规则 排除测试用户、内部员工、异常设备 过滤规则不一致,引入样本偏差
口径记录示例:“转化率 = 进入实验后7天内完成首单支付的去重用户数 ÷ 进入实验的总去重用户数,数据来源为支付成功事件表,排除白名单用户与测试设备。”

步骤2:计算置信区间

置信区间是对转化率差异的区间估计,反映统计精度。使用 95% 置信水平,计算公式为:

# Python 示例:计算两组转化率差值的 95% 置信区间
import numpy as np
from statsmodels.stats.proportion import confint_proportions_2indep

n_control = 10000  # 对照组样本量
n_treat = 10000    # 实验组样本量
conv_control = 0.085  # 对照组转化率
conv_treat = 0.093    # 实验组转化率

count_control = int(n_control * conv_control)
count_treat = int(n_treat * conv_treat)

lower, upper = confint_proportions_2indep(
    count_treat, n_treat,
    count_control, n_control,
    compare='diff',
    alpha=0.05
)
print(f"转化率差异的 95% 置信区间: [{lower:.4f}, {upper:.4f}]")
# 输出示例: [0.0021, 0.0139]

置信区间的业务解读:

  • 区间不包含 0 → 差异在统计上显著。
  • 区间宽度 → 精度指标,宽度越窄说明估计越稳定。
  • 区间下限 > 业务最小可接受提升 → 即使取保守值也有收益,可果断上线。

步骤3:计算效应量

效应量衡量实验效果的实际大小,独立于样本量。推荐使用 Cohen's h 或相对提升率:

import numpy as np

p1 = 0.093  # 实验组转化率
p2 = 0.085  # 对照组转化率

# Cohen's h
h = 2 * np.arcsin(np.sqrt(p1)) - 2 * np.arcsin(np.sqrt(p2))
print(f"Cohen's h = {h:.4f}")

# 相对提升率
relative_lift = (p1 - p2) / p2
print(f"相对提升率 = {relative_lift*100:.2f}%")
效应量指标 计算方式 解读参考
Cohen's h 2(arcsin√p₁ − arcsin√p₂) 0.2=小效应,0.5=中,0.8=大
相对提升率 (p₁ − p₂) / p₂ × 100% 业务直接感知百分比
绝对差值 p₁ − p₂ 直接反映转化率变化绝对值
注意:大样本下微小差异也可能统计显著(p<0.05),此时必须结合效应量判断业务价值。效应量低于业务红线的结果即使显著也不应上线。

步骤4:判断统计显著性

统计显著性通过 p 值判断,p < 0.05 表示差异在统计上显著(拒绝零假设)。使用双样本 z 检验:

from statsmodels.stats.proportion import proportions_ztest

count = np.array([count_treat, count_control])
nobs = np.array([n_treat, n_control])

stat, p_value = proportions_ztest(count, nobs, alternative='two-sided')
print(f"z统计量 = {stat:.4f}")
print(f"p值 = {p_value:.6f}")

if p_value < 0.05:
    print("结论:在 95% 置信水平下,差异统计显著。")
else:
    print("结论:差异未达到统计显著性,需继续积累数据或接受零假设。")
决策交叉检查:统计显著 + 效应量达标 → 推荐上线;统计显著 + 效应量不达标 → 不推荐上线;统计不显著 + 效应量达标 → 需扩大样本量重新实验。
核心指标决策框架 核心指标决策框架 转化率 定义与去重口径 置信区间 估算精度与范围 效应量 实际效果大小 统计显著性 p值与零假设 需求决策 综合量化判定 四个核心指标从不同维度支撑决策:转化率提供基准,置信区间给出范围,效应量衡量大小,统计显著性判断可信度

输入输出物

类型 名称 格式/来源 责任人
输入 实验分组用户行为数据表 Hive / ClickHouse 表 数据工程师
输入 实验设计与分流配置文档 Confluence / 内部系统 产品经理
输出 核心指标计算表(含转化率、置信区间、效应量、p值) CSV / 分析报告 数据分析师
输出 指标口径定义清单 共享文档 / 代码注释 数据分析师

责任边界

  • 数据分析师:负责指标口径的书面定义、代码实现与计算校验;对口径变更进行版本管理;输出可复现的计算脚本。
  • 产品经理:提供业务转化事件的确认与验收;定义效应量的业务红线(如相对提升率 > 3% 才算有效);对最终上线决策负责。
  • 数据工程师:确保实验分桶数据的完整性、时效性与一致性;处理数据延迟或丢失等异常。
  • 技术评审人:对标指标口径定义,确保实验组与控制组计算逻辑完全一致,无暗含偏差。

记录材料

  1. 指标口径登记表:记录每个实验的转化事件ID、计算单元、观察窗口、过滤规则,由数据分析师维护。
  2. 分析脚本与输出日志:可复现的 Python / R 脚本,包含置信区间、效应量、p值计算全过程。
  3. 决策评审记录:统计显著性与效应量的交叉判定结果,以及产品经理的最终决策意见。

异常处理

异常现象 可能原因 处理措施
置信区间过宽,包含 0 且宽度 > 5% 样本量不足或转化率绝对值过低 继续积累数据,或更换更高频的代理指标
p < 0.05 但效应量接近 0 大样本下的微小差异被检测为显著 以效应量为准,判断业务价值是否达标
两组样本量偏差超过 5% 分流不均或数据流失 检查分桶逻辑与数据管道,修复后重新计算
口径定义在实验中途变更 业务规则调整或埋点修复 记录变更时间点,分段计算并注明版本

验收标准

  1. 转化率口径定义清晰、完整,包含分子分母、时间窗口、过滤规则,且实验组与对照组使用同一口径。
  2. 置信区间计算使用 95% 置信水平,区间上下界可复现,且与检验统计量逻辑自洽。
  3. 效应量至少输出相对提升率与 Cohen's h 中的一种,并给出业务解读阈值。
  4. 统计显著性检验结果与置信区间结论一致(区间不包含 0 ⇔ p < 0.05),无矛盾。
  5. 所有指标计算结果可通过独立脚本复现,且输出日志中无警告或报错。