概念

定义

AB测试是一种常用的实验设计方法,用于比较两个或多个(但必须是单变量)版本的产品、服务或功能,以确定哪个版本在用户体验、转化率或其他关键指标方面表现更好。在AB测试中,将用户随机(事实上要考虑怎么分组)分成几组,每组分配不同的版本,然后收集和分析每个版本的表现数据。通过AB测试,企业可以更好地了解用户行为和喜好,优化产品设计和营销策略,从而提升用户体验和业务表现。

拆解

  1. 对象:Web或App界面或流程或模型

  2. 要点:两个版本(A/B)或多个版本(A/B/N),同一时间维度,让组成成分相同(相似)的访客群组随机访问

  3. 目的:收集用户体验数据和业务数据,分析、评估、采用最好版本

    • 决策功能上线
      • 通过数据验证新功能的效果
      • 降低功能上线风险
      • 提供数据支持的决策依据
    • 效果评估与收益计算
      • 比较不同版本的优劣
      • 量化功能改进带来的收益
      • 评估改动的投资回报率
  4. 核心思想:
    (1)多个方案同时并行测试
    (2)每个方案只有一个变量不同
    (3)样本组同质化
    (4)以某种规则优胜劣汰

  5. 原理

  • 基于假设检验的统计方法
  • 通过对比同质样本组来评估改动效果
  • 原假设:改动对核心指标无显著影响
  • 通过p值判断是否拒绝原假设
  1. 本质
  • 同质样本的对照实验
  • 确保实验组和对照组具有相似的特征分布
  • 控制变量,只改变一个因素
  • 通过随机分组保证样本的代表性

步骤

  1. 分析现状,建立假设:分析业务,确定最高优先级的改进点,作出假设,提出优化建议。
  2. 指标设定:明确要测试的目标和假设。确定要比较的指标,例如点击率、转化率或用户满意度等。设置主要指标来衡量版本的优劣;设置辅助指标来评估其他影响。
  3. 版本制作:设计与开发,创建不同的版本(A、B),可以是网页、应用程序界面或功能的不同变体。
  4. 确定测试时长:确定测试进行的时长。
  5. 确定分组(分流)方案:将用户随机分配到不同的版本组(A组和B组),确定分流比例与批次(分流要保证同时、同质性),以确保实验结果的可靠性。
  6. 实施实验:在真实环境中展示不同版本给用户,收集用户行为数据或反馈。
  7. 数据收集:收集每个版本的数据,包括用户访问量、点击率、转化率等。
  8. 统计分析:使用统计方法分析数据,比较不同版本之间的差异是否显著。
  9. 结果解释:根据统计分析的结果,确定哪个版本在指定指标上表现更好。
  10. 结论与决策:根据实验结果,决定是否采用新版本或继续优化。①确定发布新版本;②调整分流比例继续测试;③优化迭代方案重新开发,回到步骤0。

特点

优点

  • 可以直观地比较不同版本的效果。
  • 可以减少决策的风险,基于数据做出决策。
  • 可以优化产品或服务,提高用户体验和转化率。

缺点

  • 难以平衡实验组的随机性和代表性
  • 控制实验环境,避免外部因素的干扰。
  • 必须确保样本量足够大,以获得可靠的结果。

辛普森悖论

定义

  • 在AB测试中,当数据被分组分析时,可能出现与整体数据相反的结论
  • 子组趋势与总体趋势不一致的现象

例子

假设我们在测试一个新的推荐算法,将用户分为实验组(新算法)和对照组(旧算法),并按用户活跃度分为高活跃和低活跃两组:

高活跃用户组

  • 实验组:1000个用户,点击率 5%
  • 对照组:2000个用户,点击率 4%
  • 结论:新算法效果更好(5% > 4%)

低活跃用户组

  • 实验组:2000个用户,点击率 2%
  • 对照组:1000个用户,点击率 1%
  • 结论:新算法效果更好(2% > 1%)

