AB Test实验设计

news2024/11/25 0:29:07

1. 版本设计

实验版本的设计要遵循变量的单一性,不能一下子改变多个因素,如同一个按钮不能同时改变按钮颜色和按钮文字,实验设计越简单越容易得出正确的结论。

案例时间:

2. 实验时长

业界的实验时长一般是2-3周,最短时长建议不要少于7天。因为不同日期活跃的用户群体可能不一样,所以最好要覆盖一个周期,如7天、14天、21天。

那实验时长是不是越长越好呢,也不是的,实验时间过长会把各版本的区别拉平了,不同时期用户对不同策略的反应不一样。

例如0元夺宝玩法刚出来的时候用户会特别感兴趣,时间久了大家都知道这是一个套路会慢慢免疫选择性忽略掉,在玩法诞生之初进行实验可能效果会很显著,时间长了之后这玩法的效果就会慢慢下降。

实验结果也是有时效性的,仅对当前时间当前用户群有效果并不是放之四海而皆准,所以实验时间不宜过长,应快速验证快速迭代。

3. 选择指标

一个改动影响的指标可能是多方面的,例如更改了加购物车按钮的颜色,点击该按钮的人可能会增多,从而间接导致下单的人数增多。那如何从众多指标当中选择出实验效果指标呢?

既然直接效果指标已经可以决定实验的成败,为什么还要添加其他间接指标呢,这就涉及到一个取舍问题了,不是实验成功了就一定要上线最佳版本。

假如实验版本确实有提升,但付出的成本有点大,那就要权衡下利弊再决定要不要上线新版本。又或者实验版本对我们想要提升的指标有显著效果,但影响到了其他指标的大幅下降,这时候也需要我们进行权衡。

具体可视当前产品北极星指标而定,如当前产品战略目标为营收,该实验虽对用户活跃有影响但能提高营收,也是可以全量上线新版本的,但当前战略目标为有效日活,那就要慎重考虑新版本的上线问题了。

4. 案例时间

基于前面的例子,影响最为直接的指标为点击付费弹窗支付按钮人数,但是这个跟各实验组具体人数也有关系,所以应该转化为比率。

分母应该是点击表情按钮人数而不是展示付费引导弹窗人数,因为两个版本的展示付费引导弹窗触发条件不一样,方案B已经人为的过滤掉一批低质量用户,必然会对展示点击率产生影响。

本实验间接影响的正向指标为付费人数,同理也需转化为付费率。正如产品同学A所说,发表情改为付费发送会降低那些点击表情按钮意欲发表情的用户的体验,有关用户活跃性的指标同时也需要关注,如:人均使用时长、留存率,这些活跃性指标均可作为本实验的负向指标来关注。

5. 计算最小样本量

之所以要计算最小样本量,主要有以下几点原因:

  1. 样本量太小不能代表整体的情况,容易受到偶然因素影响,这就要求计算出至少抽取多少样本量才能代表整体情况;
  2. 避免浪费流量,通常有多个迭代同时进行,给其他迭代留出实验空间;
  3. 如果实验是负向的,可以避免带来大面积不必要的损失。

1)计算最小样本量两种检验方法

Z检验:检验实验组和对照组服从分布的均值是否相等

卡方检验:检验实验组是否服从理论分布(将对照组的分布视为理论分布)

在A/B Test中常见的检验方法为Z检验,下面就以Z检验为例计算最小样本量,在这之前先来了解下以下知识点:

  • α:表示出现第一类错误的概率,也称为显著性水平,常见的取值有1%、5%、10%、20%,一般取值5%,即犯第一类错误的概率不超过5%,常见的表示方法为:1-α,称为统计显著性,表示有多大的把握不误诊。
  • β:表示出现第二类错误的概率,一般取值20%,更常见的表示方式为统计功效power=1-β,即有多大把握能检查出版本差异。

从两类错误上限的取值(α是5%,β是20%)我们可以了解到A/B Test的重要理念:宁肯砍掉多个好的产品,也不要让一个不好的产品上线。

指标基线:原有方案的指标,有可能是数值,有可能是比率,取决于选择的直接效果指标。这个指标由历史数据得出,如果是一个全新的版本实验没有历史数据,可参考其他类似功能的指标数据,若都没有只能根据经验大概给出一个基准值。

MDE:检验灵敏度,以下用Δ表示,新方案的直接效果指标与指标基线差值的绝对值,即新方案与旧方案的区别有多大,该参数越大需要的样本量越少。

方差:方差的计算方式根据直接核心指标是数值或者比率决定。

单/双尾检验:用哪一种类型检验视原假设而定,若原假设为新旧方案无区别用双尾检验,使用场景为样本量计算或者AA测试;若原假设为新方案优于旧方案或旧方案优于新方案则用单尾检验,后面用到的实验结果评估用的则是单尾检验。

Z值:该值可以依据α和β指标确定出对应的Z值,有固定的Z值表可以查,也可以通过excel的NORMSINV函数计算。

鉴于篇幅问题,后续有时间再专门写一篇详细介绍Z检验,下面直接贴Z检验样本量计算公式出来吧(这里使用双尾检验因此使用α/2):

2)案例时间

计算样本量之前首先要获取历史的支付按钮点击率,一般取最近一个月的历史数据,根据历史数据计算出支付按钮点击率均值p:

p=(0.075+0.079+0.087+……+0.083+0.077+0.081) / 30=0.08

  • 根据支付按钮点击率均值p计算出方差:

  • 确定MDE值,新方案至少比旧方案提升多少才能达到我们的预期,即计算新方案的ROI,避免实际收益不能弥补新方案的研发和推广成本,这里我们取比原方案提升10%,即新方案期望的点击率为:p(新方案支付按钮点击率)=0.08*(1+10%)=0.088,可得MDEΔ=0.088-0.008=0.008;
  • 计算Z值,本实验中我们取α=5%,β=20%,通过NORMSINV计算,得:

  • 从以上数据,计算最终所需样本量为:

通过以上计算,每个实验组需要18053人,有两个实验组则总需18053*2=36106人。

6. 圈选用户

计算出了实验所需人数,下一步就是从总用户群体中抽取出对应人数进行实验,这一步我们将会面临着两个问题:如何从一个总体中按一定比例抽取随机样本;如果同时进行的实验中有互斥的怎么办。

针对以上两个问题我们有以下三种解决方案,下面分别介绍下:

1)单层方案

所有流量按某个参数(UserID,DeviceID、CookieID、手机号等)分成n个桶,假设选定UserID,有以下两种方法:

以上解决了随机性问题,并没有解决实验互斥的问题,只能靠人工给各实验指定分组进行实验。

2)多层方案

单层方案适合简单的验证,不适合长期大规模做交叉实验,流量利用效率太低,且随机组不好把握,最终容易造成某一组用户指标明显优于其他组。

为了解决以上问题,多层分组方案应运而生,人为定义一些分层,如:UI 层、推荐算法层,每一层中再对用户随机分组,即可实现同一个用户出现在不同层的不同组里面,做到流量的重复利用。具体实现方法如下:

从上图看到流量经过每一层时都会被打散重新分配,下一层每一组的流量都随机来源于上一层各组的流量,如推荐算法层的0组用户均匀来源于UI层的0、1、2……n组用户。

如此一来我们只需要指定实验处于哪一层,系统就可计算出该层还有多少剩余流量然后自动分配,即使实验不互斥也没必要共用相同的实验组。

3)无层方案

多层方案做到了流量的重复利用,但是并没有发挥出最大的重复利用价值。

单独看每一层,其实就是一个单层方案,并没有从根本上解决问题,只不过是复制出来多几层而已,如果某一层实验非常多,还是会存在流量不够用的情况,这就衍生出了无层方案。

所谓无层,就是每个实验都是单独一层,具体实现方法如下:

