返回文章

AB 实验原理与实践

目录

  1. AB 实验的原理
  2. AB 实验的作用
  3. 正交实验
  4. 联合实验
  5. 案例
  6. 分流原理
  7. AB 实验与定投的区别
  8. 创建实验
  9. 分流逻辑
  10. 实验固化
  11. 几个问题

1. AB 实验的原理

假设检验

  • 定义:通过反证法验证假设。如果一件小概率事件发生了,说明存在差异。
    • 示例:一个人宣称是中等水平射手,但第一次射箭只有 2 环(小概率事件,p 值),可以推断他大概率不是中等水平射手。

涉及原理

  • 大数定律:随着样本数量增加,样本均值会逐渐接近总体均值。
  • 中心极限定理:当样本量足够大时,样本均值的分布会趋近于正态分布,无论原始数据分布如何。

2. AB 实验的作用

定性效果

  • 判断业务策略是否有效(看 p 值)。
    • 如果 p 值小于显著性水平(如 0.05),则拒绝原假设,认为策略有效。

定量效果

  • 具体增长了多少(看置信区间)。
    • 例如,新策略比旧策略提升了 5%,但需要结合置信区间判断提升的可靠性。

p 值

  • 定义:表示“假设”和“数据”的关系,不代表关联度或是否有效,仅表示是否显著。
    • 一般取低于 0.05 表示显著。
    • 示例:p 值为 0.01,说明在原假设成立的情况下,观察到当前数据的概率仅为 1%。

置信区间

  • 定义:若实验推全,分组之间真实差异有 95% 的可能在这个范围内。
    • 上下限都大于 0 表示显著。
    • 包含 0 表示不显著。
    • 示例:95% 置信区间在 [0.88, 0.97] 范围内,说明真实值有 95% 的概率落在该区间。

3. 正交实验

目标

  • 正交实验的目标与互斥实验不同:
    • 如果目标一致,应采用互斥实验(非正交实验)。
    • 不同实验可以合并到同一个实验,实验的不同指标可以叠加。

分流方法

  • 通过统一分流 SDK,对 ID 随机打散保证不重复(如 MurmurHash: uid + salt)。

注意事项

  • 正交实验:2 * 2(2 个实验对应 4 种情况),但每个实验的字段应不同,否则无法确定应用哪个值。

4. 联合实验

  • 判断一组/个业务策略对全局的影响,不关注不相关的多个业务策略的全局影响。

5. 案例

转化率问题

  • 实验桶:采用新算法,流量占比 5%,转化率为 86%。
  • 基准桶:采用旧算法,流量占比 10%,转化率为 90%。
  • 假设检验:
    • p 值为 0.015,说明新算法比旧算法好 4%,甚至更好的概率是 0.015。

6. 分流原理

参考资料

假设

  • H0:A、B 没有本质差异。
  • H1:A、B 确实存在本质差异。

p 值

  • 根据 z 检验计算 p 值,若 p < 0.05,则取 H0。

置信区间

  • 是一个我们相当肯定会包含真实值的数据范围。
    • 示例:95% 置信区间在 [0.88, 0.97] 范围内。

7. AB 实验与定投的区别

  • AB 流量:随机分配。
  • 定投:定向投放。

8. 创建实验

流程

  1. 配置模块实验。
  2. 发布实验(实验桶未分配)。
  3. 发布新增的实验模块。
  4. 发布页面生效。
  5. 逐步提高实验桶占比(上线不开量)。

发布实验

  • 发布到 Diamond 或 Tair(与模块相关)。

9. 分流逻辑

全局实验

  • 客户端接实验 SDK 进行分流,接口调用时服务端拿到的是一个大 Map(K/V 对象),再根据分流信息做差异化楼层下发。
  • 前端实现:
    • 服务端将实验桶信息种入 Cookie,接口请求时传递给服务端。
    • 服务端根据桶信息获取对应规则,下发不同的组件名称。
    • 前端根据组件名称渲染不同的组件。

单楼层实验

  • 从实验平台获取实验,业务关联实验 ID。

10. 实验固化

页面实验固化

  • 走方案路由(路由到页面),然后实验下线。
    • 方案路由是一个配置。

单模块实验固化

  • 先实验下线(实验下线后会命中自然桶),然后删除非优胜模块。

全链路实验固化

  • 自动删除楼层并发布页面结构。
    • 若实验未推全,自然桶需保留,不能直接让所有排期过期。

字段实验固化

  • 手动配置优胜的排期字段。

冷启动处理

  • 客户端全局实验冷启动时,切 shipto 或 onboarding 欢迎页进入时会分流。
    • 实验数据统一存入内存,避免上下游开关不一致。
    • 即便实验下线,用户 App 仍保留之前的实验开关,会有流量进入自然桶,除非用户 Kill App 重新启动。

字段实验

  • 解决楼层实验需要拆楼层的问题。
    • 类型 1:排期实验:直接实验的分桶关联排期
    • 类型 2:字段实验:直接实验的分通关联字段。

数据实验

  • 当前支持有限,但可通过上传两份数据,实验命中不同数据。

11. 几个问题

  1. 单楼层实验如何分流?
    • 单楼层实验通过实验平台获取实验 ID,并根据业务逻辑进行分流。

References