跳过正文

AB测试系列 - 如何提升测试的可靠性

·4400 字·
AB测试 统计 数据分析
EZ
作者
EZ
Take it EZ!
目录
AB-Testing - 这篇文章属于一个选集。
§ 2: 本文

如何提升A/B测试的可靠性
#

很多时候,A/B测试的结果无法保证其有效性,因为在试验开始前没有进行有效性检测,或实验设置不合理。 我们需要考虑多个因素以确保测试的有效性,否则可能会得出错误的结论,给公司和产品带来无法挽回的损失。 本文将介绍一些常见的方法,以提升A/B测试的可靠性,避免无效和错误的实验。

本文会涉及到一些统计学的知识,具体这方面的内容请参阅下一篇文章。

1. 常见的问题
#

1.1. SUTVA
#

稳定单元处理价值假设(Stable Unit Treatment Value Assumption,SUTVA)是指一个个体接受的处理不会影响到其他个体的结果,并且如果一个个体实际接受了某个处理,那么他的结果与他在假设接受该处理情况下的结果相同。

在一个实验中,不同的组之间也不能互相影响,下面举一个例子:

  • TikTok想通过改变视频排名的算法,来提高每个用户的的平均观看时长,这样做会遇到什么问题?
    • 当A组的用户观看一些视频,并产生了一些互动如:点赞、收藏、评论等,那这些视频很有可能会推荐给他们的朋友们
    • 收到推荐的用户可能会在B组里,所以这个例子里不同组之间存在着互相影响的可能
    • 这种也叫做溢出效应(Spillover Effect)

可以用群体作为一个整体进行随机分配(Group-based randomization),将有互相影响的个体限制在自己的组内,避免交叉影响。

1.2. 幸存者偏差
#

从不完整的数据集中得出结论,因为只有一小部分数据幸存下来了。

某新闻网站希望提升所有用户的总阅读时长。网站不断升级后,不喜欢的人越来越多了,但是少部分喜欢的人幸存了下来并且阅读时间增长了。结果访问网站的人数变少了,但是仍然留下来的用户使用时长在增加,导致了整体的阅读时长增加了。

1.3. 样本比例不匹配
#

样本比例不匹配(Sample Ratio Mismatch,SRM)是指在实验或AB测试中,实际分配到各组的样本数量与预期分配比例不一致的情况。

  • 常见原因:

    • 随机化过程中的错误:实现随机分配的算法或过程出现了问题。
    • 实验系统的故障:技术或系统错误导致样本无法按预期比例分配。
    • 用户行为的偏差:用户在选择进入不同组时出现非随机行为,例如由于某些页面加载速度不同导致用户行为改变。
    • 数据收集或记录错误:数据收集过程中出现漏记、重复记录或其他错误。
  • 如何检测SRM问题?

    • 用 \(\chi^2\) 或者 One Sample Z Test for proportion
  • 例子:

    • 20000个用户用来做实验,期望1:1划分两个组,但是对照组分了9000个用户,实验组分了11000个用户。
    • 问:在\(\alpha = 0.05\)的假设下,是否存在SRM问题?
    • \(H_o\): the ratio of sample is 1:1; \(H_a\): the ratio of sample is not 1:1 $$ \chi^2_o=\sum^K_{k=1}\frac{(O_k-E_k)^2}{E_k} = \frac{(9000-10000)^2}{10000} + \frac{(11000-10000)^2}{10000} = 200 $$
    • \(\chi^2_{\alpha=0.05, df=1} = 3.841\)
    • 因为 \(\chi^2_o > \chi^2_{\alpha=0.05, df=1}\), 所以有证据表明我们需要拒绝原假设,也就是说the ratio of sample is not 1:1
    • 当前样本存在比例不匹配的问题(SRM),我们需要修复相应的随机化算法或其他相关的问题后才能继续实验。

2. 常见的效应
#

2.1. 首因效应
#

首因效应(Primacy Effect)是指用户一开始并不适应新的改变,但是随着时间的增加用户开始适应了新的改变,并喜欢新的版本。

  • 这可能会增加犯第二类错误的概率:应该拒绝原假设,但是没有拒绝。
  • 解决方法:延长实验的时间

2.2. 新颖效应
#

新颖效应(Novelty Effect)是指影响只是暂时的,用户一开始对新的版本比较好奇,增加了使用时间,但是随着时间的流逝,用户逐渐失去了兴趣,指标回到了正常水平。

  • 这可能会增加犯第一类错误的概率:本质上两个版本没有区别,但是短期的结果显示我们需要去拒绝原假设。
  • 解决方法:
    • 对新老用户做实验,如果存在新颖效应,可以将新版本应用在新用户上
    • 延长实验时间

