教你如何对产品做AB测试(abtest)
引用链接:https://blog.csdn.net/weiguang_123/article/details/49203239
ABtest一个总的目的和意图是,判断哪种种UI或rerank策略更优,通过事实的依据( CTR或下单率)判断哪种策略更符合用户的习惯和需求。
一、需求驱使
我们经常会面临多个设计方案的选择,比如app或pc端某个界面的某个按钮是用红色还是用蓝色,是放左边还是放右边。传统的解决方法通常是集体讨论表决,或者由某位专
家或领导或文青来拍板,实在决定不了时也有随机选一个上线的。虽然传统解决办法多数情况下也是有效的,但A/B 测试(A/B Testing)可能是解决这类问题的一个更好的方法。
所谓 A/B 测试,简单来说,就是为同一个目标制定两个方案(比如两个页面),让一部分用户使用 A 方案,另一部分用户使用 B 方案,记录下用户的使用情况,看哪个方案更符
合设计目标。
下面看一个例子:
在展示“格林秀上午酒店”这个poi时有客户端两种UI:
方案A:如左图,评分展示星状图片,消费人数再右边;
方案B:如右图,只展示评分分数,后边添加消费人数;
我们很难知道那种方案比较好,那我们可以做个实验,把a和B方案同时放到线上的生产环境,让一部分用户使用 A 方案,另一部分用户使用 B 方案,记录下用户的使用报表如下图,通过大自然的优胜劣汰法则,我们可以通过CTR或下单率等指标看哪个方案更符合设计目标。
二、系统模型
abtest实验可以分成两种,客户端client实验和服务端server实验,客户端实验一般来说只是UI上的实验,比如上面的例子,纯粹是展示端的策略;而服务端的实验是返回给client数据的内容做实验,比如推荐的策略,订单列表rerank策略等。下面通过client和服务端的实验分别做介绍。
(1)客户端实验:
方案1:
ABTest业务流程描述:
(1)客户端在需要获取ABTest策略的地方,通过RPC接口获取uuid在ABTest1这个实验下的规则:
- {
- "data": [
- {
- "name": "test1",//实验key
- "strategy": "strategy1", //策略key,客户端根据策略key选择策略方案
- "flow": "flow1", //流量组,用于上报。每个流量组只属于一个策略。
- "finished": false //标识实验是否终止,如果已经终止,则不再向utm_compaign参数的F字段append该规则,但是不影响规则,原规则依然生效。
- }
- ]
- }
其中testkey参数可以是多个ABTest实验的key:abtest1,abtest2。
(2)之后客户端向server发起的全部请求,URL的utm_compaign参数中的F位添加字符串:Fabtest1__strategy1__flow1,Nginx将utm_compaign打印到access日志。
(3)客户端在另一个需要获取ABTest策略的地方,通过http接口/get/abtest/{testkey}/{uuid} 获取uuid在ABTest2这个实验下的规则:
|
- {
- "data": [
- {
- "name": "abtest2",//实验key,
- "strategy": "strategy2", //策略key,客户端根据策略key选择策略方案
- "flow": "flow2", //流量组,用于上报。每个流量组只属于一个策略。
- "finished": false //标识实验是否终止,如果已经终止,则不再向utm_compaign参数的F字段append该规则,但是不影响规则,原规则依然生效。
- }
- ]
- }
方案二
流程:
- (1)(客户端的工作):app启动或切换城市,会请求abtest服务后台,获得所有的实验的以及命中的策略缓存在app中。
- (2)(abtest后台的工作):abtest接收一个uuid+ci+pt的请求,返回给app所有的实验的以及命中的策略,同时将这次请求和结果通过flume_agent收集日志,同步到Hadoop,最后导入Hive。
- (3)(客户端的工作):在第1步的请求中的获得的所有的实验的以及命中的策略缓存在app中。
- (4)(客户端的工作) : 进入到一个做ab实验的界面,按照第3步命中的实验的策略+展示的业务数据处理展示逻辑。
- (5)(客户端的工作:):会把第4步这个界面的信息和埋点信息上传到数据中心的原始日志,异步步少重试的方式上报埋点,
按HTTP GET/POST 日志收集方式,MGE,MGP,MPT的信息定义可以。移动页面流跟踪事件,这些事件封装为MPT事件,具体格式如下:
- </pre><pre name="code" class="javascript">"nm":"MPT",//页面流跟踪事件(PageTrack)
- "val":{
- "root": //层级前缀
- "name": //页面名/组件名/弹窗名
- "content": //数据请求URL内容/弹窗内容
- "type": //page/alert
- }
- "nm":"MGE",//Event跟踪,需要客户端手工埋点,用于解决临时统计需求
- "val":{
- "cid": //页面名 ||||类别 category id
- "act": //动作名 ||||动作 action
- "lab": //动作描述 ||||注释 label
- "val": //页面描述 ||||权值 value
- }
- "nm":"MGP",//页面跟踪,需要客户端手工埋点,用于解决临时统计需求
- "val":{
- "root": //层级前缀(非必需)
- "name": //页面名/组件名/弹窗名(必须)
- "content": //数据请求URL内容/弹窗内容(必须)
- "type": //page/alert
- }
(6)(数据组的工作):应用系统可以通过flume,将原始日志同步到Hadoop,最后导入Hive表,通过关联的条件将两个hive表关联,同时关联一些点击下单等数据,清洗数据成报表。
方案一和方案二的比较:
(2)服务端实验:
教你如何对产品做AB测试(abtest)相关推荐
- android怎么做ab测试工具,开发必读:网易专家解读Android ABTest 框架设计
应用中不同的场景.设计方案,不经过测试,你永远不知道消费者会更偏好哪一种.面对随时可能变更的产品需求,开发人员如何才能在保证测试进程的同时,让工作也变得高效.省力? 本章内容,网易严选Android资 ...
- 数据分析36计(12):做不了AB测试,如何量化评估营销、产品改版等对业务的效果...
往期系列原创文章集锦: 数据分析36计(11):如何用贝叶斯概率准确提供业务方营销转化率 数据分析36计(十):Facebook开源时间序列预测算法 Prophet 数据分析36计(九):倾向得分匹配 ...
- 「原理」AB测试-详细过程和原理解读
这篇我们来详细讲讲AB测试的原理和具体的过程. AB测试原理简介 AB测试最核心的原理,就四个字:假设检验.检验我们提出的假设是否正确.对应到AB测试中,就是检验实验组&对照组,指标是否有显著 ...
- 多场景业务实战-AB测试实战(数据分析干货!!!!!)
AB测试实战 学习目标 掌握如何设计AB测试 AB测试效果如何解读 掌握如何进行实验设计与效果计算 1.AB测试介绍 很多网站/APP的首页都会挂一张头图(Banner),用来展示重要信息,头图是否吸 ...
- AB测试-A/B Test
网络上有很多类似名称,又名A/B试验,ab test. 文章目录 一.应用场景 二.什么是AB测试 三.AB测试可以解决什么问题 四.AB测试的流程 五.AB测试常见的误区 六.AB测试的原理 一.应 ...
- 2018-3-10 unset 变量 ab测试
2019独角兽企业重金招聘Python工程师标准>>> 使用ali接口sdk包,发现对方喜欢主动unset 掉变量,好奇做ab测试 ab -c 10 -n 1000000 127.0 ...
- AB测试的介绍与实施
什么是AB测试 AB测试是为Web或App界面或流程制作两个(A/B)或多个(A/B/n)版本,在同一时间维度,分别让组成成分相同(相似)的访客群组(目标人群)随机的访问这些版本,收集各群组的用户体验 ...
- AB测试的统计学原理
随笔记一些: 1. 大数定理说明频率的极限是概率:中心极限定理说明不论总体服从何种分布,从中抽取n个样本,则这n个样本的总和或平均数是一个随机变量,当n足够大时,这n个样本的总和或平均数服从正态分布. ...
- 神策数据:游戏企业如何做产品 A/B 测试?三大案例一次搞懂
A/B 测试是游戏行业常用的数据试验方法,特别是有过游戏出海经历的企业,都尝试过 A/B 测试: 商店 A/B 测试:在 Google Play 开发者后台,通过 A/B 测试挑选最合适的游戏图标.商 ...
最新文章
- ​ 长达35页!美国公布未来新兴科技趋势报告
- 进程间通信(7) “剪贴板“、“匿名管道“、“命名管道“、“邮槽“4种方式总结
- linux服务器挂载不上nfs,我遇上的挂载不上NFS文件系统的坑
- Socket UDP无连接通信
- python中一切数据都是对象吗_python中的深拷贝(deepcopy)和浅拷贝(copy)
- 苹果将推出新款iPhone 7/8?为应对德国禁售令!
- VR安全很重要:Magic Leap低调收购安全公司
- java代码sudo命令_讓Java程序運行sudo命令
- 如何给Mac电脑的磁盘进行分区?
- 两台虚拟服务器如何串联,服务器主机多台串联
- 云栖大会开源重磅升级!PolarDB-X v2.2: 企业级和国产化适配
- HTML表格和样式及选择器
- 【从零开始学习YOLOv3】3.YOLOv3的数据组织和处理
- TS OLT Internet业务和组播业务(multicast)配置指导
- 让声音更清晰,用PR去掉视频中的噪音
- 小学计算机基础知识题目,小学信息技术基础知识复习题(清华版第三册)
- Linux 操作系统的安装
- 【SVA学习】01. 什么是断言(SVA)?
- Anaconda创建虚拟环境失败,一直显示done
- PhotoZoom图像缩放方法效果对比
热门文章
- project2016设置项目更新与监控方法
- 两步验证 非双重认证
- python将经纬度标注在地图上_python读txt与写excel,将经纬度坐标点显示在地图上...
- Python之文件操作(常用操作)
- 移动网维嘉忆网络基础设施介绍手稿笔记
- 离开腾讯首创业,贾佳亚谈人工智能 2.0 革命,技术究竟该如何变革?
- 还不懂PID控制?精华都在这了!
- win10远程连接服务器出现“这可能是由于credssp加密……”的原因及解决办法,win10家庭版无法找到gpedit.msc或者组策略或安全组策略
- 苹果8黑屏无法强制开机_iPhone黑屏转圈圈,无法开机解决方法
- 超微服务器查型号,超微 云服务器