随着ab测试在互联网行业用户增长方面的推广,各家都搭建了自己的ab测试平台(不限于BAT) 或者 购买了ab测试服务。今天就来看下AB测试的前世今生,能为企业解决什么问题,如何标准化ab测试流程,如何搭建一个ab测试平台。 36Kr曾在一篇报道中写道:"头条发布一个新APP,其名字都必须打N个包放到各大应用市场进行多次A/B测试而决定,张一鸣告诉同事:哪怕你有99.9%的把握那是最好的一个名字,测一下又有神马关系呢?" 一、追本溯源 AB测试的前身是随机对照试验-双盲测试,是"医疗/生物实验将研究对象随机分组,对不同组实施不同的干预,对照起效果"。 双盲测试中病人被随机分成两组,在不知情的情况下分别给予安慰剂和测试用药,经过一段时间的实验后再来比较这两组病人的表现是否具有显著的差异,从而决定测试用药是否真的有效。 2000年谷歌工程师进行了第一次AB Test,试图确定在搜索引擎结果页面上显示的最佳结果数量。后来AB测试不断发展,但基础和基本原则通常保持不变,2011年,谷歌首次测试后11年,谷歌进行了7,000多次不同的AB测试。 12年奥巴马竞选网站的样式,通过AB Test 找到了更能吸引募捐,帮助奥巴马赢得了更高的募捐金额。 AB Test将不同的用户分成不同的组,同时测试不同的方案,通过用户反馈的真实数据来找出哪一个方案更好的过程。解决的是"多种方案需要拍脑袋确认哪一种更好的问题"。 二、特性 先验性:A/B Test 是一种"先验体系",属于预测型结论(与其相对的是后验型的经验归纳)。同样是一个方案是否好坏:A/B Test 通过小流量测试获得具有代表性的实验结论,来验证方案好坏后再决定是否推广到全量;后验型则是通过发布版本后的版本数据对比总结得到。 并行性:是指支持两个或以上的实验同时在线,并需要保证其每个实验所处环境一致。并行性极大的降低了多实验的时间成本。 科学性:AB Test是用科学的方式来验证方案,科学性体现在流量分配的科学性、统计的科学性。记得在开篇提到的"AB测试的前身是随机对照实验,医疗/生物实验将研究对象随机分组,对不同组实施不同的干预,对照起效果",这要求AB Test将相似特征的用户均匀的分派到实验组别中,确保每个组别的用户特征相同。 三、统计学原理 3.1 抽样 总体:"是包含所研究的全部个体(数据)的集合,它通常由所研究的一些个体组成,如由多个企业构成的集合,多个居民户构成的集合,多个人构成的集合,等等"。对于一个app、web网站,他的所有用户即为总体。 样本:与总相对应,是从总体中按一定比例抽取且能代表总体的部分个体集合。例如:分别抽样5%的app用户,形成实验组、对照组。 从总体到样本的过程,即为抽样。所以ABTest,是通过抽样 获取 实验组、对照组,对比统计量均值,以衡量实验效果。 抽样面临问题"如何从一个总体中按一定比例抽取一组随机样本?",也就是样本统计值是否可以代表总体参数? 3.2 参数估计 为了估计总体参数,会计算样本的统计量,例如:某个优化指标的平均值。而样本的统计结果为真实的总体统计结果的点估计,但由于点估计树值与总体参数值在某种程度上存在差异。可以构造区间估计以便获取关于点估计值与总体参数的差异大小的信息。区间估计是在点估计的基础上,给出总体参数的一个概率范围(点估计值 +/- 边际误差)。 可以利用总体标准差 或 样本标准差 计算 边际误差。 (1)已知总体标准差 假设:总体标准差=20,历史数据显示总体符合正态分布;抽取100个个体形成样本,样本均值为82。 样本标准差=总体标准差/开根号(样本个数)=20/ 开根号(100)=2 故样本符合均值为82、标准差为2 的正态分布 => 查标准正态分布表得到,任何正态分布随机变量都有95%的值在均值附近+/-1.96个标准差以内。 => 当样本均值是正态分布时,一定有95%的样本均值落在总体均值+/- 3.96(1.96*2=3.96)=> 总体均值=样本均值+/- 3.96 =82+/-3.96 => 有95%的把握相信区间(78.08,85.92)包括总体均值。 **95%为置信水平,(78.08,85.92)为置信区间,边际误差为 Z分布(总体标准差/开根号(样本个数))。 (2)已知样本标准差,未知总体标准差 总体均值 = 样本均值 +/- t分布(样本标准差/开根号(样本个数)) 基于以上论述,可以得到 在某种置信水平下,置信区间(78.08,85.92)包括总体均值,论证了 "样本统计值和总体参数相似程度"。 接下来,文中将介绍 如何知道一个方案是好还是坏呢?——可以通过假设检验来确认是否应该拒绝关于总计参数值。 3.3 假设检验 尝试性的假设为原假设H0,与原假设对立的是备择假设H1.在AB测试中,原假设H0: 实验组和参照组不存在差异,备择假设是存在差异。 在假设检验的过程中会出现以下情况(横向为真实情况,总想为结论): 我们做实验时,期望尽可能的控制第一/二类错误。 第一类错误:原假设为真时拒绝了原假设 首先我们容易犯的就是第一类错误,就是原假设为真时拒绝了原假设,说白了就是过来就是 2 个版本无差异时候,我们错误 的认为他们有差异。 第一类错误出现的概率称之为检验的显著性水平α,一般取0.05或0.01。通过指定α 从而控制出错概率。 犯第一类的假设检验称之为 显著性检验,通过P值来判断:P值为z值的概率值(查表),是样本所提供的证据对原假设支持成都的度量,p值越小说明反对原假设的证据越多。当P值<=显著性水平α, 则拒绝H0。 请注意此处的描述"不能拒绝H0 或 拒绝H0",而不能描述为H1为真(如果控制第一类 不控制第二类,仅能如此描述)。 第二类错误:原假设为假时接受了原假设,也就是 "2 个版本有差异时候,我们认为他们没有差异 ",这个概率记为β ,不犯第二类错误的概率为的1-β。1-β:当H0为假时,作出拒绝H0的正确结论的概率称之为"检验的功效",通常最低的统计功效值为80%。 综上,通常情况下 AB实验中, 95%+的置信水平,<5%显著性水平>80%统计功效,可以被认为实验是有效的,结果有代表性是可信的。<!--5%显著性水平--> 曾经一度也曾有大量文章由于p值无法提供一个人类期望的结论,而抨击p值已死。p值在统计学的意义中是用来推断,而非归纳总结。仅用p值来确认显著性直接得到结论是不恰当的,同学的先辈们听到都会跳起来,引入统计功效、置信区间才能科学的解释实验数据。 四、科学分流 4.1 分流 分流是将用户分入AB实验的过程。 如何知道一个用户应该咋哪些实验中呢? 对用户id进行hash并取模后得到实验。如果用户量够大,可以设置按1000,10000取模,得到的用户组会变多。这种方式记为单层实验架构,每个用户只会分入一个组中,在同一时刻只会参与一个实验。 这里的用户id,不特指user_id,由于实验的范围不同,用户id可以使用user_id、device_id、cookieid,以及global_id,global_id在各家公司称呼不同,但表达意思均为全局流量id,是基于多种id得到的唯一id。 4.2多层重叠实验 如果有多个大流量实验同时在线,如何增加新的实验呢? Google的文章中描述了多层重叠实验,可以解决这个问题,也是业内的主要方式,多层重叠实验可以实现"更多、更好、更快"做AB Test。 多层重叠实验的几个概念: 域:域是对用户流量的一种纵向划分,将流量垂直的切分成多块,多个域中的实现相互没有干扰,保证实验纯度。 层:层是对域流量的一个横向划分。每个层使用独立的Hash函数对用户进行分桶,使得多个层之间的用户流量是正交的。如下图所示,每个层中的实验对其他层的影响都是正交的,,一份流量穿越每层实验时,都会被再次随机打散,参与第一层中实验X的用户,均匀的分散在层B中,使层B中的实验也可以独立进行分析,并得到准确的分析结果。层内实验为互斥实验。层内多实验互斥关系(下图)与域的互斥关系相同,只是表述粒度不同。该流量可以继续以"域"划分为层,无限嵌套,但这样复杂度会急剧增加,是不推荐的。 如果实验是相互影响的(例如 实验A更改按钮样式,实验B更改按钮文案),两个实验室需要设置为互斥实验,建议放在同一层中。如果实验间无影响(例如在UI、搜索、广告推荐实验),则可以在不同层进行实验。 此外,精细化运营、国际化时本土化产品策略中 需要面向指定流量进行AB测试,如 对巴西的用户AB Test。验收测试的同学,也需要将自己的id加入测试人群,但这批用户的数据不应该参与效果分析。特殊号码过滤:如有些用户id在分发时做了特殊人群的投放,需要过滤该人群。 五、AB Test 系统 上文中提到的均是AB测试的原理,为提升ABTest的速度,ABTest的代码早已被封装为了产品,如 商业化的有Optimize、吆喝科技、testin等,BAT TMD也都有自家的ABTest系统。 TO 产品、运营、算法 同学(做实验的人): 创建实验,并同步实验信息到服务端、客户端开发,以便其写代码时使用实验code; 获取实验结果。 TO C端用户(不局限于C端,这里仅是泛指,被实验的人),将决定该用户在哪些实验中。 AB Test系统也和其他系统一样,有管理模块、权限模块等。 各家AB Test系统: 美团AB测试平台:https://tech.meituan.com/2019/11/28/advertising-performance-experiment-configuration-platform.html 大众点评: https://www.csdn.net/article/2015-03-24/2824303 Optimiz:http://www.googleoptimizedemos.com/ 吆喝科技:http://www.appadhoc.com/ 六、如何科学的做AB测试(AB测试标准化) 有了ABTest的概念,了解了原理,购买或者自建了系统,如何建立标准化流程让其在团队中完整的执行下来? 6.1 ABTest的局限性 在讨论ABTest标准化执行过程前,我们先看了解下ABTest的局限性,莫过于将其神化。 (1)ABTest是验证方案、想法的策略,而不是战略。 看到知乎中的一句话无比赞同: "你可以用A/B测试让你在已经到达的山上越来越高,但你不能用它来发现一座新的山脉。如果你的产品真正需要的是一个完整的改造,那么A/B测试可能做不到"。 张一鸣在清华经管学院,对问题"PM是否可以产品设计上是否更多的依赖ABtest而非直觉?"的解答: "我们认为这和ABtest同样重要。我们反对从逻辑到逻辑,从逻辑到逻辑,很容易失之毫厘谬以千里。有一手的体验能帮我们远离偏差,我们愿意把用户的感受、体会带到公司。我们全球化的第一件事情是海外用户反馈,提供联系方式,让用户可以直接联系到我们。PM是需要sense的,AB的science可以用来的降低在细节层面的精力付出。 (2)ABTest是有开发成本的 (3)ABTest的数据只有现象,没有详情 ABTest可以给出实验组比对照组的效果好现象,但无法给出过程数据。测试相对复杂的方案,ABTest无法表述出具体是哪个方面呈现出了优势。 6.2 ABTest的标准化流程 此外,AB测试时,需要警惕辛普森悖论。 后续:ABTest的相关知识点还会在本文中陆续补充,期望了解点可以在评论中@我,我会逐一回复并补充到文章中的。