如此一来确保了每个实验都单独占有所有流量,可以取任意组的流量进行实验,但是又引进了新的问题,多层方案将实验的互斥在层内进行了限制,无层会导致同一个用户命中多个实验,即使这些实验是互斥的。

显然这样子是绝对不允许的,解决方法是赋予每个实验优先级,例如按上线优先级排序,优先将流量赋予高优先级用户。也可以在创建实验的时候如果有互斥实验,新创建实验的分组算法复用已有实验的实验ID进行分组即可避免。

以上分流算法最终会形成n个组,需要进行AA实验验证分组是否均匀。验证各组之间无显著性差异后即可从n组中随机抽取出某几组达到实验所需的用户量进行实验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Packet Tracer - 在 OSPFv2 中传播默认路由

地址分配表 设备 接口 IPv4 地址 子网掩码 默认网关 R1 G0/0 172.16.1.1 255.255.255.0 不适用 S0/0/0 172.16.3.1 255.255.255.252 不适用 S0/0/1 192.168.10.5 255.255.255.252 不适用 R2 G0/0 172.16.2.1 255.255.255.0 不适用 S0/0/0 172.16.3.2 …

Redis对象及redisObject源码解析

写在前面 以下内容是基于Redis 6.2.6 版本整理总结 一、对象 前面几篇文章,我们介绍了Redis用到的主要的数据结构,如:sds、list、dict、ziplist、skiplist、inset等。 但是,Redis并没有直接使用这些数据结构来实现key-value数…

使用k8s创建一个支持ssh的pod,docker

在容器场景下 用ssh去登录一个docker 是不提倡的 可是有时为了方便定位问题 我制作了一个支持ssh的镜像 节约大家的时间 docker使用方法: docker run --namec7-sshd --privileged -itd -p 1022:22 lnwaycool/centos7_ssh:v1 /usr/sbin/init ssh root127.0.0.1 -p 1022 登…

猴子也能学会的jQuery第七期——jQuery动画(上)

📚系列文章—目录🔥 猴子也能学会的jQuery第一期——什么是jQuery 猴子也能学会的jQuery第二期——引用jQuery 猴子也能学会的jQuery第三期——使用jQuery 猴子也能学会的jQuery第四期——jQuery选择器大全 猴子也能学会的jQuery第五期——jQuery样式操作…

外部H5页面打开微信小程序最新流程

当前时间2022年11月22日,记录一下外部H5如何打开指定微信小程序的指定页面最新流程。 因为微信小程序后台已关闭生成 小程序 scheme 码 入口,所以只能通过如下方式: 1.服务端获取微信小程序 scheme 码 前提条件:目前仅针对国内…

基于中国新能源汽车税收政策下成都市场发展路线研究

目 录 摘 要 I Abstract II 第一章 绪论 1 1.1选题背景及意义 1 1.2国内外新能源汽车税收政策现状 2 1.2.1国内新能源汽车税收政策 2 1.2.2国外新能源汽车税收政策 3 1.3本课题研究主要内容 4 第二章 新能源汽车市场发展现状及存在的问题 5 2.1市场发展现状 5 2.2存在的问题 5 …

TensorFlow之文本分类算法-2

1 前言 2 收集数据 3 探索数据 4 选择模型 5 准备数据 数据被输入模型之前,需要将数据转换成模型能理解的格式,该过程被称之为数据标准化。 首先,已收集到的数据样本可能是以指定的顺序存储,而在实际分析中,期望…

邮件助手、监控邮件上报电脑截图、网课监控助手

起因:看到别的网友写的一个程序,监控在家上网课的状态,防止孩子玩游戏。没界面无法配置更多参数。自己写了一个。功能基本齐全了。 收件地址:接收邮件的邮箱 抄送地址:可以多个邮箱,用|分开即可。 标题、内容、版权位置可以自定义内容。 设置发送频率(默认10分钟),…

深入浅出日志体系(logback最佳实践)

最近和大家说了不少“大问题”(中庸之道啥的),今天想和大家聊一个“小问题”——如何写日志。 在很多人的认知里面,日志的确是可有可无的小问题,因为有没有日志都不影响业务功能的运行。正因为如此,日志问…

