火山引擎DataTester是科学可信的A/B测试与智能优化平台,源自字节跳动长期沉淀,能够深度耦合推荐、广告、搜索、UI、产品功能等多种行业场景需求,为业务增长、转化、产品迭代,运营提效等各环节提供科学的决策依据,让业务真正做到数据驱动。目前,火山引擎DataTester已经服务了美的、得到、凯叔讲故事等在内的上百家标杆客户,将成熟的 " 数据驱动增长 " 经验赋能给各行业。
 
想真正掌握A/B实验,你不仅要知道“你该做什么”,更重要的是,你还要明白自己“不该做什么”。这篇文章中,我们就为大家总结了A/B实验中常见的8个错误,一起来看看吧。
 

No.1 发生AA置信则否定分流服务/统计

通常来说,在AB实验平台中,利用AA实验来验证分流服务是否运转正常,这一举措确有其合理性。然而,一旦发生AA置信,则一口咬定是分流服务/数据统计出了问题,这就存在一些理解偏差了。
 
我们在解释显著性水平的时候已经提过,在检验假设的过程中,会犯第一类错误——我的策略没有用,但实验结果显示我的策略有用。在95%的显著性水平下这类错误出现的概率是5%,即我们开100次AA实验,然后观测某个指标,可能会有5次得到显著的结果。这是由于不可避免的抽样误差所导致的。
 
因此,如果AA实验指标差异呈现统计显著,也不过是一个概率问题;相反,假设检验正是利用「抽样误差」来帮助我们量化犯错的概率,并将其控制在5%以内的(95%显著性水平下),也就是说,如果我们观测到AB显著的结论,犯错的概率就是p-value的大小。综上,发生AA置信的情况属于正常现象。
 

No.2 忽略过度曝光

什么是过度曝光?在开设实验时,大量并没有体验到实验版本功能的用户被计入到了实验指标的分母中,导致指标值被稀释(实验中涉及的功能可能“入口较深”,用户打开应用后其实并没有进入到这一功能,但仍然被算作了进组用户,参与了指标计算)。
 
「指标被稀释」对实验数据分析的影响主要体现在:实验中,有效样本量低于“实际统计到的进组用户量”,有效数据中引入了噪声,因此实验达到统计显著性需要更长的时间;同时由于指标被稀释,提升值的置信区间也存在一定的统计误差。
 
 

No.3 多重比较问题

多重比较会导致统计指标犯错的概率更高。以假设检验为理论依据的A/B实验,仅适用于A、B两组进行对比的场景,能够帮助大家从A策略和B策略之中选择一个更好的:在95%的置信水平下,假设新策略没用,我们做一次对比,犯第一类错误(即我的策略没用,但实验结论显示我的策略有用)的概率是5%。但是,如果实验是AABB实验,或者ABCD实验,或者ABCDEFG实验等,那么情况就截然不同了——我们将面临多重比较问题:当实验组多于2组时,我们犯错的概率将大大增加,不再是5%。
 
以ABCD实验为例:假设策略A、B、C、D间没有明显差异,我们对ABCD两两对比,共计有6种组合,需要进行6次对比。6次对比中只要有一次犯错,我们的结论就算犯错,因此每个统计指标的犯错概率就变为了1-(1-5%)^6=26.5% ,远大于5%。
 
另外需要注意的一点是,假设检验以「AB没有明显差异」为原假设,B相对于A所得到的p-value,并不等同于B比A好的概率就是1-(p-value)。也正是因此,当存在多重比较的情况时(特别是各组策略没有明显的优劣差异甚至是旗鼓相当时),假设检验难以提供判断哪个策略最优的标准。以上两个问题大大增加了我们评估ABCD谁更优的难度以及决策出错的风险
 

No.4 为显著而显著

什么叫做为显著而显著呢?在实际的业务过程中,我们发现这种错误主要体现为2种情况:
 
  • 关注过多无关紧要的指标,只要一个指标显著,即认为策略有效。
我们一再强调,在实验中,我们要明确目标,提前确定哪些指标能够真正衡量实验效果,并把这部分指标定为实验中要观测的核心指标。如果我们在实验中观测过多指标,众多无关紧要的指标中,碰巧出现显著是很正常的情况。实验者很可能被这种显著误导,进而认为他的策略有效。
 
  • 对核心指标进行多维度下钻,指标在某一维度上呈现显著,即认为策略有效。
实验报告中,有些指标会带有一个M样符号,这表示该指标虽然总体上不显著,但在多维下钻的情况下,该指标于某一维度上呈现显著。
 
部分实验者会在分析实验结果时认为:在新策略的影响下,指标在某一维度下显著了,那么我的策略肯定是有效的。然而实际上,这种理解并不准确。
 
举个例子:假设一款APP的用户分布于5个国家,有3种客户端,那么将国家和客户端组合起来,我们可以下钻出15个维度。某指标在其中一个维度下偶然呈现显著的可能性有多高呢?
经过计算可知,有超过50%的可能出现显著。因而,利用某一维度下的显著来验证策略的效果是并不合理的。
 
