写点什么

细节决定 A/B 测试的成败:不可忽视的抽样

  • 2020-04-05
  • 本文字数:2260 字

    阅读完需:约 7 分钟

细节决定A/B测试的成败:不可忽视的抽样

最近在微信公众号的后台陆陆续续收到了不少热心小姐姐小哥哥的问题,有关心我们流量层具体运作原理这样比较高端领域的,也有关心 A/B 测试基本能力是否真如传说中那样强大的。


有位小姐姐问到了抽样这个词,引起了我的深思思想者状沉思 ing,仔细想了想,目前已有的资料里面,对于 A/B 测试最最基本的组成部分:抽样,好像鲜有提到。不仅如此,大量的新手教程啦入门指导啦各个案例什么的,都是在从更高的角度解读 A/B 测试,没什么资料从根源讲解 A/B 测试一个致命的关键点……


从根源出发:深挖抽样

在统计学中,平均数是反映数据集中趋势的一项指标,一般通过将一组数据集中所有数据之和除以这组数据集的数据个数得到。在 A/B 测试中,我们无法知道所有用户的行为(如点击率)的真正均值——如果每次做活动、每次做版本迭代的时候,都将测试面向所有用户的话,且不说动用的人力物力,一旦其中有什么版本效果不好,比如大幅度降低了点击之类,带给企业的影响将是灾难性的。举个栗子,一个 APP 如果有一万名用户,假设五千人测试版本 A,五千人测试版本 B,这样固然可以知道 AB 之间孰优孰劣,但是如果 A 的效果极差(比如引起用户删除应用),那么使用 A 版本的五千人岂不是……简直是灾难 ——因此,必须通过抽样,抽取一部分具有代表性的用户来测试不同版本的效果(例如均值),从而基于抽样数据进行统计分析。一般来说,我们抽样的样本数越多,方差也会逐渐变小,从而使抽样样本的均值和真正均值之间的误差降低。


这事儿说起来简单,但是有个很致命的要求:要保证所抽取的样品单位对全部样品具有充分的代表性。不然可不能确保数据分析的结果是否准确。这就需要从这三大方面来保证:


第一,相似性


很重要也最复杂的一点。相似,指的是用户群体各个维度的群体特征相似。用户使用的机型是手机还是平板、系统的版本是 iOS 几还是安卓几点几,目前的应用版本是几点几甚至使用的语言是中文还是英语法语日语之类的外语之类,都是区分不同用户群体的指标。举个栗子,某 APP 针对手机用户有一项活动,那么在测试的时候如果放任平板用户参与,就失去了活动的意义不是吗。相似性,正是为了 确保被抽取的部分用户足以代表整个用户群而提出的。但这并不简单,实际上,分割各个用户群的标准是什么?是客户的需求。因为只有按照客户要求进行区分的用户群才有价值,如何让客户随心所欲区分用户群,才是相似性复杂的地方。


第二,唯一性


最重要的一点,每个用户分配到的试验版本得是唯一的。举个栗子,为了推广某项服务,某 APP 推出了两个版本 A 和 B,分别用不同的界面来推销这款服务。陆仁甲在测试期间登录 APP,看到了版本 A,觉得 A 给出的这个界面非常不错,于是充值打算购买这个服务,但因为有别的事情于是只好先关闭了应用。过了一段时间,他又登录了,但是却看到了版本 B。“我去这什么界面设计,太难看了”对于版本 B 感到反感的他,为了购买在 A 中看到的服务,只好被迫在 B 里面点击了购买按钮……且不说由于版本来回变换带来的不良用户体验,更别提这种类似于刷数据一样 bug,光是同一用户的重复测试就已经导致测试结果不可信了不是吗,陆仁甲是被迫在版本 B 中提高了点击,这将计入 B 的点击转化,但是实际上他喜欢的是 A 啊(A:是我,是我先,明明都是我先来的)。如果因此判断 B 比 A 好而发布版本 B……那画面太美我不敢看


第三,均匀性


既然是抽样实验,那么抽取的样本量就必须一致,这样才有对比性。这就跟初中高中物理里面用的控制变量法似的,保证单一变量(版本 AB)有变化,而其他变量要保持一致。实现这一点的重要倚靠是分配流量是否真如所愿一般分配。就比如,一个有十万用户群的 APP,能不能做到给 AB 各分配 2%的流量时,进入这两个版本的用户真的都是是在 2000 人附近。

回到根源,如何满足三大性质

满足了这三个点,才敢说 A/B 测试真正有价值。Testin A/B 测试从创始之初就致力于让抽样经得住考验,在这三方面不敢说历经考验,但起码是经得起考验,受到诸多用户的一致好评。让我们从三个方面一个个来看 Testin 是怎么做的:


