威尔·库尔特《趣学贝叶斯统计:橡皮鸭、乐高和星球大战中的统计学》学习笔记(1):以A/B测试为例学习贝叶斯统计

本文主要是介绍威尔·库尔特《趣学贝叶斯统计:橡皮鸭、乐高和星球大战中的统计学》学习笔记(1):以A/B测试为例学习贝叶斯统计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主要是新学期的概率论的作业要求:Write a summary (no more than ¾ of a page) of your experience with an application of probability to a real-life situation (e.g., an engineering problem.

–How was probability used to model the phenomena/situation?

–How was it measured?

–Did you perceive any useful outcomes or interesting insights?

基础知识

β分布

β分布 - 知乎 (zhihu.com),入门就是理解概率密度曲线的含义吧。至于说β分布的原理(为什么有效,我还不清楚)。

参数估计(2)正态分布、有先验概率的参数估计 - 知乎 (zhihu.com) 还有这篇也是讲到β分布。

什么是A/B测试?

各公司经常使用A/B测试对产品网页、电子邮件和其他营销材料进行测试,以确定哪种方法对客户最有效。

假设我们想检验的是增加图片对博客的转化率是有帮助还是会拖后腿。此前,每周的邮件都会包含一些图片。在测试中,我们会发送两封电子邮件:一封像往常一样包含图片,另一封则没有图片。这个测试之所以被称为A/B测试,就是因为我们在对一个变量的不同值(这里是有图片和无图片)进行比较,以确定哪一个表现更好。

我们把要进行测试的300人分成A、B两组:A组会收到与往常一样的电子邮件,最上面有一张大图片;B组则会收到没有图片的电子邮件。希望简洁的电子邮件不会让用户认为它是“垃圾”邮件,还能鼓励用户点击其中的内容。

之前我们每周都会群发一次邮件,根据目前得到的数据,我们有以下合理的预期:对任何给定的邮件,用户点击其中链接的概率应该在30%左右。为简单起见,我们将对这两个变体使用相同的先验概率。我们还将选择一个较弱的先验分布,这意味着转化率的概率范围很大。

之所以使用一个弱的先验,是因为我们并不知道自己期望的变体B会表现得怎么样,而且这是一个新的电子邮件活动,所以其他因素也会影响转化率,结果有可能更好也有可能更差。这里,我们将用Beta(3, 7)作为先验概率分布。这个β分布的均值是0.3,且能够表示转化率的概率范围很大。

点击未点击观察到的转化率
A(收到有图片)361140.24
B(没收到图片)501000.33

从上述的结果来看,我们很自然会觉得“收到图片”会降低转化率,但到底是不是这样呢?

我们可以将这两个变体视为想要估计的单独参数。为了得出每个变体的后验分布,需要分别结合它们各自的似然分布和先验分布。

我们已经决定,这些变体的先验分布是Beta(3, 7),它代表了一个相对较弱的信念,即在没有额外信息的情况下,我们对转化率的可能值期望较低。之所以说这是一个较弱的信念,是因为我们并不十分相信某个特定的数值范围,而是考虑了具有高概率的所有可能的转化率。对每个变体的似然,我们也同样使用β分布,其中参数α等于链接被点击的次数,而β则等于链接没有被点击的次数


Beta(α后验,β后验)=Beta(α先验+α似然,β先验+β似然)
因此,变体A用分布Beta(36+3,114+7)来表示,变体B则用分布Beta(50+3,100+7)表示。

显然,我们的数据表明,变体B更胜一筹,因为它有更高的转化率。从之前关于参数估计的讨论中,我们知道真实的转化率只是一系列可能值中的一个。


但如果在处理A时只是我们的运气不好,而其真实转化率实际上要高得多呢?又或者,在处理B时我们只是运气好,而其真实转化率要低得多呢?变体A可能其实要更好,虽然它在我们的测试中表现很差。

所以这里真正的问题是:我们有多确定变体B更好?这正是蒙特卡罗模拟的意义所在

蒙特卡罗模拟

蒙特卡罗模拟是一种利用随机抽样来解决问题的方法。具体到这个例子,我们要从两个分布中随机抽样,每个样本都是根据其在分布中的概率选择的,这样高概率区域的样本就会出现得更频繁

取样的频率越高,就越能准确地判断出在取样的所有情况中,到底有多少种情况下的变体B更好。一旦有了样本,就可以计算变体B更好的情况与所有样本总数的比例,进而得到变体B好于变体A的准确概率。

批注:高中的几何概型就是一种蒙特卡罗方法吧~

在多少种情况下,变体B表现更好?比变体A好多少?

我们可以看上面这个比例:B样本/A样本

变体B有大约25%的概率能比变体A提高50%以上,甚至有不小的概率其转化率是变体A的一倍以上!现在,在选择变体B而不是变体A时,我们可以通过表述“变体B比变体A差20%的概率与它比变体A好1倍的概率大致相同”来解释我们的选择。在我听来,这是一个不错的选择,要比“变体B和变体A之间有统计学上的显著性差异”这样的陈述更能表达我们所掌握的知识。

反思与总结 

  1. 和“贝叶斯”有什么关系?
  2. 如何根据统计学分布来给建议呢?
  3. 待续。

这篇关于威尔·库尔特《趣学贝叶斯统计:橡皮鸭、乐高和星球大战中的统计学》学习笔记(1):以A/B测试为例学习贝叶斯统计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/614022

相关文章

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert