数据分析系列:如何做一次ABtest?
点击上方“数据管道”,选择“置顶星标”公众号
干货福利,第一时间送达
来源:顾先生的数据挖掘
作者:顾先生
最近重新过了一遍ABtest,本着输出是最好的输入的精神,我决定用比较通俗的话来讲讲对ABtest的理解。
本文的框架就是根据一个栗子,并以问答的方式把 ABtest 的流程走一边。
Q:ABtest是什么?
A:ABtest就是为了测试和验证模型/项目的效果,在app/pc端设计出多个版本,在同一时间维度下,分别用组成相同/相似的群组去随机访问这些版本,记录下群组的用户体验数据和业务数据,最后评估出最好的版本给予采用。
Q:ABtest背后的理论支撑是什么?
A:中心极限定理和假设检验。
中心极限定理:在样本量足够大的时候,可以认为样本的均值近似服从正态分布。
关于假设检验,大家可以看下我之前关于假设检验的文章:《大白话系列:假设检验》
https://mp.weixin.qq.com/s/JUPRZ7wD5VaaGXCyqfm7Wg
这次我举个栗子,假设我司有个短视频app,想知道是采取旧页面单排显示好,还是新页面双排显示好。
Q:首先,问自己一个问题,这次实验想证明什么?
A:我想证明新页面双排显示比旧页面单排显示效果要好。
Q:你的对照组和实验组分别是怎样的?
A:对照组是原来的旧页面单排显示,实验组我想改成新页面双排显示。
Q:如何分组才能更好地避免混淆呢?
A:通常有两种方法:第一种是利用用户的唯一标识的尾号或者其他标识进行分类,如按照尾号的奇数或者偶数将其分为两组。
另一种方法就是用一个hash函数将用户的唯一标识进行hash取模,分桶。可以将用户均匀地分到若干个桶中,如分到100个或者1000个桶中,这样的好处就是可以进一步将用户打散,提高分组的效果。
当然,如果有多个分组并行进行的情况的话,要考虑独占域和分享域问题。(不同域之间的用户相互独立,交集为空)对于共享域,我们要进行分层。但是在分层中,下一层要将上一层的用户打散,确保下一层用户的随机性。
再套个娃,为了确保随机性,我们除了可以通过基于正交的方法来确保随机性,还可以通过AA测试的方法来进一步保证随机性。如一个组别80%用来做ABtest,剩下20%用来做AAtest。在测试时首先要保证AAtest能通过,确保分组的合理性,才能进行ABtest,否则就没有意义。
Q:样本量大小如何?
A:这个问题分理论换个现实两块来讲。
理论上,我们想要样本量越多的越好,因为这样可以避免第二类错误。随着样本量增加,power=1-β也在增大,一般到80%,这里我们可以算出一个最小样本量,但理论上样本量还是越大越好。
实际上,样本量越少越好,这是因为
1.流量有限:小公司就这么点流量,还要精打细算做各种测试,开发各种产品。在保证样本分组不重叠的基础上,产品开发速度会大大降低。
2.试错成本大:如果拿50%的用户做实验,一周以后发现总收入下降了20%,这样一周时间的实验给公司造成了10%的损失,这样损失未免有点大。
Q:两类错误是什么?
A:第一类错误就是在原假设成立的情况下错误地拒绝了原假设,即错杀了好人。
犯第一类的假设检验称之为显著性检验,通过P值来判断:P值为z值的概率值(查表),p值越小说明反对原假设的证据越多。当P值<=显著性水平α, 则拒绝H0。
第二类错误就是没有成功拒绝不成立的原假设,即没有杀掉坏人。
Q:那怎么避免这两类错误的发生呢?
A:第一类错误:在假设检验中,会预先设置第一类错误的上限α,也就是定义的显著水平,1-α被称之为置信区间。通常我们设置为5%,严格一点的也会设置为2%。
第二类错误:在显著水平固定的情况下,需要减少第二类错误β发生的概率。1-β即为规避第二类错误的概率,用power表示,也称之为检验效能。power的大小可以通过增加样本量来提高,通常需要power提升至80%或者更高。
对两类错误上限的选取(α是5%,β是20%)中我们可以了解到A/B实验的重要理念:宁肯砍掉多个好的产品,也不应该让1个不好的产品上线。
在进行实验时一般是比较实验组和对照组在某些指标上是否存在差异,当然更多时候是看实验组相比对照组某个指标表现是否更好。
所以我们在进行实验之前就应该先确定好实验中需要需要对比的指标,更多时候我们关注的比例类的指标,如点击率、转化率、留存率等。
后续我们做实验的显著性分析的时候,也是分析的比例类指标。
当我们确定了需要分析的具体指标之后,就需要我们进行埋点设计,把相关的用户行为收集起来,供后续的流程进行数据分析,从而得出实验结论。
对于 ABTest我们需要知道当前用户是处于对照组还是实验组,所以埋点中这些参数必须要有。
埋点完了就是收集实验数据了(暗中观察),主要看以下两个方面:
1、观察样本量是否符合预期,比如实验组和对照组分流的流量是否均匀,正常情况下,分流的数据不会相差太大,如果相差太大,就要分析哪里出现了问题。
2、观察用户的行为埋点是否埋的正确,很多次实验之后,我们发现埋点埋错了。
这块主要是假设检验的内容了。
最终通过分析,给出本次实验是否有效,如果有效那么本次实验带给业务方的提升是多少的结论。
最后总结一下如何做一次ABTest。
ABtest分为以下几个步骤:
基于现状和期望,分析并提出假设
设定目标制定方案
设计与开发
分配流量进行测试
埋点采集数据
实验后分析数据
发布新版本/改进设计方案/调整流量继续测试
Q:ABtest可以用在哪里?
A:产品UI、文案内容、页面布局、产品功能、推荐算法、广告着陆页、Web/H5 页面、APP用户体验、媒体广告投放与管理、灰度发布。
最后留一道课后题,是我面试的一道题,有点新颖,就和大家分享下。
Q:如果一个人有多个账号,分别做不同用途,abtest的时候怎么分组才最合理呢?
这题并没有答案,但是我的朋友们集思广益想了很多方向来解答,我也给大家分享下。
A1:如果他有符合标准的行为,那么他现实中是不是一个人不重要。只需要按照我们统计口径中到底是uid还是什么的,当做正常用户做ab就OK了。如果考虑薅羊毛等场景,这部分用户就不应该算作正常或规则内用户,他们的行为等也可能就不具参考意义或者会有影响,所以开始前这波人就被排除了?
A2:我们对这类人的分类是,看的不是他是谁,而是他做了什么。按照我们对行业的分类,行为不同的话就是两类人,和身份证是不是同一个无关。我们要聚合的是有相同行为特征的账户,而不是人。
A3:我的想法是这类人的人号不分开,因为这类人不管怎么伪装本质还是一个人,我想测的是这个个体的体验数据和业务数据,但是要确保独占域和共享域都有同比例的人群,同时确保共享域各层的随机性。
参考资料:
《数据分析师求职面试指南》徐麟
《统计学》贾俊平
《面向数据科学家的使用统计学》
如何做一次完美的 ABTest?
从数据产品经理视角,聊聊科学的AB Test | 人人都是产品经理 http://www.woshipm.com/pd/3357576.html
精细化用户增长案例(7):你真的搞明白ABtest了么?我看未必!| 人人都是产品经理 http://www.woshipm.com/operate/2771877.html