2.3. 节假日效应
#

节假日效应(Holiday Effect) 是指某些改动在节假日有显著的区别,可能是因为人们在节假日有更多的空闲时间等等原因,但是长期来讲并不会带来显著的区别。

  • 这可能会增加犯第一类错误的概率:本质上两个版本没有区别,但是节假日期间对结果产生的影响使我们需要去拒绝原假设。
  • 解决方法:应该避免在节假日期间做实验。

2.4. 周末效应
#

周末效应是指工作日与周末用户的行为会有很大的偏差,我们在做实验时最好将一周七天都包含在内

2.5. 工具效应
#

工具效应(Instrumentation Effect)是指由于测量工具或数据收集方法的变化引起的实验或研究结果的变化,而不是由于被研究对象的变化。

  • 可能出现的问题:
    • 随机化算法有bug
    • 改版的页面加载很慢,导致体验下降

2.6. 竞争效应
#

竞争效应(Competition Effect)是指当竞争对手在做一些运营活动时,你开始了AB测试。

短期内会对我们的用户产生影响,我会得到一个不准确的实验结果。在做实验前应该要洞察市场行情,了解竞争对手,避免在对方做活动时开启AB测试。

3. AB实验常用的技巧
#

3.1. AA测试
#

AA测试是指将两组数据在相同的版本下进行比较,判断数据本身是否有显著的区别。 与A/B测试不同的是,在A/A测试中,我们期望两组的结果没有显著的不同,而在A/B测试中,我们期望看到显著的不同。

如果分流科学,那么A/A实验几乎没有偏差,可以用来自验分流。

  • 假设:\(H_o\): Two groups are the same, \(H_a\): Two groups are different

  • 检验方法:卡方检验(Chi-Square Test)或 两比例/均值检验(Two Proportion/Mean Test)

  • 结论:

    • 未能拒绝 \(H_o\) => 进行A/B测试
    • 拒绝 \(H_o\) => Check Instrumentation Errors

3.2. AABB测试
#

  • AABB实验是指,在AB实验的基础上,将A组流量分为A1和A2,将B组流量分为B1和B2,对四组的结果进行对比。采用AABB实验的主要原因是总会有人想要验证实验分流是否均匀。
  • 例如,A1和A2组之间的结果差异很小,那么可以认为分组均匀。在AABB实验下,当A1A2组,B1B2组的组内差异很小,而AB组的组间差异很大时,更能够证明AB实验的有效性。

3.3. 反转实验
#

  • 反转实验(Reverse Test)是一种基于AB测试的实验设计方法,用于验证实验结果的可靠性。在反转实验中,会把A组和B组进行反转,即把A组的用户放到B组中,把B组的用户放到A组中,然后重新进行实验。如果反转实验的结果和原来的实验结果相同或接近,那么可以证明实验结果的可靠性比较高。
  • 反转实验的作用在于减少实验结果受到特定用户群体影响的可能性,比如用户特征、地域、时间等因素。通过反转实验,可以验证实验结果是否稳定和可复制,从而提高实验的可信度和科学性。

3.4. 父子实验
#

  • 父子实验,指的是在命中已有实验(父实验)某一实验组的用户中切分流量开一个新的实验(子实验)。
    • 新闻类App,父实验为是否向用户打开「娱乐」频道。后续在产品迭代进程中,在此基础上开启子实验,针对已打开「娱乐」频道的实验版本中的用户,提供不同功能布局和样式,以观测用户的使用时长和留存。
    • 电商平台,购物车设计三种按钮样式(A1、A2、A3),结算页面CTA按钮设计三种样式(B1、B2、B3),产品经理希望购物车和结算页面CTA的每种样式分别一一对应,如看见A1的用户进入结算页面后只能看到B1,以此类推。此时可在购物车开启父实验A,在结算页面CTA按钮上开启子实验B,实验版本流量逐一继承。

3.5. 多维下钻
#

  • 多维下钻(Multivariate Drill-down)是指通过将数据按照多个维度进行细分和分析,以深入了解实验效果在不同子群体或条件下的变化情况。这种分析方法可以帮助我们更细致地理解实验结果,并发现不同子群体之间可能存在的差异性。
    1. 用户分群下钻:将实验结果按照用户属性(如性别、年龄、地区等)进行分组,并分析不同用户群体之间的实验效果差异。通过这种方式,可以了解不同用户群体对实验变化的响应情况,以及确定是否存在特定群体的行为差异。
    2. 行为路径下钻:将实验结果按照用户的行为路径(如浏览页面顺序、点击行为序列等)进行分析,探索不同行为路径下的实验效果差异。通过这种方式,可以了解用户在不同行为路径下对实验变化的反应情况,以及确定是否存在特定路径的转化率差异。
    3. 时间维度下钻:将实验结果按照时间维度(如小时、天、周等)进行分组,并分析不同时间段内的实验效果差异。通过这种方式,可以观察实验效果随时间的变化情况,发现可能存在的时间相关性和周期性变化。

