ABTest样本量计算

news2024/11/18 7:43:46

A/B 测试一般是比较实验组和对照组在某些指标上是否存在差异,当然更多时候是看实验组相比对照组某个指标表现是否更好。

这样的对比在统计学上叫做两样本假设检验,即实验组和对照组为两样本,假设检验的原假设Ho:实验组和对照组无显著差异;备择假设H1:实验组和对照组存在显著差异。

显然,如果实验选取的样本很小,实验结果可信度就不高,因为很可能抽取的样本不能代表真实的水平。而在实际中,因为各种成本的考量,实验样本量也不可能无限大。那么,一般至少需要多少样本才能得到可信的结论呢?

实验所需样本量的一般公式

统计学里有最小样本量计算的公式,公式如下:

样本量计算公式

其中n是每组所需样本量,因为A/B测试一般至少2组,所以实验所需样本量为2n;α和β分别称为第一类错误概率和第二类错误概率,一般分别取0.05和0.2;Z为正态分布的分位数函数;Δ为两组数值的差异,如点击率1%到1.5%,那么Δ就是0.5%;σ为标准差,是数值波动性的衡量,σ越大表示数值波动越厉害。

从这个公式可以知道,在其他条件不变的情况下,如果实验两组数值差异越大或者数值的波动性越小,所需要的样本量就越小。

比例类数值所需样本量的计算

实际A/B测试中,我们关注的较多的一类是比例类的数值,如点击率、转化率、留存率等。

这类比例类数值的特点是,对于某一个用户(样本中的每一个样本点)其结果只有两种,“成功”或“未成功”;对于整体来说,其数值为结果是“成功”的用户数所占比例。如转化率,对于某个用户只有成功转化或未成功转化。

比例类数值的假设检验在统计学中叫做两样本比例假设检验。其最小样本量计算的公式为:

R和G*Power使用的样本量计算公式

上面式子中p1我们称为基础值,是实验关注的关键指标现在的数值(对照组);p2我们称为目标值,是希望通过实验将其改善至的水平;第一类错误和第二类错误上边已经提到,暂不多做说明,通常设定α为0.05,β为0.2 。

既然样本量计算的公式已经清楚,那么我们按照公式代入即可得到结果。这里介绍5种获得比例类数值实验所需样本量的方法,分别为在线工具、Excel、R、Python、G*Power。

以下将以以p1=0.3,p2=0.305,α=0.05,β=0.2为例,演示在这几个工具里计算样本量的方法。

用在线工具计算所需样本量

Evan's Awesome A/B Tools 是一个被使用较多的在线工具,使用起来非常方便,如图:

在线计算所需样本量

简单输入几个,底下就显示了结果:每组大约需要132047的样本量。

在Excel中计算所需样本量

在Excel中用上NORM.S.INV等函数,即可实现样本量计算。如图:

Excel中计算所需样本量

C7-C11的公式分别为:

C7:=(NORM.S.INV(C4/2)+NORM.S.INV(C5))^2*(C2*(1-C2)+C3*(1-C3))/(C3-C2)^2

C8:=(NORM.S.INV(C4/2)*SQRT(2*(C2+C3)/2*(1-(C2+C3)/2))+NORM.S.INV(C5)*SQRT(C2*(1-C2)+C3*(1-C3)))^2/(C3-C2)^2

C9:=(NORM.S.INV(C4/2)*SQRT(2*C2*(1-C2))+NORM.S.INV(C5)*SQRT(C2*(1-C2)+C3*(1-C3)))^2/(C3-C2)^2

C10:=2*(NORM.S.INV(C4/2)+NORM.S.INV(C5))^2/(2*ASIN(SQRT(C2))-2*ASIN(SQRT(C3)))^2

C11:=16*(C2*(1-C2))/(C3-C2)^2

在R中计算所需样本量

R中可以直接使用power.prop.test函数实现。一行代码就可搞定:

1

power.prop.test(p1 = 0.30, p2 = 0.305, sig.level = 0.05, power = 0.80, alternative = "two")

执行后立即得到输出结果,结果中n即为每组所需的样本量。

R中计算所需样本量

在Python中计算所需样本量

Python中科学计算库里statsmodel也可直接支持计算。具体代码为:

1

2

3

4

from statsmodels.stats.power import zt_ind_solve_power

from statsmodels.stats.proportion import proportion_effectsize as es

zt_ind_solve_power(effect_size=es(prop1=0.30, prop2=0.305), alpha=0.05, power=0.8, alternative="two-sided")

执行后得到结果:

Python中计算所需样本量

在G*Power中计算所需样本量

打开G*Power,选取Test family、Statistical test和Type of power analyisis为如下截图所示且输入对应数值。A/B 测试一般是实验组和对照组样本一样多,故N2/N1设为1。

点击Calculate,得到Sample size group1和Sample size group2即为对照组和实验组所需的样本量。

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

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

相关文章

Springboot 整合 JWT + Redis 实现双Token 校验Demo(简单实现)

一、新建一个SpringBoot 项目,springboot项目创建过程详见 mac idea 创建 springboot 项目_JAVADWangJing的博客-CSDN博客_mac idea创建springboot项目 二、SpringBoot 整合使用 Rdis SpringBoot 项目 添加 redis配置_JAVADWangJing的博客…

Linux内存映射函数mmap与匿名内存块

学习系列:《APUE14.8》《CSAPP9.8.4》 1 总结 memory-mapped io可以将文件映射到内存中的buffer,当我们从buffer读写数据时,其实操作的是对应文件中的数据。这样可以达到不使用READ/WRITE的IO操作。mmap也可以直接映射匿名内存块&#xff0c…

零信任对企业安全防护能起到什么作用?