总体数据

  • 实验组:3000个用户,平均点击率 3%
  • 对照组:3000个用户,平均点击率 3%
  • 结论:新旧算法效果相同(3% = 3%)

悖论出现

  • 在分组分析时,新算法在两个用户组中都表现更好
  • 但在总体数据中,新旧算法表现相同
  • 原因:高活跃用户组中对照组用户更多,而低活跃用户组中实验组用户更多,导致总体数据出现偏差

产生原因

  1. 样本分配不均

    • 实验组和对照组特征分布不一致
    • 某些特征在组间分布不均衡
  2. 混杂因素影响

    • 存在未控制的变量影响结果
    • 不同组别受到不同因素的影响

影响

  1. 误导决策

    • 可能得出错误的实验结论
    • 影响产品优化方向
  2. 资源浪费

    • 基于错误结论进行优化
    • 造成时间和资源的浪费

避免方法

  1. 合理分组

    • 确保实验组和对照组特征相似
    • 使用分层抽样保证样本代表性
  2. 控制变量

    • 识别并控制可能的混杂因素
    • 使用协变量调整分析结果
  3. 多维度分析

    • 从不同维度验证实验结果
    • 关注子组分析结果

样本选择

  • 如何把样本分出来

随机

  • 随机数
  • 手机尾号为0

正交分桶

正交分桶(Orthogonal Bucketing)是一种在实验设计中常用的技术,用于确保实验组和对照组之间的分组是相互独立且均匀的
正交分桶的目的是减少实验中(随机分组导致的)因变量分布不均匀而引起的偏差,从而使实验结果更加可靠和准确。

  • 可能是一个实验组,两个对照组。为了保证两个对照组之间再做一次平稳性实验。

实现步骤

  • 确定维度:首先确定用于分组的维度,可以是用户属性(如年龄、性别)、行为特征(如点击次数、购买记录)等。
  • 创建分桶:针对每个维度,创建多个不同的分桶(桶),确保每个桶在实验组和对照组中都有相等数量的用户。
  • 组合分桶:将不同维度的分桶进行组合,确保每个组合在实验组和对照组中都有相等数量的用户。
  • 随机分配:最后,将用户随机分配到不同的组合中,以确保实验组和对照组之间的分组是相互独立的。

特点

优点
  • 减少偏差:通过正交分桶,可以减少由于变量分布不均匀而引起的偏差,使实验结果更加可靠。
  • 结果可靠性:确保实验组和对照组之间的分组是均匀和独立的,有助于获得更准确和可信的实验结果。
缺点
  • 维度选择:选择合适的维度进行分桶,确保维度之间相互独立。
  • 分桶数量:合理确定每个维度的分桶数量,以确保每个组合中都有足够的用户。
  • 随机性:确保随机分配用户到不同组合中,以消除其他因素对实验结果的影响。

确定分布与检验方式

  • 概统知识

分布

正态分布

  • 定义:连续型随机变量的概率分布,呈钟形曲线
  • 概率密度函数
    $$
    f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}
    $$
    其中:
    • μ:均值,决定分布中心位置
    • σ:标准差,决定分布离散程度
    • π:圆周率
    • e:自然对数的底数
  • 特点
    • 对称性:以均值为中心对称
    • 集中性:约68%的数据落在[μ-σ, μ+σ]区间
    • 渐近性:向两端无限延伸
  • 应用
    • 大样本均值分布
    • 误差项分布
    • 自然现象测量值
  • 标准化
    将正态分布转换为标准正态分布:
    $$
    Z = \frac{X - \mu}{\sigma}
    $$

