NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

揭开 Testin A/B 测试流量层的神秘面纱

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

    阅读完需:约 6 分钟

揭开Testin A/B测试流量层的神秘面纱

做 A/B 测试的时候经常要面临这种情况:总有好多想法涌现出来,可能这里标题文案改一改会更好?那里背景色换一换也不错?不对不对,按钮格式改变一下似乎也很出色……


想必这类问题都是你希望能尽快搞清楚的。我们的一位客户:某公司产品经理小明(以下简称小明)就遇到了这样的境况。他急于研究产品首页底部 Tabbar 按钮的数量、颜色、大小、文字等数个因素更改对于用户的影响,时间很紧,一周就得要结果。


于是他启动了测试工具,想要摸清用户的口味——


哎呀。不对啊,做这么多实验,各个因素互相干扰了怎么办?得一个个分开测试吧,难道要一个个排着队来做吗???那得要多久啊。



——当然是不用担心的。Testin 早在设计 A/B 测试产品之初,就已经为各种实验情况做好了准备。这就是基于流量层考虑的同层互斥能力与流量分层机制

同层互斥

不知道大家对初中物理的控制变量法还记得多少,在一个实验中,只能有一个变量发生改变,这样才能知道这个变量对于实验结果的影响。


A/B 测试也是这个道理,如果你要探寻页面上某项变动对测试结果的影响,那么就不应该在一个版本里让一个页面的两个因素同时改变——也就是必须独立运行实验,不能让各个因素互相干扰而导致结果不准确。不然可就不好分辨导致用户喜欢或者厌恶的原因到底是哪个因素了。


那么问题来了,开篇案例中的小明想把产品首页底部 Tabbar 按钮的数量、颜色、大小、文字等数个因素都改改,这可怎么办。


这意味着需要同时运行多个实验,每个实验只针对例如数量,例如颜色这样的一个目标,绝不能让受测试用户一会儿看到自己的 Tabbar 按钮数量从四个变到五个,一会看到四个按钮都变色儿了,这太诡异了。也就是说,必须让一个用户只进入一个实验才行。


这就需要流量层的重要能力:同层互斥


搞明白同层互斥需要先搞懂互斥的意思。来看看数学上对互斥事件的定义:事件 A 和 B 的交集为空,A 与 B 就是互斥事件,也叫互不相容事件。也可叙述为:不可能同时发生的事件。基于此而发展来的互斥实验也很好理解,即各实验之间的结果不会互相干扰。


同层互斥,则如下图所示。


假设有两个实验 P 和 Q,分别有两个版本 Pa、Pb 和 Qa、Qb。各调用 25%的流量来测试。



在同一个流量层中(即实验中常见的默认层,对应着所有的用户),Pa 使用了 25%的流量,那么这 25%所对应的的用户,就不会看到 Pb 和 Q 实验;而 Qa 实验使用的流量为另一个 25%,Qb 和 P 实验也不会出现在这些用户的面前了。这样,通过让用户之间互斥,就能让实验不受干扰的独立运行。


Testin A/B 测试产品中,由于使用精准且高效的 Hash 算法,确保了单个用户每次登录应用时被分到的试验版本是唯一的,配合产品中对运行控制的管理,自动实现了同层互斥。也就是说,只要是在同一流量层下分配,那么构建的实验,就必定是相互独立的。小明的问题也就解决了。


如何操作?——为了节约你的阅读时间,我们将实操部分整合在另一篇中,若想查看的话,关注我们“云测数据”公众号并回复“同层互斥”,即可获得详细的实操图解了嗷(づ=.=)づ

流量分层

上文提到,为了保证你的实验能得到可信的结果,Testin A/B 测试会自发的帮你实现同层互斥。特别是当你要给同一个页面的不同因素(按钮呀文案呀背景色之类的,举个栗子,Facebook 的首页就是一直在微调这些东西)都做测试来探究用户喜好的时候,千万不能一股脑儿全放到一个实验里去,而是必须要活用同层互斥来避免结果相互干扰。当然啦有时间的话,一个个排队做也可以的 =.=


但是这会儿,喜闻乐见的小明同学又想搞事儿了:


