威尔·库尔特《趣学贝叶斯统计:橡皮鸭、乐高和星球大战中的统计学》学习笔记(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自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl