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,并根据业务逻辑进行分流。

当发布很酷的东西时,请第一时间通知我

订阅电子邮件,以获得我的最新文章。我不会向您发送垃圾邮件。随时取消订阅。