综上,坚持实验设计阶段确定的目标和评估标准,不要为了获得统计显著的结论而将原定核心指标更换为其他因果关系弱的指标;也不要过度分割数据。如经分析,确定新策略确实对某人群属性有特殊的影响,建议更新实验目标,再开一个针对该人群的定向A/B实验进行二次评估。
 

No.5 实验显著就立刻停止实验

在字节的数据分析师中有一句流行的话:“不要过早看实验报告。”什么意思呢?就是达到预估的样本量(也可以理解为达到预设的实验天数)之前,不要过早地去看实验结果,因为这种时候实验结果有可能会显著,你会忍不住想要停下实验,并用目前的显著结果作为实验结论,然而这是不正确的做法。
 
对于实际没有显著差异的实验(可以理解为新策略无效),在实验初期进行观测,指标也很有可能出现显著,这种情况我们称之为假阳性。我们使用假设检验来量化抽样误差的理论需建立在「满足一定的样本量」这一前提之上,当样本量不足时,抽样误差对指标的影响会更大。随时间的延长,实验样本量不断增加,p-value取值也会发生变化,待进组用户累计达到预估样本量的时候,实验结论可能从前期的假阳性变为不显著。
 
来看下图中的例子,这在这个AA实验中,预估的样本量是5000。从图中可以发现,实验在中期达到显著(置信度95%以上);随着样本量的逐渐增多,实验结论最终固定为不显著。
因此,在实验未达到预估样本量之前,显著性可能会在显著和不显著之间来回波动,过早决策的实验结论是不可靠的。字节自己的A/B测试平台——DataTester推荐用户使用多天累计指标来进行指标观测。从业务角度来讲,多天累积指标本身存在天与天间波动,且周末和工作日表现差异较大,建议实验运行整数个完整自然周后,再做实验决策。
 

No.6 实验不显著就不停止实验

与错误No.4相反,在这种情况下,实验者会持续开启实验,直到实验显著。
 
A/B实验中,无论A策略与B策略多么相像,他们终归是不一样的。理论上来说,只要样本足够多(比如无穷多时),实验组和对照组策略的任何一点差异都会致使实验结果形成统计显著。比如一个实验开启了整整10年,新策略使指标提升0.001%,且统计显著,但这种显著意义不大。
 
因此在实验中,应该遵从实验设计,如果实验已经在预期运行周期内达到所需的样本量,但目标指标变化仍然不显著,那这个实验没有必要继续运行了,停止实验换个方向继续尝试吧。
 

No.7 认为策略上线后提升值应与实验相同

假设现在开了一个实验来优化商品页面的用户购买率,其中采用了新策略B的实验组,购买率提升了为3%,且结论置信,这是不是代表策略B全量上线之后,该商品页面的购买率就一定能提升3%呢?并非如此。因为在A/B实验中我们采取小流量抽样的方式,样本不能完全代表总体。
 
正确的数据是通过假设检验,结合显著性水平,咳估算出提升值的范围,这一范围被称为置信区间。假设在前面的例子里,经过计算,置信区间为[1.5%,4.5%],那么在策略B实际上线后,预估区间[1.5%,4.5%]将有95%的可能包含真实的购买率增长率(如果显著性水平取0.05的话)。
 
综上,如果你想知道新策略上线后,指标可能发生的变化情况,可以参考置信区间。
 

No.8 完全地唯数据至上

我们倡导用数据说话,不主观臆断,在评估实验时不仅要看指标的提升量,还要结合置信度来判断数据的可靠程度。然而,在部分情况下,数据仅能传达给我们片面的信息,还需要我们基于数据背后的事实进行因果推断,以保证数据论据与要证明的论点之间是具有合理的因果关系的,这样数据才是我们论证观点的有效利器。否则,我们就仅仅只是单纯地拥有数据而已。
 
在实验中,我们需要根据自身的业务判断,合理设计实验,明确预期;当 A/B 实验结果违背我们的业务直觉时,应当保持怀疑。