在相似性方面,


我们首先基于 SDK 自动采集来使用聚类分析分割用户群,确保各个维度的群体特征相似,例如不同用户群的机型比例、语言比例等都会相似,以免干扰试验结果可信度。而在“让客户随心所欲区分用户群”这一点上,则在兼顾灵活性的基础上做到了精确定向。通过允许客户添加各类用户标签,Testin A/B 测试可以依此实现精准定向分流,客户只要设置相应的用户标签(例如性别、年龄等,需要上传),就可以在分配流量(分流)的时候自动完成用户群分割,简单高效。



用于分割用户群的用户标签


在唯一性方面,


为确保每个用户不被重复计入测试,我们通过精准且高效的 Hash 算法,确保单个用户每次登录应用时被分到的试验版本是唯一的


在均匀性方面,


技术上运用了安全哈希算法 SHA 1,经过数个月的实战检测,实际分流效果非常接近目标流量分割比例,且用户量越大分流结果越精确。并且,不止于此,Testin A/B 测试依仗精准的分流效果,允许用户随时在试验的进行过程中调节试验版本之间的流量分配比例,你要 2%,那么进入测试的就只有 2%的用户,你要 50%,也就只有 50%的用户接受测试。



可调节的精确分流


很高兴你能看到这里嗷!好有耐心的,赞相似、唯一、均匀,在抽样上要满足的三点即是 Testin 能够在行业中站稳脚跟的关键。尤其是相似性,是测试中容易被忽视但却又不容忽视的重中之重。对于任何一位想要切实提高产品效益的运营和 PM 来说,使用的 A/B 测试工具是否具有精确分割用户群的能力都是能否做好 A/B 测试的一个致命的关键点。


2020-04-05 16:54680

评论

发布
暂无评论
发现更多内容

Spring 全家桶之 Spring Data JPA(五)

小白

8月月更

高绩效研发团队领导者的视野和格局

顺哥聊成长

[JS真好玩] 嘘!我改了掘金源代码!1行代码,让表格支持page_size切换,从每页10条变为20条!

HullQin

CSS JavaScript html 前端 8月月更

RT-Thread记录(十、全面认识 RT-Thread I/O 设备模型)

矜辰所致

单片机I/O设备的控制方式 RT-Thread 8月月更 设备模型

Bigdata 大数据训练营毕业总结

Pyel

IT运维如何助力企业数字化转型

阿泽🧸

数字化转型 8月月更

Struts2应用详解

No Silver Bullet

应用 Struts2 8月月更

秒杀系统设计demo

Geek_e8bfe4

千万用户3毫秒内抽奖100名如何实现?

知识浅谈

8月月更

Spring 全家桶之 Spring Data JPA(三)

小白

8月月更

Spring 全家桶之 Spring Data JPA(四)

小白

8月月更

用RocketMQ这么久,才知道消息可以这样玩

牧小农

RocketMQ

【LeetCode】最大二叉树Java题解

Albert

LeetCode 8月月更

RocketMQ高可用设计之主从复制和读写分离

急需上岸的小谢

8月月更

架构师的十八般武艺:高可用

agnostic

容灾

大数据训练营一期毕业作业

张大彪

SpringBoot 快速入门(保姆级详细教程)

SpringBoot 2 8月月更

基于STM32+ESP8266设计物联网产品(重点支持微信小程序一键配网连接腾讯云平台)

DS小龙哥

8月月更

模块九毕业设计

Geek_2ce415

Linux 的十大下载管理器,提升效率杠杠的,偷着乐吧!

wljslmz

Linux 8月月更

长安链学习 -WEB插件-SmartPlugin

Go-Excelize API源码阅读(十六)——GetSheetViewOptions、SetPageLayout

Regan Yue

Go 源码 Excelize 8月日更 8月月更

Bigdata 毕业设计

Pyel

云原生(二十三) | Kubernetes篇之Kubernetes 网络策略(NetworkPolicy)

Lansonli

云原生 k8s 8月月更

如何安全地移动WSL 2 到另一个驱动器

吴脑的键客

windows WSL2

IPv6过渡技术部署策略与建议

穿过生命散发芬芳

ipv6 8月月更

【LeetCode】检查单词是否为句中其他单词的前缀Java题解

Albert

LeetCode 8月月更

拜托!不要用“ ! = null 做判空了

TimeFriends

8月月更

总结

Asha

如何在 SAP Spartacus 中编写 ASM-Compatible 的代码

汪子熙

angular SAP Hybris Spartacus 8月月更

毕业总结

Geek_2ce415

细节决定A/B测试的成败:不可忽视的抽样_文化 & 方法_云测数据_InfoQ精选文章