t分布

  • 定义:小样本下的均值分布
  • 概率密度函数
    $$
    f(t) = \frac{\Gamma(\frac{\nu+1}{2})}{\sqrt{\nu\pi}\Gamma(\frac{\nu}{2})}(1+\frac{t^2}{\nu})^{-\frac{\nu+1}{2}}
    $$
    其中:
    • ν:自由度
    • Γ:伽马函数
  • 特点
    • 比正态分布更扁平
    • 自由度越大越接近正态分布
    • 尾部更厚
  • 应用
    • 小样本均值检验
    • 回归系数显著性检验
    • 配对样本检验
  • t统计量
    $$
    t = \frac{\bar{X} - \mu}{s/\sqrt{n}}
    $$
    其中:
    • $\bar{X}$:样本均值
    • μ:总体均值
    • s:样本标准差
    • n:样本量

f分布

  • 定义:两个独立卡方分布随机变量之比的分布
  • 概率密度函数
    $$
    f(x) = \frac{\Gamma(\frac{\nu_1+\nu_2}{2})}{\Gamma(\frac{\nu_1}{2})\Gamma(\frac{\nu_2}{2})}(\frac{\nu_1}{\nu_2})^{\frac{\nu_1}{2}}x^{\frac{\nu_1}{2}-1}(1+\frac{\nu_1}{\nu_2}x)^{-\frac{\nu_1+\nu_2}{2}}
    $$
    其中:
    • ν₁:分子自由度
    • ν₂:分母自由度
  • 特点
    • 非负性
    • 右偏分布
    • 有两个自由度参数
  • 应用
    • 方差分析
    • 回归分析
    • 方差齐性检验
  • F统计量
    $$
    F = \frac{s_1^2/\sigma_1^2}{s_2^2/\sigma_2^2}
    $$
    其中:
    • s₁², s₂²:样本方差
    • σ₁², σ₂²:总体方差

检验

t检验

  • 样本情况:适用于小样本,并且未知分布与统计量(标准差未知)
  • 数据类型:适用于连续型数据,常用于比较实验组和对照组之间的均值差异,例如药物疗效、广告效果等。
  • 假设条件:基本假设是数据服从正态分布,且方差相等。
  • 统计量:以t统计量为基础,通过比较样本均值与总体均值差异和样本方差来进行假设检验。
  • 计算公式
    1. 单样本t检验:
      $ t = \frac{\bar{X} - \mu_0}{s/\sqrt{n}} $
    2. 独立样本t检验:
      $ t = \frac{\bar{X}_1 - \bar{X}_2}{\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}}$
    3. 配对样本t检验:
      $t = \frac{\bar{d}}{s_d/\sqrt{n}} $
  • 置信区间
    $ \bar{X} \pm t_{\alpha/2}(n-1)\frac{s}{\sqrt{n}} $

z检验

  • 样本情况:适用于大样本,并且已知分布与统计量(标准差已知)
  • 数据类型:一般适用于连续型数据二项分布数据,例如人口比例、产品质量、广告点击率等。
  • 假设条件:基本假设是数据服从正态分布,且已知总体方差。
  • 统计量:以z统计量为基础,通过比较样本均值与总体均值之间的差异来进行假设检验。
  • 计算公式
    1. 均值检验:
      $ z = \frac{\bar{X} - \mu_0}{\sigma/\sqrt{n}} $
    2. 比例检验:
      $ z = \frac{\hat{p} - p_0}{\sqrt{\frac{p_0(1-p_0)}{n}}} $
  • 置信区间
    $ \bar{X} \pm z_{\alpha/2}\frac{\sigma}{\sqrt{n}} $

卡方检验

  • 样本情况:主要用于比较观察到的分类数据与期望的理论分布之间的差异,包括独立性检验拟合度检验等。
  • 数据类型:适用于分类数据,通常以频数或频率的形式呈现。
  • 假设条件:基本假设是数据符合特定的理论分布,如服从正态分布或其他特定分布。
  • 统计量:以卡方统计量为基础,通过比较观察频数和期望频数之间的差异来进行假设检验。
  • 计算公式
    1. 拟合优度检验:
      $$\chi^2 = \sum_{i=1}^{k}\frac{(O_i - E_i)^2}{E_i}$$

    2. 独立性检验:

      $$\chi^2 = \sum_{i=1}^{r}\sum_{j=1}^{c}\frac{(O_{ij} - E_{ij})^2}{E_{ij}}$$

    其中:

    • O:观察频数
    • E:期望频数
    • k:类别数
    • r:行数
    • c:列数