3.6. 多重比较校正
#

如果进行了多个假设检验(比如对多个指标进行检验),则需要进行多重比较校正,以控制犯第一类错误的概率。

  • 原因:
    • 累积错误率: 在进行多次比较时,每次比较都存在一定的假阳性(Type I Error)的风险,即错误地拒绝了真实的零假设。即使每次比较的显著性水平设置得很小(比如 \(\alpha = 0.05\)),但进行多次比较后,累积的错误率仍然会增加。这是因为在每次比较中,即使零假设是真实的,也有一定的概率会错误地拒绝零假设。
    • 多重比较问题: 多重比较问题是指进行多次假设检验时,存在对整体显著性水平的过度拒绝。当进行多次比较时,总会有一些比较出现假阳性,即错误地拒绝了真实的零假设。这就意味着即使每次比较的显著性水平被控制在 \(\alpha\) 的水平以下,整体的错误率仍然会超过 \(\alpha\)。
  • Bonferroni 修正
    • 比如要比较A、B、C三个页面设计方案,通过Bonferroni 校正需要将显著水平调整至\(\frac{\alpha}{3}=\frac{0.05}{3}=0.017\);然后再两两比较时(A 和 B、B 和 C、A 和 C),使用0.017来判断显著性
    • 例如,如果进行了10次比较,则新的显著性水平为0.05/10=0.005。
  • Holm 修正
    • Holm 方法是一种更加灵活的多重比较修正方法,它首先对每个 p 值进行排序,然后按照一定的顺序逐步修正每个 p 值的显著性水平。
    • 这种方法相对简单易行,并且在控制错误率方面通常比 Bonferroni 方法更有效。
    • 具体操作:
      • 计算出所有的p值,并按照从小到大的顺序排序(升序)
      • 对原始的显著性水平 \(\alpha\) 进行修正:\(\alpha_i = \frac{\alpha}{m-i+1}\),其中m是总共进行的假设检验的个数
      • 将每一个p值与其对应的\(\alpha\)进行比较,如果有个大于显著性水平则停止比较,否则继续。
    • 假设我们做了6个实验,并按照p值排序后,前面3个p值小于对应的\(\alpha\),第4个大于对应的\(\alpha\),那么不需要继续去比较了。前面三个我们可以得到拒绝原假设的结论,剩下的实验结果不显著。

3.7. 决策规则
#

尽量在实验前,制定好是否上线的规则。可以将下表当成参考:

业务指标 p值 决策
有明显提升 0.01 上线
有明显提升 0.08 谨慎上线;或者调大power重新实验
有提升但不明显 0.08 谨慎上线;或者调大power重新实验
降低了但不明显 0.08 丢弃当前新版本;或者调大power重新实验
有明显降低 0.01 丢弃当前新版本

另外需要注意的是:直接全量推送所有用户新的方案,风险过高。应当逐渐增多的方式进行推送更新(例如:1% -> 5% -> 10% -> 25% -> 50% -> 100%)

3.8. 留出集
#

当全量推送更新后,我们无法再与对照组进行比较。因为对照组里的用户也更新成了最新的版本。我们无法长期的去验证试验得出的结论。

留出集(Holdout Set)是指留出整体数据 5% - 10%,保证他们不被更新,用于长期的验证试验的结论。

AB-Testing - 这篇文章属于一个选集。
§ 2: 本文

相关文章

AB测试系列 - 理清业务问题
·3940 字
AB测试 统计 数据分析
在做AB测试前,我们必须要理清业务相关的问题。这方面会涉及到公司层面、产品层面、功能层面等相关重要的内容及指标,本文会对这方面做出详细的介绍。
SQL系列 - 查询语句
··3747 字
SQL 数据库 数据分析
本文主要描述如何对 SQL 里的数据进行查询。
SQL系列 - 操作语句(增、删、改)
·1373 字
SQL 数据库 数据分析
本文主要描述如何对 SQL 里的数据进行操作,例如:增加数据、删除数据、修改数据等等。
SQL系列 - 创建数据库与数据表
·2896 字
SQL 数据库 数据分析
本文主要描述如何创建数据库、数据表、以及相关的约束和数据类型。