【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

细节决定 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:54499

评论

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

聊聊苹果公司技术部门的宫斗和冷战

赵钰莹

程序员 外包 apple

在谈判中,你有哪些属于自己的独特的方法和技巧?

Yolanda

回"疫"录(3):让人怀念的普通一天

小天同学

疫情 回忆录 现实纪录 纪实

前端如何搞监控总结篇

大前端洞见

大前端 监控 全链路监控

很不幸,自动化测试永远只能是必要非充分条件

刘华Kenneth

DevOps 敏捷 自动化 测试 金字塔

如何阅读源码?

武培轩

Java 源码 面试 进阶 后端

世界知识产权日碎碎念

Yin

成长 随笔 知识产权

程序员5分钟:你的程序占用了多少内存?

顾仲贤

程序员

我为什么选择infoq写作平台

三爻

随手记备忘录的好习惯

changyou

程序员陪娃漫画系列——修龙头

孙苏勇

程序员 生活 陪伴 漫画

Java并发编程系列插曲——对象的内存结构

孙苏勇

Java 内存模型 面向对象 ClassLayout

程序员陪娃漫画系列——看医生

孙苏勇

程序员 生活 陪伴 漫画

程序员都应该了解的运维知识经验

松花皮蛋me

DevOps 分布式 运维

别总说CMS、G1,该聊聊ZGC了

猿人谷

CMS G1 ZGC JVM

小论互联网项目管理

南方

项目管理 互联网 个人成长 碧海潮生曲

漫谈哲学与编程

keelii

编程 哲学

「超级右键」

非著名程序员

macos 程序员 效率工具 软件 Mac

敏捷开发 | 张三与需求管理

Worktile

敏捷开发 需求管理

微信朋友圈为什么没有阅读数?

彭宏豪95

微信 产品 产品设计

知乎开发了一个搜索引擎

红泥

搜索引擎 百度 知乎

除了负载均衡的算法,你还应该知道这些

松花皮蛋me

Java 负载均衡 分布式

Golang 真的好用吗?

极客时间

编程语言 Go 语言

最近的一些人生感悟

小智

人生 哲学

加班能解决交付的期望么?

拖地先生

项目管理 领导力 管理 时间管理

基于Kubernetes的多云和混合云

倪朋飞

云计算 架构 Kubernetes 微服务 Service Mesh

克制文章长度

changyou

Java并发编程系列——线程

孙苏勇

Java 并发编程 线程

程序员5分钟:你了解32位带符号的整型吗?

顾仲贤

程序员

爱他,就让他走?

Selina

团队管理 领导力 团队协作

决定我们认知深度的究竟是什么?

石君

深度思考 方法论 连接

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