随着网络攻击的不断演变,变得更加普遍和复杂,企业正在寻找一种基于身份的网络安全新方法。这些策略和解决方案旨在保护企业内的所有人和机器,并用于检测和防止身份驱动的违规行为。 企业很容易被感染,但问题在于如何找到解决方案。…

基于花朵授粉算法的无线传感器网络部署优化附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

hadoop集群安装(二):克隆服务器集群并免密

文章目录说明分享集群构建集群规划角色划分配置主机名、ip和主机名映射ssh免密总结说明 已 上篇 创建模型虚拟机为基础构建hadoop集群 分享 大数据博客列表开发记录汇总个人java工具库 项目https://gitee.com/wangzonghui/object-tool 包含json、string、集合、excel、zip压缩…

美食杰项目 -- 个人主页(四)

目录前言:具体实现思路:步骤:1. 展示美食杰菜谱大全效果2. 引入element-ui3. 代码总结:前言: 本文给大家讲解,美食杰项目中 实现个人主页的效果,和具体代码。 具体实现思路: 判断是…

如何复用ijkplayer库实现ffmpeg的功能

ijkplayer库介绍 现在ijkplayer播放器应用的非常广泛,很多播放器基本上都是基于ijkplayer二次迭代开发的,众所周知,ijkplayer是基于ffplay的,所以要使用ijkplayer,就必须使用三个so库。 jeffmonyJeffMonydeMacBook-P…

MySQL Server 和 MySQL Workbench安装

对于开发人员来说,只需要安装 MySQL Server 和 MySQL Workbench 这两个软件,就能满足开发的需要了。 ⚫ MySQL Server:专门用来提供数据存储和服务的软件。 ⚫ MySQL Workbench:可视化的 MySQL 管理工具,通过它&#…

会议信息管理系统SSM记录(四)

目录: (1)部门管理:查询-添加-删除 (2)部门管理:修改 (1)部门管理:查询-添加-删除 在DepartmentController中添加方法: 这里getAllDeps方法上篇…

Charles模拟弱网

Charles模拟弱网,适用PC端和移动端(IOS/Android) 1.打开Proxy->Throttle Settings,以charles 4.2版本为例 2.出现Throttling的界面 3.预设那里有Charles常用的网络设置模拟的数据,根据需要自己选择即可…

【js学习】闭包理解

闭包原理 js使用的是词法作用域,词法作用域的意味着函数执行使用的是定义函数时生效的变量作用域。即函数执行时,里面的参数访问跟执行函数时的作用域无关。如下代码2所示最后输出的是local scope。 闭包定义:js函数对象的内部状态不仅要包…

神经网络的基本工作原理——机器学习

目录 ​编辑 一、实验内容 二、实验过程 1、算法思想 2、算法原理 3、算法分析 三、源程序代码 四、运行结果及分析 五、实验总结 一、实验内容 掌握神经元细胞的数学模型;理解并掌握神经网络的训练过程;理解并掌握神经网络中的矩阵运算&#xff…

Neo4j入门实战

1.介绍 2.实战 Neo4j的sql语句 1.创建多个节点 CREATE (:student {name:小张,age:20}),(:student {name:彭莎丽,age:18})2.匹配节点将节点删除 这样删除是将student中的条件节点删除——>会变成空白节点 match (m:student {name:"Fairy同学"}) remove m:stu…

Docker数据管理

目录 一、数据卷 二、数据卷容器 三、容器互联 管理 Docker容器中数据主要有两种方式: 数据卷(Data Volumes)数据卷容器(DataVolumes Containers) 一、数据卷 数据卷是一个供容器使用的特殊目录,位于容…

设计模式之美——基于接口编程

抽象类在被继承时体现的是 is-a 关系,接口在被实现时体现的是 can-do 关系 例如,Plane can fly. Bird can fly,应该把 fly 定义成一个接口。 – 参考 《码出自效Java 开发手册》 函数的命名不能暴露任何实现细节。比如, uploadT…

集合类ArrayList的扩容机制详解

ArrayList类的内部对构造方法进行了重载,提供了无参构造和有参构造两种构造方法。在ArrayList类的内部维护了一个elementData数组用来存放添加的对象。(关于transient关键字:该关键字修饰的属性,不会进行串行化、序列化)。 目录 无参构造扩容…

胡编乱造的自我介绍

写在前面:这篇文章的内容纯属胡编乱造 切勿信以为真。 一、 姓:(Black) 布莱克 名:(Sirius) 天狼星 中间名:(Orion) 奥莱恩 结束! 二、于 2022年3月 入读清华大学信息技术系硕士 ! 结…

harbor 安装

harbor 安装一.离线安装helm1.下载安装包,上传到服务器2.解压4.验证二.安装harbor1.导入 Harbor源2.下载 Harbor Helm目录3.解压缩4.修改 Harbor Values文件5.部署 Harbor6.访问 Harbor7.验证8.修改daemon.json9.登录Harbor、并push镜像验证10.登录Harbor页面验证是…

基站交直流配电多回路无线智能电量采集监控装置

【摘要】介绍了安科瑞两款多回路无线智能电量采集监控装置,可应用于基站的交直流配电监控、低压出线开关柜集中监控、末端配电箱等集成电力参数监测、电能计量、环境温湿度监测以及无线传输的各类应用场景。 【关键词】无线监控;多回路监控;铁…

OpenFeign源码2-Bean注册过程和调用过程

0. 环境 nacos版本:1.4.1Spring Cloud : Hoxton.SR9(没用2020.0.2版本后面说明)Spring Boot :2.4.4Spring Cloud alibaba: 2.2.5.RELEASESpring Cloud openFeign 2.2.2.RELEASE 测试代码:github.com/hsfxuebao/s… 20…