火山引擎DataTester分享:A/B实验中常见的8个错误的更多相关文章

  1. 火山引擎 DataTester:让企业“无代码”也能用起来的 A/B 实验平台

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 当数字化变革方兴未艾,无代码正受到前所未有的关注.Salesforce 的数据显示,52%的 IT 部门表示,公司 ...

  2. 随机记录工作中常见的sql用法错误(一)

    没事开始写博客,留下以前工作中常用的笔记,内容不全或者需要补充的可以留言,我只写我常用的. 网上很多类似动软生成器的小工具,这类工具虽然在表关系复杂的时候没什么软用,但是在一些简单的表结构关系还是很方 ...

  3. MySQL主从复制中常见的3个错误及填坑方案

    一.问题描述 主从复制错误一直是MySQL DBA一直填不完的坑,如鲠在喉,也有人说mysql主从复制不稳定云云,其实MySQL复制比我们想象中要坚强得多,而绝大部分DBA却认为只要跳过错误继续复制就 ...

  4. 转载iOS开发中常见的警告及错误

    iOS警告收录及科学快速的消除方法     前言:现在你维护的项目有多少警告?看着几百条警告觉得心里烦么?你真的觉得警告又不是错误可以完全不管么? 如果你也被这些问题困惑,可以和我一起进行下面的操作. ...

  5. 还原火山引擎 A/B 测试产品——DataTester 私有化部署实践经验

      作为一款面向ToB市场的产品--火山引擎A/B测试(DataTester)为了满足客户对数据安全.合规问题等需求,探索私有化部署是产品无法绕开的一条路.   在面向ToB客户私有化的实际落地中,火 ...

  6. 如何又快又好实现 Catalog 系统搜索能力?火山引擎 DataLeap 这样做

      摘要 DataLeap 是火山引擎数智平台 VeDI 旗下的大数据研发治理套件产品,帮助用户快速完成数据集成.开发.运维.治理.资产.安全等全套数据中台建设,降低工作成本和数据维护成本.挖掘数据价 ...

  7. Java 中最常见的 5 个错误

    在编程时,开发者经常会遭遇各式各样莫名错误.近日,Sushil Das 在 Geek On Java上列举了 Java 开发中常见的 5 个错误,与君共「免」. 原文链接:Top 5 Common M ...

  8. JS中常见的几种报错类型

    1.SyntaxError(语法错误) 解析代码时发生的语法错误 var 1a; //Uncaught SyntaxError: Invalid or unexpected token 变量名错误 c ...

  9. 火山引擎 A/B 测试产品——DataTester 私有化架构分享

    作为一款面向 ToB 市场的产品--火山引擎A/B测试(DataTester)为了满足客户对数据安全.合规问题等需求,探索私有化部署是产品无法绕开的一条路. 在面向 ToB 客户私有化的实际落地中,火 ...

  10. 火山引擎MARS-APM Plus x 飞书 |降低线上OOM,提高App性能稳定性

    通过使用火山引擎MARS-APM Plus的memory graph功能,飞书研发团队有效分析定位问题线上case多达30例,线上OOM率降低到了0.8‰,降幅达到60%.大幅提升了用户体验,为飞书的 ...

随机推荐

  1. JavaScript 语法:语法约定与程序调试

    作者:WangMin 格言:努力做好自己喜欢的每一件事 JavaScript 语法约定 1.大小写的区分 1). JavaScript的关键字,永远都是小写的: 2). 内置对象,如Math和Date ...

  2. 海量电商数据与用友YS系统数据对接案例

    案例背景 客户是历史比较悠久的企业.企业内部用的系统多达十几套,专门成立信息化公司进行数字化转型,第一期需求系统旺店通的ERP以及旺店通的WMS并且启用京东的沧海外仓. 在选型ERP用友ERP和金蝶E ...

  3. 【python】【报错:pip中第三库下载成功,但是pycharm却没有显示】一步解决

    解决方案: 直接在这个目录下安装第三方库

  4. AutoCAD ObjectARX 二次开发(2020版)--2,手动创建CAD二次开发项目--

    本项目使用手动创建,意为不使用SDK模板. 从Visual Studio的"文件"下拉菜单中,选择"新建"->"项目...". 在出现 ...

  5. 2分钟,快速认识什么是SQL

    结构化查询语言,简称SQL,它是与关系数据库管理系统通信的黄金标准语言.今天就来一起快速认识一下什么是SQL,您可以通过以下的文字内容学习,也可以通过文末的视频学习,希望本文对您有所帮助. 您可能听说 ...

  6. Macbook磁盘系统结构/文件/目录介绍分析

    1. 系统磁盘根目录详解: 1.1 磁盘根目录结构 / (根目录)|-- Applications # 存放应用程序|-- Users # 存放用户文件和设置|-- cores # 存放核心转储文件, ...

  7. lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O

    -- create a class Animal={name = "no_name" , age=0 } function Animal:bark(voice) print(sel ...

  8. IIS下使用SSL证书

    IIS下使用SSL证书 本文介绍windowsServer下SSL证书配置及IIS站点配置 1.    生成SSL证书 在阿里云申请免费SSL证书 登录阿里云管理控制台,打开SSL证书管理 选择免费证 ...

  9. ASR项目实战-任务队列在文件转写特性中的应用

    转写时长超出60秒的语音文件,业界的竞品通常会使用创建异步转写任务的方式来提供支持. 一个简单.直接的实现方案,即: 网关服务接收到来自客户的转写请求时,将任务信息持久化至任务队列中. 由算法服务的实 ...

  10. Python——第二章:字典(dictionary)以及 添、删、改、查

    首先, 字典是以键值对的形式进行存储数据的,必须有键[key],有值[value] 字典的表示方式: {key:value, key2:value, key3:value} 举例: dic = {&q ...