威尔·库尔特《趣学贝叶斯统计:橡皮鸭、乐高和星球大战中的统计学》学习笔记(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

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

IDEA与MyEclipse代码量统计方式

《IDEA与MyEclipse代码量统计方式》文章介绍在项目中不安装第三方工具统计代码行数的方法,分别说明MyEclipse通过正则搜索(排除空行和注释)及IDEA使用Statistic插件或调整搜索... 目录项目场景MyEclipse代码量统计IDEA代码量统计总结项目场景在项目中,有时候我们需要统计

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

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和并发控制:② 垃圾回收:③ 栈和