内存取证系列6

文章目录文档说明挑战说明解题过程查看系统镜像查看系统进程查看使用命令查看命令输出查看历史命令记录搜索压缩包 获取虚拟地址并导出本地扫描ie历史记录扫描firefox历史记录(默认不支持)导出浏览器数据分析浏览器数据解压压缩包 得到flag2继续分析浏览器数据修复图片 获得fla…

Oracle AutoVue 21.0.x最新支持程序文件格式及版本

目录 前言 Engineering & Construction / Energy / Utilities Industrial Manufacturing / Automotive / Aerospace & Defense Electronics & High Tech Desktop / Office Graphics Others 前言 AutoVue官是一个多用途、多功能的图…

linux系统中cpu性能优化

cpu性能: uptime命令中的系统平均负载: 平均负载时指的单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系. 可运行状态的进程: 是指正在使用Cpu或者正在等待Cpu的进程,也就是我们ps命令看到的处于Runing状态的进程.…

物联网安全年报事件回顾

执行摘要 随着物联网的不断发展,物联网安全也被越来越多的人所关注。我们于 2016 年发布《物联网安全 白皮书》,进行物联网安全的科普介绍;于 2017 年发布《2017 物联网安全年报》,关注物联网资产 在互联网上的暴露情况、物联网设…

【CNN】GoogLeNet——大胆创新网络结构

前言 2014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了图片分类大赛第一名、VGG紧随其后,这两类模型结构的共同特点是网络深度更深了。VGG继承了LeNet以及AlexNet的一些框架结构,而GoogLeNet则做了更…

uniapp集成Android原生sdk

最近公司有个项目,需要调用客户提供的sdk扫描rfid,项目又是用uni开发的,客户提供的sdk只有Java版本,我发现uni是提供集成原生sdk的,所以研究了一下怎么使用,并记录下来过程。 准备 SDK 文件 下载 首先下…

VUE搭建后台管理界面

后台管理一、前言二、依赖配置三、koa框架四、数据库五、路由六、前端界面6.1 登录界面6.2 注册界面6.3 展示界面七、阿里云部署7.1 前端项目7.2 后端node7.3 mysql安装7.4 测试八、总结一、前言 本篇文章从头到尾过一遍vue3搭建项目的过程,实现一个用户登录、注册…

Linux上使用telnet连接本机IP地址端口

场景 Linux开启了iptables!!! 开启本机TCP80端口服务。Linux本机IP地址是192.168.204.129。本机telnet连接本机的TCP80端口。 目的 telnet 192.168.204.129 80,能够连接通。 输入规则 1)需要配置一个让本机TCP80端…

日置IM3570阻抗分析仪产品介绍分享

日置IM3570阻抗分析仪 日本日置IM3570阻抗分析仪1台仪器实现不同测量条件下的高速检查,1台仪器实现LCR测量、DCR测量、扫描测量等的连续测量和高速检查,日本日置IM3570阻抗分析仪LCR模式下*快1.5ms(1kHz),0.5ms(100kHz&#xff0…

基于keras构建lstm模型自动生成音乐系统

目录 LSTM 机器学习生成音乐 1 数据集介绍 1 将 mid 转成 note 数组 4 将 note 数组转成 mid 文件 5 获取数据集并将其保存 6 将 note 进行编号 7 构建数据集 8 截取数据 8 进行 one-hot 编码 10 构建模型 11 训练 13 生成音乐 13 加载数据 16 加载模型 16 构建 id 与 note 的映…

我服了!SpringBoot升级后这服务我一个星期都没跑起来!(下)

14. DiscoveryEnabledServer Not Found 主要问题还是 eureka 中没有了 ribbon 相关的依赖。 Caused by: java.lang.NoClassDefFoundError: com/netflix/niws/loadbalancer/DiscoveryEnabledServerat java.lang.Class.getDeclaredMethods0(Native Method) ~[?:?]at java.lan…