学习笔记三:ABtest
认识ABTest
1、认识ABtest
ABTest是互联网企业中应用于Web开发的一种科学的对比分析功能;是统计抽样与统计实验在互联网企业中的一种常见应用模式。
2、ABTest的必要性
2.1 风险控制
互联网的产品迭代,风险普遍偏高。一方面来源于高额的开发成本,一方面来源于巨量用户。
2.2 科学择优
如何说明一个产品改进方案有效?效果如何?
通过多种参数的调整,可以利用ABTest证明不同的改进方案的改进效果。
3、ABTest适用场景
3.1适用场景
(1)产品迭代可以使用AB测试;
(2)算法优化可以使用AB测试;
(3)市场营销的部分场景可以使用AB测试。容的筛选,时间的筛选,人群的筛选,我们也可以使用AB测试来实验验证效果。
3.2不适用场景
(1)变量不可控
比如我们业务有两个APP,我们想做一个策略,验证是否能够提高用户使用了A产品,再去使用B产品的概率。这种是不支持AB测试的,因为用户关闭一个APP后,非常多的不可控因素。
(2)样本量较小也不支持AB测试
从统计学上说,要验证一个数据的有效性,需要一定的样本量。
(3)全量投放
比如我们开了一个发布会,换了一个logo,这种全量投放,怎么做AB测试?你可以让用户不来参与发布会还是让用户不看到新logo?!
企业ABTest业务流程
实际遇到的需要ABTest的业务:
1、实际业务的ABTest流程
项目流程
2、ABTest实验步骤
2.1选取指标
一般通过具体的指标属性来找寻相应的检验方法
2.1.1指标分类
指标可以分为两种类别:
(1)绝对值类指标(均值/方差)
平常直接计算就能得到的,比如DAU,点击次数等。一般都是统计该指标在一段时间内的均值或者汇总值,不存在两个值之间还要相互计算。
(2)相对值类指标(比例)
与绝对值类指标相反,我们不能直接计算得到。比如某页面的CTR要计算点击数和展现数,两者相除才能得到该指标。类似的,还有XX转化率,XX点击率,XX购买率一类的。我们做的AB实验,大部分情况下都想提高这类指标。
根据指标我们可以知道,该如何计算最小样本量,以及实验周期,以及对应的检验方法。
2.2建立假设
建立了原假设和备选假设,原假设一般是没有效果,备选假设是有效果。
2.3选取实验单位(面试坑点)
实验单位一般有3种:
(1)用户粒度
最推荐的,即以一个用户的唯一标识来作为实验样本。好处是符合AB测试的分桶单位唯一性,不会造成一个实验单位处于两个分桶,造成的数据不置信。
(2)设备粒度
以一个设备标识为实验单位。如果一个用户有两个手机,那么也可能出现一个用户在两个分桶中的情况,所以也会造成数据不置信的情况。
(3)行为粒度
以一次行为为实验单位,也就是用户某一次使用该功能,是实验桶,下一次使用可能就被切换为基线桶。会造成大量的用户处于不同的分桶。强烈不推荐这种方式。
2.4计算样本量
中心极限定理:只要样本量足够大,无论是什么指标,无论对应的指标分布是怎样的,样本的均值分布都会趋于正态分布。
案例1-相对值指标:
某产品点击率1.5%,波动范围[1.0%,2.0%],优化了该功能后,需要AB测试计算样本量
P:1.5%,p:2.0%(由于波动范围是[1.0%,2.0%],所以至少是2.0%
总样本量 = 16 * (1.5%(1-1.5%)+2.0%(1-2.0%))/ (2.0%-1.5%)^2=22000
案例2-绝对值指标:
某产品购买金额标准差是25,优化了该功能后,预估至少有5元的绝对提升,需要AB测试计算样本量
σ=25,Δ=5
总样本量 = 16 * 25252/5*5=800
总样本量,是指我们的实验单位,必须满足这个数量,实验结果中的数据检验才可信。也就是说,我们的实验桶和基线桶之和必须达到这个流量(实验桶和基线桶的比例是1:1),才能收集数据及检验指标。
2.5流量分割
流量切割有两种方式:分流和分层
分流:对整体流量分割,实验之间互斥。适用于发送优惠券等交叉会互相影响的情况。
分层:对整体流量分层/分流。同一用户属于多个实验,切互不影响。
2.6实验周期计算
已知最小样本量,切分流量后知道实验桶一天大概能有多少样本量,就可根据 最小样本量 / 实验桶天均流量=相应的实验周期。
2.7线上验证
验证实验策略是否真的触发;验证同一个用户只能在同一个桶中,要是同时出现在两个桶中,后期数据也会不置信。
2.8数据检验
具体检验常用两种方式:
(1)算P值
(2)算置信区间
算两组指标的差异值,如果我们算出的差异值置信区间不含0,我们就拒绝原假设,认为两组指标不同;但是如果包含0,我们则要接受原假设,认为两组指标相同。
3、从假设检验到ABTest
假设检验的逻辑:
if A then probably β NOT B;
有逆反命题:
B then probably NOT A;
一组完全对立的假设:
假设检验逻辑中,A成立一般会被我们选为原假设 H0;而A不成立,一般会被我们选择为备择假设 H1。
通过证明B在A条件的前提下是一个小概率事件,只要出现了事件B,就能证明事
件A不成立,选择拒绝原假设。
显著性水平0.05
计算A成立时的分布和样本统计量分布:
例如实验做一组100次抛硬币,一组10次投币的实验。
那扩大到实验做k次,每次实验投硬币100次,这时候,我们直接带入n和p用原来的算式来计算概率分布。
这时总体期望为:π = 0.5;总体方差为:π (1 - π) = 0.25
利用中心极限定理:从均值为μ、方差为σ^2的任意一个总体中抽取样本量为n的样本,当n充分大时,样本均值 xbar 的抽样分布近似服从均值为μ、方差为σ^2/n的正态分布。
样本比例的分布同样可以适用于中心极限定理,其样本比例的期望π可以直接套用其公式中的均值μ,套用公式可得:
对比B发生时的统计量位置,计算更极端事件的发生概率 P值。
P值计算公式:
使用excel的函数计算P值:
对比P值和显著性水平的大小,证明A事件发生的条件下,B事件是小概率事件。
使用显著性水平计算一个统计量的阈值。
使用Excel的函数NORM.INV(),可以求出显著性水平对应的阈值:
通过计算小概率阈值来进行检验,那么检验假设的逻辑就变为:
如何判断一个样本统计量符合什么分布?
(1)判断样本是不是大样本
(2)能否通过正态检验
(3)能否增加样本量
统计分布(Z分布,T分布,卡方分布)
单个总体问题:
T分布与标准正态分布(Z分布)都是以0为对称的分布,T分布的方差大所以分布形态更扁平些;
卡方分布是大于0的右偏分布,随着自由度的增加会趋近于正态分布(注意不是标准正态分布)。
多个总体问题:
不同分布的拒绝域
(1)对称型(Z分布、t分布):
(2)非对称型(卡方分布、F分布):
拒绝域:
(卡方分布在左侧的拒绝域特别小,所以拒绝的区间的值也比较少),所以卡方检验的拒绝域一般
放在右侧。F分布同理
企业的ABTest的关键流程
1 、整体实验设计与分析流程
2、实验设计
2.1确定业务目标:
(1)要提升的业务指标
(2)要改进的产品/策略
2.2选择检验指标
2.2.1选择一类指标
一类指标:不能容忍变差的指标;
二类指标:目标提升的指标。
如何确定一类指标?
给一类指标设定阈值
人货场角度进行分析
2.2.2选择统计量
2.3确定原假设与备择假设
2.4两类统计错误的防范
1、 α+β不一定等于1。
2、在样本容量确定的情况下,α与β不能同时增加或减少。
3、统计检验效力(1-β)当H0为假时,得出拒绝H0的正确结论的概率,被称做检验的效力
如何避免统计错误?
(1)I类错误防范 :
a.小概率α设置小些( 避免小概率的触发);
b.增加样本量(使异常数据的影响降低)。
(2)II类错误防范:
a.调大α(增加小概率的触发) 但是接受I类错误的代价远比II类错误的代价要大,所以不予使用;
b.II类错误概率只能在实验结束后才能计算发生二类错误的概率,这是一个事后值。所以在事前设计我们一般不考虑这个问题。默认二类错误的概率为20%。
2.5样本量计算
根据统计量抽样分布和边际误差确定样本量
样本量计算工具:http://powerandsamplesize.com/Calculators/Compare-2-Means/2-Sample-Equality
2.6检验策略选择、设计分组策略
2.7当企业没有AB测试的条件的时候,如何解决问题?
没有系统:没有灰度发布系统
用户量不够:如果是比例的,可以提高测试周期。(针对小众用户的)
时间成本高:时间跨度过长;类似于转化周期长
3、实验结论分析
3.1决策统计检验
(1)做实验决策可以通过统计量 及 统计量的P值来实现。
(2)也可以通过样本量分布和显著性水平来确定拒绝域和接受域,从而拒绝或者接受结果。见假设检验部分。
3.2决策业务问题
ABTest 公式求解注意事项
1、 不同统计量对应不同的样本量计算公式
1.1 统计量是均值差时
这里假设A为实验组,B为对照组;反过来也同样可以。
各个值的求法:
k:如果知道计划AB两组的差异,那我们按照计划AB两组的差异来取值,比如我们就要取A组5万人,B组1万人,那么k=5;如果没有计划差异,则一律假设为AB两组个数相同,也就是k=1;
σ:求出原有群体总体的标准差即可;
z1-alpha : stats.norm.ppf(1-alpha)
z1-beta : stats.norm.ppf(1-beta)
μA-μB:就是我们的H1;
假如我们H1为实验组比对照组显著大a。也就是:μA -μB > a。那么 μA - μB 在这里就可以假设 =a;
假设我们H1为实验组比对照组显著大。也就是:μA - μB > 0,那我们需要给 μA - μB 一个比较小的值,比如0.01或者0.1,因为"实验组比对照组大0"相当于实验组和对照组一样大,所以我们至少要给他一个值,比如0.01或者0.1。那么这里 μA - μB 就可以假设 = 0.01或者0.1;
然后我们就可以把我们求出来的内容带入公式,即可得出最小样本量。
1.2 统计量是比例差时:
这里假设A为实验组,B为对照组;反过来也同样可以。
我们需要求:
k:如果知道计划AB两组的差异,那我们按照计划AB两组的差异来取值,比如我们就要取A组5万人,B组1万人,那么k=5;如果没有计划差异,则一律假设为AB两组个数相同,也就是k=1;
z1-alpha : stats.norm.ppf(1-alpha)
z1-beta : stats.norm.ppf(1-beta)
πA和πB:
首先我们先求出原来总体的比例P1,将对照组πB带入,也就是πB = P1之后我们按照H1来求实验组πA。
假如我们H1为实验组比对照组显著大a。也就是:πA - πB > a。那么 πA 在这里就可以假设 =
πB + a;
假设我们H1为实验组比对照组显著大。也就是:πA - πB > 0,那我们需要给 πA - πB 一个比
较小的值,比如0.001 或者 0.01(因为是比例差,所以需要比均值差要小),因为"实验组比对照组大0"相当于实验组和对照组一样大,所以我们至少要给他一个值,比如0.001 或者0.01。那么这里 πA 就可以假设 = πB + 0.001 或者 0.01;
2 不同统计量对应不同的P值计算公式:
2.1 右侧检验
H1: μA - μB > a 或者 πA - πB > a
这时候,检验为右侧检验,拒绝域为右侧。
均值差使用
在这里我们,需要求的:
xbar_A : 抽取的实验组的均值
xbar_B : 抽取的对照组的均值
μA - μB:H1: μA - μB > a,即a
S_A^2:抽取的实验组的方差
S_B^2:抽取的对照组的方差
比例差使用
在这里我们,需要求的:
p_A : 抽取的实验组的比例
p_B : 抽取的对照组的比例
πA - πB:H1: πA - πB > a,即a
n_A :抽取的实验组的样本量
n_B :抽取的对照组的样本量
2.2 左侧检验
H1: μA - μB < a 或者 πA - πB < a
这时候,检验为左侧检验,拒绝域为左侧。
均值差使用
比例差使用
ABTest注意事项
1、网络效应
通常出现在社交网络,以及共享经济场景(如滴滴)。比如改动某一个功能,这个功能让实验组用户更加活跃。而实验组的用户的好友没有分配到实验组,而是对照组。那相应的,对照组用户也受到了实验组用户的影响。本质上,对照组用户也就收到了新的功能的影响,那么AB实验就不再能很好的检测出相应的效果。
解决办法:从地理上区隔用户,只要两个城市样本量相近即可。或者从用户上直接区隔,比如我们刚刚举的例子,我们按照用户的亲密关系区分为不同的分层,按照用户分层来做实验即可。但是这种方案比较复杂,建议能够从地理上区隔。
2、学习效应
例如产品做了一个醒目的改版,用户刚刚看到,会有个新奇心里,去点击该按钮,导致按钮点击率在一段时间内上涨,但是长时间来看,点击率可能又会恢复到原有水平。
解决办法:一个是拉长周期来看,在一段时间后再去观察指标。另一种办法是只看新用户,因为新用户不会有学习效应这个问题,毕竟新用户并不知道老版本是什么样子的。
3、多重检验问题
多次检验同一实验导致第一类错误概率上涨;同时检验多个分组导致第一类错误概率上涨。
常见的ABTest测试流程设计
网络效应
试验周期应该跨越一个活跃周期
多重检验问题
参考:https://blog.csdn.net/junhongzhang/article/details/122076335
学习笔记三:ABtest相关推荐
- J2EE学习笔记三:EJB基础概念和知识 收藏
J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...
- tensorflow学习笔记(三十二):conv2d_transpose (解卷积)
tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...
- Ethernet/IP 学习笔记三
Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...
- iView学习笔记(三):表格搜索,过滤及隐藏列操作
iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...
- 吴恩达《机器学习》学习笔记三——多变量线性回归
吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...
- Python基础学习笔记三
Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...
- Mr.J-- jQuery学习笔记(三十二)--jQuery属性操作源码封装
扫码看专栏 jQuery的优点 jquery是JavaScript库,能够极大地简化JavaScript编程,能够更方便的处理DOM操作和进行Ajax交互 1.轻量级 JQuery非常轻巧 2.强大的 ...
- MYSQL学习笔记三:日期和时间函数
MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...
- ROS学习笔记三:创建ROS软件包
,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...
- Python学习笔记三之编程练习:循环、迭代器与函数
Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...
最新文章
- mysql cronjob 备份_mysql 数据备份 crontab
- python分治算法_python算法实现-分治法
- PHP Extension Makefile 製作
- Servlet一次乱码排查后的总结
- python获取当前线程名称_python使用标准库根据进程名如何获取进程的pid详解
- 控制台当前行显示进度条,不换行
- base64格式的pdf预览
- JS搜索省份匹配出省份的所有城市
- android启动第三方浏览器问题
- 谷歌命名工具_Google地图正在重命名整个社区
- 服务器winsxs文件夹怎么清理工具,win7系统如何使用WinSxS工具安全删除WinSxS文件夹垃圾?...
- 微信支付接入-弹出支付框输入密码后一直在转圈,20s后提示:支付失败,请稍后再试
- [PyTorch]——DataLoader Num_workers
- Nhibernate+MVC开发小结
- c语言修炼内功,助你升级打怪!!
- 什么是百度竞价排名?
- Qt从入门到放弃——信号和槽机制(SigalSlot)
- Qt学习(12)——Qt5中的容器
- ShaderJoy —— 两种瘦脸+大眼特效【附完整参数】【GLSL】
- 移动C盘Users目录(我的文档)到其他盘
热门文章
- 计算机网络处理延时是什么原因,电脑网络延迟的解决方法是什么
- 剖析钉钉:B端产品的C端化运营策略
- Typora-PicGo-SMMS图床(Mac电脑和windows电脑)
- R 单样本wilcoxon test
- R语言威尔科克森(Wilcoxon)分布
- 套接字Socket编程
- 2020美容师(初级)考试题库及美容师(初级)模拟考试
- 【洛谷八连测R2】fateice-or
- 怎么上传云班课的计算机作业,云班课作业怎么提交_作业提交方法_咖绿茵手游站...
- MySQL权限系统(一).The MySQL Access Privilege System 概述