样本量确定

  1. 影响因素

    • 预期效果大小(δ)
    • 显著性水平(α)
    • 检验效能(1-β)
    • 总体方差(σ²)
    • 实验设计类型
  2. 计算方法

    • 基于效应量:
      $ n = \frac{2(Z_{\alpha/2} + Z_{\beta})^2\sigma^2}{\delta^2} $
    • 基于比例:
      $ n = \frac{(Z_{\alpha/2} + Z_{\beta})^2p(1-p)}{\delta^2} $
    • 基于相关系数:
      $ n = \frac{(Z_{\alpha/2} + Z_{\beta})^2}{(\ln\frac{1+r}{1-r})^2} + 3 $
  3. 样本量调整

    • 考虑流失率:
      $ n_{adjusted} = \frac{n}{1-r} $
      其中r为预期流失率
    • 考虑分层因素:
      $ n_{strata} = \sum_{i=1}^{k}\frac{n_i}{w_i} $
      其中w_i为各层权重

检验结果

假设检验的两类错误

假设检验是一种推断统计方法,用于根据样本数据对总体参数做出推断。在假设检验中,通常会建立两类假设:原假设(𝐻0​)和备择假设(𝐻1)。

第一类错误——“去真”

  • 定义:第一类错误指的是当原假设为真时拒绝原假设的错误。换句话说,第一类错误发生在我们错误地认为有显著性差异,而实际上并不存在显著性差异的情况下。
  • 表示:第一类错误的概率通常用 𝛼 表示,称为显著性水平,通常取0.05或0.01。
  • 数学表达
    $$
    P(拒绝H_0|H_0为真) = \alpha
    $$
  • 结果:如果发生第一类错误,我们会错误地拒绝原假设,认为发现了显著性差异,但实际上并没有。
  • 控制方法
    • 降低显著性水平α
    • 增加样本量
    • 使用更严格的检验标准

第二类错误——“存伪”

  • 定义:第二类错误指的是当备择假设为真时未能拒绝原假设的错误。换句话说,第二类错误发生在我们未能发现实际存在的显著性差异的情况下。
  • 表示:第二类错误的概率通常用 𝛽 表示。
  • 数学表达
    $$
    P(接受H_0|H_1为真) = \beta
    $$
  • 结果:如果发生第二类错误,我们未能拒绝原假设,认为没有发现显著性差异,但实际上存在显著性差异。
  • 控制方法
    • 增加样本量
    • 提高检验效能(1-β)
    • 选择合适的检验方法

检验效能

  • 定义:正确拒绝错误原假设的概率
  • 数学表达
    $ Power = 1 - \beta = P(拒绝H_0|H_1为真) $
  • 影响因素
    • 样本量
    • 效应量
    • 显著性水平
    • 检验方法

例子

  • 原假设是”给潜在客户发短信没用”,第一类错误就是”确实没用但我们认为有用”,第二类错误就是”发短信有用但我们接受了发短信没用的原假设”
    • 事实上就应该管它有没用多发点,
    • 此时应该更严格控制第二类错误
  • 数学表达
    $ H_0: \mu_{短信} = \mu_{无短信} $
    $ H_1: \mu_{短信} > \mu_{无短信} $
    其中μ表示平均转化率

置信度与置信区间

  • 假设检验的过程中,我们往往采用样本数据特征来估计整体的数据特征
  • 中心极限定理里,我们知道从总体中进行N次样本抽取,N次样本的均值会围绕总体均值上下波动
  • 因此,置信区间就是为总体的均值提供了一个可波动的范围,置信区间与置信度是相对应的。
  • 例如,在95%的置信度下,置信区间为[a,b],也就是说,抽取100次样本,其中有95次样本的均值能够落在[a,b]范围内。

置信区间计算

  1. 总体均值置信区间

    • 总体标准差已知:
      $ \bar{X} \pm z_{\alpha/2}\frac{\sigma}{\sqrt{n}} $
    • 总体标准差未知:
      $ \bar{X} \pm t_{\alpha/2}(n-1)\frac{s}{\sqrt{n}} $
  2. 总体比例置信区间
    $$
    \hat{p} \pm z_{\alpha/2}\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}
    $$

  3. 总体方差置信区间
    $$
    \frac{(n-1)s^2}{\chi^2_{\alpha/2}(n-1)} \leq \sigma^2 \leq \frac{(n-1)s^2}{\chi^2_{1-\alpha/2}(n-1)}
    $$

置信区间宽度

  • 影响因素
    • 样本量n
    • 置信水平1-α
    • 总体标准差σ
  • 数学表达
    $ Width = 2 \times z_{\alpha/2}\frac{\sigma}{\sqrt{n}} $
  • 样本量确定
    $ n = (\frac{2z_{\alpha/2}\sigma}{Width})^2 $

如何设定p值

  1. p值定义

    • 在原假设为真的条件下,获得当前或更极端结果的概率
    • 数学表达:
      $ p = P(T \geq t_{obs}|H_0) $
      其中t_obs为观察到的检验统计量值
  2. p值解释

    • p < α:拒绝原假设
    • p ≥ α:接受原假设
    • 通常α取0.05或0.01
  3. p值计算

    • t检验:
      $ p = 2P(T \geq |t_{obs}|) $
    • z检验:
      $ p = 2P(Z \geq |z_{obs}|) $
    • 卡方检验:
      $ p = P(\chi^2 \geq \chi^2_{obs}) $
  4. p值注意事项

    • 不是效应量
    • 受样本量影响
    • 不能直接比较
    • 需要结合效应量解释

灰度发布

定义

在黑与白之间,能够平滑过渡的一种发布方式。
AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。
灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

灰度实现思路

当某个实验效果非常好时,可以动态调整该实验的流量占比,从而迅速得到收益,并且在大流量上验证该实验的有效性。一旦确认该实验效果非常良好,便可以在全流量上线。

应用场景

  • 比如开发完成一个新功能,但线上用户量很大,不确定全量发布后功能效果或者反馈如何,担心会存在潜在的问题。此时,可以使用灰度发布,逐步发布1%、5%、30%、50%、100%流量,在增量发布的过程中根据用户反馈来进行实时调整流量大小,或者回滚。
    • 比如想在十一假期期间针对线上用户做一个活动,需要提前完成准备工作,那么您可以设置定时发布,如每天发布10%流量,共发布7天。
  • 比如已通过A/B实验决策出优胜版本,可以直接将优胜版本全量固化至Feature,即通过Feature的方式立即实现全量发布。

问题集

1.【如果abtest结果显著可信但后续版本上线后目标指标反而相比原先的下降了,后续如何迭代优化?】

  • 先查原因,为什么指标下降了,确定问题出在哪。
    • 拆分各种维度调研该指标下降原因,拿到事实(上线后用户组成、产品功能、策略相比之前是否变化)
    • eg
      • 只有ios降,安卓正常,或者上下链路某个环节数据差异很大,大概率是ios包有bug。找开发/算法。
      • 只有某些国家地区降,看节假日政策运营活动问题。找pm/运营。
  • 若变化,可能是其他原因。若不变,可继续扩大样本量测试/回滚至A组版本观测指标是否回升至原来水平/给对照组再设置一个对照组,严格检验两个对照组的平稳性,防止对照组被污染了。
    • Abtest有成本,不要一上来就重开,否则一个迭代要做好久。查好,有必要,再调整着重开实验。
    • 两两组间有5%犯错概率,每增加一组,整个实验出错概率大大增加,一般也不建议开aabb实验。
  • 若确定ABtest结果不行,如果该策略/功能没有明显效果就下掉