A/B-test是一种用来测试新产品或新功能的常规方法。一般把样本数据分为两组用户,一组对照组,一组实验组。对照组采用已有的产品或功能,实验组采用新功能,找到他们的不同,并以此确定哪个版本更好。在这个过程中,不能就此评价新产品或者新功能的好坏,还需要结合跨职能团队中专业人员的评估。
01、关于A/B-test
A/B-test又做双盲实验,在2000年的时候由谷歌引进到在互联网中进行了第一次使用。A/B-test解决的是在现有认知下不确定哪种方案更优的问题,避免了拍脑袋决策。因此,它需要具备两个条件:
至少有两个或多个待选方案;
用最直接的数据指标+业务团队的专业经验相结合衡量各待选方案;
02、A/B-test的特点
先验性:通过低代价,小流量的实验,再推广给全流量的用户
如果上线一个功能,直接流量开到50%去做测试,那么如果数据效果不好,或者功能意外出现bug,对线上用户将会造成极大的影响。所以,建议一开始从最小样本量开始实验,然后再逐渐扩大用户群体及实验样本量。
科学性:通过置信区间、假设检验等原理进行验证
A/B-test的结论通常是一个区间,比如说(1.4,1.9)或者(1.5%,1.7%);
如果实验组最小样本量不足,最好拉长时间周期,累计获得理想的最小样本量;
达到最小样本量时,可以查看显著性结果、功效,要继续耐心观察一段时间,结果稳定时得出最终结果;
由于A/B-test会影响到不同的用户群体,所以,我们在做A/B-test时,尽量设定一个测试生效期,这个周期一般是用户的一个活跃间隔期;
样本量这一块可能更多的是偏向经验值;如果我们对总体均值区间估计范围精度要求不高,最小样本量计算其实不是一个必须的过程,当然样本量越大这个范围就越精确,但同时我们付出的时间成本也会越高。
并行性:不同版本、不同方案在验证时,要保证其它条件都一样
用户属性一定要一致:如果上线一个实验,我们对年轻群体上线,年老群体不上线,实验后拿着效果来对比,即使数据显著性检验通过,那么,实验也是不可信的。因为A/B-test的基础条件之一,就是实验用户的同质化。即实验用户群,和非实验用户群的 地域、性别、年龄等自然属性因素分布基本一致。
在同一时间维度下做实验:如果某一个招聘app,年前3月份对用户群A做了一个实验,年中7月份对用户群B做了同一个实验,结果7月份的效果明显较差,但是可能本身是由于周期性因素导致的。所以我们在实验时,一定要排除掉季节等因素。
上线后验证改动对用户是否生效:用户如果被分组后,未触发实验,我们需要排除这类用户。因为这类用户本身就不是AB该统计进入的用户(这种情况较少,如果有,那在做实验时打上生效标签即可)
上线后验证用户不能同时处于多个组:如果用户同时属于多个组,那么,一个是会对用户造成误导(如每次使用,效果都不一样),一个是会对数据造成影响,我们不能确认及校验实验的效果及准确性
如果多个实验同时进行,一定要对用户分层+分组:比如,在推荐算法修改的一个实验中,我们还上线了一个UI优化的实验,那么我们需要将用户划分为4个组:A、老算法+老UI,B、老算法+新UI,C、新算法+老UI,D、新算法+新UI,因为只有这样,我们才能同时进行的两个实验的参与改动的元素,做数据上的评估
03、关于A/B-test应用场景
界面试验:从交互体验和元素属性,包括底色测试、按钮测试、文体测试、文案测试
功能试验:某大数据产品系统灰度5%用户量上线测试实时销量模块以观察用户使用及服务器的承压情况,实验情况良好的话,逐渐加大;某APP签到模块灰度线下后观察用户反应情况,某个功能是否下线,需要分配一小批用户量测试其反应;
算法试验:验证新算法的用户反馈;“猜你喜欢”的功能就是利用算法试验判断对转化率的提升;刷抖音时的推荐产品;广告视频的完播率;购买链接的点击率;都可以通过这个方式来验证;
人群试验:把用户分成不同层次和不同类别,专门针对某类人群(如90-95后女性),为其开通某项功能,跟踪其反馈数据;比如浇果树功能。来判断不同群体复购情况;
04、A/B-test流程管理
A/B-test会涉及到产品经理、开发、数据分析师、业务岗等人员,流程较长,环节复杂,对没有接触过的人来说,实施起来比较困难。但总的来说,可以分为以下几个流程:
(1)确定试验主题
在进行A/B-test之前,首先需要和相关方确定本次试验需要验证的主题,常见的试验需求有:
产品经理“ 这个设计比较丑”VSUI设计“这是最流行的设计风格”;
首页某栏目“这个位置应该放最新活动”VS“这个位置应该放我参与的活动”
算法工程师“在原算法的基础上加了实时行为特征分析功能,看看上线后的效果”
市场营销“新产品马上就要发布了,这几个落地页看起来都不错,到底选哪个合适”
针对这些遇事不决的场景,那就做下A/B-test吧。
(2)定义指标(目标)
根据实验目的和业务需求定义试验中需要去观测的核心指标;
验证实验组相比对照组是否有显著性差异变化(提升或下降),而常用指标包括:点击率、转化率、复购率、用户留存、净值推荐、跳出率、GMV、人均UV价值、停留时长等;
指标最好不要超过三个,可以采用分层级的方式,如一个核心指标+多个观察指标:核心指标用来计算需要的样本量,以及度量我们这次实验的效果;观察指标则用来度量本次实验对其他数据的影响;
(3)设计方案
由于试验需求源于不同人员,对其进行整理后,向分管的A/B-test数据分析人员或产品经理进行试验方案设计;
计算样本量,样本量与变异系数、功效(一般要求0.8~0.95)成正比,与提升度(一般小于0.05)成反比。因此,当延长可接受的实验周期累计样本量还是不够时,可以通过以下2种思路来降低样本量要求:(1)选择变异系数较小的衡量指标;(2)降低功效值要求,放宽提升度 。
最好以一个用户的唯一标识来作为实验样本,好处是符合A/B-test的分桶单位唯一性,不会造成一个实验单位处于两个分桶,造成的数据不置信。
配置分流结构,包括实验分层及分组、每组流量桶值分配、配置实验参数;
明确具体分流算法,明确试验分层与分组、每组流量占比及调整方式,明确分流实验周期,确定分流目标人群,预测所选分流方式的风险;
进行产品原型设计(包括实验组和对照组)、效果指标定义和数据采集的埋点方案;
创建分流,在A/B-test系统中录入分流的相关信息,如分流名称、分流类别、对应的产品、业务部门、业务对接人、测试周期、流量分配算法;
会同开发人员配置实验结构,进行API调用,进行数据埋点;经过一段时间的运营后,对数据进行分析,由于不能保证这些数据很好的代表总体用户,需要进行放量逐步测试,直到100%全量,编写数据分析报告,辅助决策。
(4)收集数据
目标用户被随机分配对照组和实验组,上线验证,并收集数据。一般取最近一个月的历史数据。
(5)分析效果
统计各组数据之间是否存在显著性差异以及差异大小,就可以得出各版本之间是否有差异,哪个版本更好的结论。
显著性检验同样有多种方法:T检验、Z检验、卡方检验。Z检验使用的是总体方差,T检验使用的是样本方差,卡方检验是比较两组数值的分布,因此Z检验比T检验和卡方检验效果更明显,检验精确度是:Z检验>T检验>卡方检验
A/B-test需要比较出哪个实验组表现更好,因此使用的是单尾检验,即原假设为新方案不优于旧方案,然后计算出在原假设成立的条件下,计算所得实验样本数据特征的概率原假设发生的概率P值,和显著性水平α进行比较以判断是否拒绝原假设。
一般而言,选择目标指标P为95%置信度下的置信区间[a,b]作为参考
若a,b为同正或同负,即ab>0,则可以认为该试验结果是显著的,胜出方案可逐步放量直到全量;
若a,b为一正一负,即ab<0,则应调整策略或关闭实验;
05、A/B-test产品化设计方案
一个产品需要测试的点往往是非常多的,如果每次实验都要像上面那样人工走一遍显然效率是非常低的,A/B-test又是近年兴起的增长黑客的秘密武器,需要进行快速迭代快速验证,所以将以上流程自动化是非常有必要的。下面我们就来看看A/B-test系统需要哪些模块,各模块之间是怎么配合的。
A/B-test试验管理
引导用户完成关键参数配置,包括配置名称、配置版本等信息。
选择实验指标,从数据仓库获取所有实验的指标配置,若有当前在运行的实验与本次实验选择指标一致,则自动化选择该实验为互斥实验;
选择实验对象;
根据配置的指标及统计参数,计算出需要多少用户量;
根据选择的实验对象,从数仓中同步选择的实验对象每天有多少该实验对象用户,计算出需要多少天才能达到最小样本量,并自动化推荐实验时长;
分流模块
此功能的核心是分流策略
简单随机分配策略,指在用户请求生成随机数,根据产生的随机数值给用户分配试验组,这种方式简单粗暴。但同一用户会产生多次请求返回不同结果,导致体验不一致,不易回溯;
按唯一ID分桶:根据用户ID取模,按取模后的余数分配用户,每一个用户所在分桶固定,易回溯;
唯一ID的Hash分桶:通过用户唯一ID进行Hash处理后取模,这种方式随机性好,一个用户只有进行一个试验;
唯一ID+参数的Hash分桶:通过用户唯一ID及层ID进行Hash处理后取模,这种方式保证了随机化的情况下,保证了各层正交,同一个用户可以参加多个试验,在每个试验中用户均为随机,这种方式对技术要求比较高。
业务接入
URL实验接入:在配置完成后生成两个不同的URL,对应不同的版本页面,推送给不同分组内的用户。这种方式占用资源较大。
代码实验接入:在同一个页面内设计实验,通过程序控制页面展示;
可视化接入:将上述两种方式结合起来,降低设计门槛,可以页面内;
数据采集
通过记录用户在A/B-test模块中的行为,将用户的行为收集到数据中心,将测试数据与原始数据进行对比,为最终确定新的优化方案是否有效提供决策依据。
效果分析
对上传来的数据进行清洗和分析,并将结果以可视化的方式进行展示。在分析过程中,要给分析对象说明样本规模。因为样本太小时,不能代表整体;
在数据结果解读过程中,结合行业特点和业务性质,紧扣关键指标,如用户体验指标、增长指标等;
以上这些就是把A/B-test打造成一款产品的流程。在设计过程中,要注意:
科学的流量分配,其核心在于随机,所以在系统设计完成后,需要进行多次AB测试,以验证系统随机算法;
有足够大的用户数据:A/B-test的结果需要大量的数据做支撑,试验用户越多得出的结论越准确,因此,在不影响其它试验的前提下,尽可能为每个试验组提供更多的用户数据,这样有助于提高试验准确率;
科学严谨的结果分析,运用严谨的统计学知识,不能仅仅根据不同组别之间的数据差别凭经验直接下结论;
持续的更新迭代:A/B-test本身是一个开放的、不断循环迭代的进化过程,因此,系统也要为了满足其不断迭代的需求而变化;