依然拿 PQ 来代指。小明这次想在首页里面把热度排行榜的边框改一改,这个我们把它叫做 P,两个版本 PaPb。时间还是一周就要出结果。然后小明还有个大胆的想法,把用户个人界面的历史记录功能换个样子,我们把这个实验称为 Q,版本还是 QaQb。时间仍是一周就要出结果。


比较尬的情况出现了,小明这个产品上线时间不太长,预计流量在五六千,但是这两个实验因为牵扯到上头的爱好啊下面的辛勤努力啊市场调查得到的用户喜好啊 balabala 一堆问题,于是需要更多的流量来测试——差不多是五千吧。


好嘛。这要是仍然用同层互斥来安排实验,总共需要有一万流量,远大于小明产品的流量。这就意味着,需要排队安排实验——可是时间又不够了。怎么办???



很好解决,只要在流量层运用流量分层机制就好了。


2020-04-05 16:54590

评论

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

基于STM32设计避障寻迹小车

DS小龙哥

三周年连更

怎样判断户外LED显示屏质量是否达标

Dylan

媒体 广告 户外LED显示屏

Android C++系列:函数返回值注意事项

轻口味

c++ android 三周年连更

vue 入门知识点有哪些?

海拥(haiyong.site)

三周年连更

刘浩:当谈到RTO < 8s时,OceanBase究竟在说什么?

OceanBase 数据库

数据库 oceanbase

构建云边端一体的分布式云架构,软硬结合驱动边缘计算创新场景

百度开发者中心

云计算 存储 边缘云

递归算法

linux大本营

递归 数据结构与算法

C语言sqlite3,实现判断一个数据库存不存在,不存在就创建

linux大本营

数据库 C语言 sqlite3

AITO问界M5:最安全、智能的座驾

Geek_2d6073

智能感知编码优化与落地实践

百度开发者中心

人工智能 视频 百度智能云

乌合之众再次上演,打工人将被AI一键淘汰?

引迈信息

人工智能 AI 低代码 AIGC ChatGPT

烟雾弹?突然转变?如何看待微软发声:中国是主要的对手

加入高科技仿生人

人工智能 AI 数智化 ChatGPT

如何在makefile中链接Json解析库Reader

linux大本营

json makefile reader

软件测试/测试开发丨自动化测试之读取配置文件

测试人

软件测试 自动化测试 测试开发

低调且强大——JNPF低代码平台

这我可不懂

低代码 JNPF

linux下怎么拉取远程的代码并且合并到本地,保证不冲突

linux大本营

git Linux

知名直播App被苹果商店下架,或涉及侵权问题

HIFIVE音加加

ios iphone 软件开发

selenium源码通读·10 |webdriver/common/proxy.py-Proxy类分析

Python 测试 自动化测试 源码剖析 selenium

面试还不懂JVM性能调优,看这篇文章就够了!

程序员小毕

程序员 面试 后端 JVM jvm调优

iOS MachineLearning 系列(4)—— 静态图像分析之物体识别与分类

珲少

HummerRisk V1.0.1:k8s检测扩充、批量删除及修复bug

HummerCloud

开源 云原生 云安全 云原生安全

Mac无损音乐播放器:Audirvana for Mac中文

真大的脸盆

Mac Mac 软件 音乐播放 音乐播放器

火山引擎DataLeap:在数据研发中,如何提升效率?

字节跳动数据平台

运维 数据研发 企业号 4 月 PK 榜 任务模板

2023年第十二届数据技术嘉年华(DTC)资料分享

墨天轮

数据库 oracle 云原生 智能运维 国产数据库

给广场舞大妈讲讲什么是大语言模型!

FN0

AIGC

行业分析| 视频监控——AI自动巡检

anyRTC开发者

人工智能 音视频 视频监控 自动巡检

写一个回调函数

linux大本营

回调函数 C++

0Ω电阻在PCB板中的5大常见作用

华秋PCB

电路 元器件 PCB PCB设计 电阻

如何写出CPU友好的代码,百倍提升性能?

阿里技术

cpu 代码优化

websocket底层原理

linux大本营

nginx HTTP websocket 通信协议 web服务器

ubuntu如何安装Json解析库Reader

linux大本营

ubuntu JSON库 reader

揭开Testin A/B测试流量层的神秘面纱_文化 & 方法_云测数据_InfoQ精选文章