A/B实验之置信检验(一):如何避免误判 (I类) 和漏报 (II类)

假设检验的依据:如何避免误判和漏报


A/B实验系列相关文章(置顶)

1.A/B实验之置信检验(一):如何避免误判和漏报
2.A/B实验之置信检验(二):置信检验精要

引言

在数据驱动决策的时代,假设检验作为一种重要的统计方法,帮助我们在不确定性中做出明智的选择。无论是评估新推荐算法的效果,还是测试市场营销策略的成功与否,假设检验都是确保结论可靠性的关键步骤。本文将详细介绍假设检验的基础知识、常见误区及其在实际中的应用。

在这里插入图片描述


一、什么是假设检验?

假设检验是一种基于样本数据来推断总体参数的方法。其核心思想是在两种对立假设之间做出选择:原假设(H0)和备择假设(Ha)。原假设通常表示“无差异”或“无效应”,而备择假设则代表存在某种差异或效应。通过收集数据并计算统计量,我们可以决定是否有足够的证据拒绝原假设。

当然,让我们更详细地解释假设检验中的原假设 (H0) 和备择假设 (Ha),并探讨它们在AB实验(例如推荐系统的性能测试)中的应用。

1. 基本概念

假设检验是一种统计方法,用来决定是否应该拒绝关于总体参数的某个声明。这个过程基于样本数据,并试图通过这些数据来推断总体的真实情况。它帮助我们评估一个假设是否合理,或者是否有足够的证据支持一个替代的假设。

在这里插入图片描述

1.1 原假设 (Null Hypothesis, H0)

定义: 原假设通常是关于“无效应”或“无差异”的声明,即我们想要测试的变化实际上对结果没有影响。在推荐系统的情境下,原假设可以是新算法与旧算法之间没有显著的性能差异。

示例: 在一个推荐系统的AB测试中,原假设可能是:“新推荐算法的点击率不高于当前使用的推荐算法。”

符号表示: H 0 : μ new = μ old H_0: \mu_{\text{new}} = \mu_{\text{old}} H0:μnew=μold,这里 μ new \mu_{\text{new}} μnew μ old \mu_{\text{old}} μold 分别代表新旧推荐算法下的平均点击率。

1.2 备择假设 (Alternative Hypothesis, Ha)

定义: 备择假设是对原假设的对立面,表示存在某种效应或差异。在推荐系统的情境下,备择假设可以是新算法确实提高了性能。

示例: 对应于上面的例子,备择假设可以是:“新推荐算法的点击率高于当前使用的推荐算法。”

符号表示: H a : μ new > μ old H_a: \mu_{\text{new}} > \mu_{\text{old}} Ha:μnew>μold 或者 H a : μ new ≠ μ old H_a: \mu_{\text{new}} \neq \mu_{\text{old}} Ha:μnew=μold(如果考虑双向检验)。前者称为单侧检验,后者称为双侧检验,取决于你关心的是改进还是任何方向上的变化。

2. 为什么需要这两个假设?

  • 科学怀疑主义: 我们从认为变化不会带来效果开始(即接受原假设),除非有足够强的数据证据迫使我们改变这一观点。
  • 逻辑对立: 两个假设必须相互排斥且完全覆盖所有可能性。这意味着如果一个假设被证明为假,则另一个必然为真。
  • 决策框架: 它们提供了一个明确的决策框架,指导我们在数据分析后做出结论:是保持现状(不拒绝H0),还是采取行动(拒绝H0,接受Ha)。

3. 如何使用这两个假设进行决策?

  1. 设定显著性水平α: 这是我们愿意接受的最高误报率(Type I Error的概率)。通常选择0.05或0.01。
  2. 收集数据并计算检验统计量: 根据样本数据,计算出能够衡量两组间差异大小的统计量(如z-score或t-score)。
  3. 确定临界值或p值: 查找对应于α水平的临界值,或者直接计算p值,它是观察到的数据(或更极端数据)在原假设为真的条件下发生的概率。
  4. 比较并作出决定: 如果p值小于α,我们就拒绝原假设;否则,我们不能拒绝原假设。
3.1 核心概念 – 显著性水平
显著性水平 (α) 是什么?

简单来说:显著性水平(通常用α表示)是你愿意接受的“误判”风险。它就像是一个“容忍度”,告诉你在多大程度上你可以接受错误地认为新事物比旧事物更好,而实际上并没有区别。

在这里插入图片描述

为什么需要设定这个“容忍度”?

当你测试一个新的推荐算法时,你希望知道它是否真的比旧算法好。但是,有时候即使新算法并不真正更好,由于随机因素的影响,数据可能会让你觉得它更好。为了避免这种情况,你需要设定一个“容忍度”,也就是显著性水平α。

设定α = 0.05意味着什么?

如果你设定了α = 0.05,这意味着你允许自己有5%的机会犯错——也就是说,有5%的可能性你会错误地认为新算法更好,而实际上它并没有改进。换句话说,如果你做了100次这样的测试,大约会有5次你可能会得出错误的结论。

如何使用α来做决定?

当你做完实验并收集了数据后,你会计算出一个叫做p值的东西。p值告诉你,如果新算法和旧算法其实没有区别,那么你观察到的数据有多不可能发生。

  • 如果p值小于或等于α(比如0.05),你就认为新算法确实更好,并且这种差异不是偶然发生的。
  • 如果p值大于α,你就认为没有足够的证据证明新算法更好,可能只是随机波动造成的。
举个🌰

假设你在做一个AB测试,看看新推荐算法是否提高了用户的点击率。你设定了α = 0.05,然后根据实验结果计算出p值为0.03。因为p值(0.03)小于α(0.05),所以你可以说:“我们有足够的证据表明新算法确实提高了点击率,而且这种提高不太可能是偶然的。”

相反,如果p值是0.07,那么你就不能说新算法更好,因为你缺乏足够强的证据来支持这一点。

总结

设定显著性水平α就像是给自己设定了一个“安全线”。它帮助你控制错误判断的风险,确保你在做决策时有足够的信心。通过选择合适的α值,你可以在发现真实改进和避免错误结论之间找到平衡。

3.2 核心概念 – p值
什么是p值?

p值(p-value) 是衡量样本数据与原假设一致程度的一个指标。它表示的是,在原假设为真的情况下,观察到当前数据或更极端数据的概率。换句话说,p值告诉我们如果原假设是真的,那么我们看到的数据有多“异常”。

  • 小的p值(如小于0.05)表明数据与原假设不一致的可能性较大,因此我们可能会拒绝原假设。
  • 大的p值(如大于0.05)则意味着数据与原假设一致的可能性较大,因此我们没有足够的证据拒绝原假设。
判别方法
  1. 设定显著性水平α:通常设定为0.05或0.01,这决定了我们愿意接受的最大误报率(Type I Error)。
  2. 计算检验统计量:根据你的数据和检验类型(如t检验、z检验等),计算相应的检验统计量。
  3. 查找p值
    • 使用统计表:对于简单的检验,如z检验或t检验,可以使用统计表来查找对应的p值。
    • 使用统计软件或编程语言:大多数现代统计软件包(如R, Python的SciPy库等)可以直接计算p值。
  4. 比较p值与α:如果p值小于或等于α,则拒绝原假设;否则,不能拒绝原假设。
计算过程

示例:单样本z检验
假设有一个样本数据,想要检验它的均值是否与已知总体均值有显著差异。我们将通过以下步骤计算p值:

数据准备

  • 样本数据 data = [ 52 , 53 , 54 , 55 , 56 ] \text{data} = [52, 53, 54, 55, 56] data=[52,53,54,55,56]
  • 已知的总体均值 μ = 50 \mu = 50 μ=50
  • 已知的总体标准差 σ = 5 \sigma = 5 σ=5

步骤 1:计算样本均值

x ˉ = ∑ data n = 52 + 53 + 54 + 55 + 56 5 = 54 \bar{x} = \frac{\sum \text{data}}{n} = \frac{52 + 53 + 54 + 55 + 56}{5} = 54 xˉ=ndata=552+53+54+55+56=54

步骤 2:计算z统计量

z = x ˉ − μ σ / n = 54 − 50 5 / 5 = 4 5 / 5 = 4 2.236 ≈ 1.79 z = \frac{\bar{x} - \mu}{\sigma / \sqrt{n}} = \frac{54 - 50}{5 / \sqrt{5}} = \frac{4}{5 / \sqrt{5}} = \frac{4}{2.236} \approx 1.79 z=σ/n xˉμ=5/5 5450=5/5 4=2.23641.79

步骤 3:查找p值

可以使用标准正态分布表或编程语言来查找p值。这里我们使用Python中的scipy.stats.norm.cdf()函数来计算双侧检验的p值。

from scipy import stats# 已知的z统计量
z_stat = 1.79# 双侧检验的p值
p_value = 2 * (1 - stats.norm.cdf(abs(z_stat)))print(f"z统计量: {z_stat}")
print(f"p值: {p_value}")

这段代码会输出:

z统计量: 1.79
p值: 0.0733

标准对照表类似下面:

在这里插入图片描述

步骤 4:解释

在这个例子中,p值约为0.0733。如果我们设定了显著性水平α = 0.05,那么p值大于α,所以我们不能拒绝原假设。这意味着根据当前数据,我们没有足够的证据证明样本均值与总体均值之间存在显著差异。

总结
  • p值 表示在原假设为真的情况下,观察到当前数据或更极端数据的概率。
  • 计算p值 涉及确定合适的统计检验、计算检验统计量、查找对应的p值,并将其与显著性水平α进行比较。
  • 解释p值 帮助我们决定是否拒绝原假设,从而得出关于数据是否有统计显著性的结论。

二、常见的假设检验类型

在这里插入图片描述

  1. t检验:用于比较两个独立样本的均值。
  2. z检验:当样本量足够大或总体标准差已知时使用。
  3. 卡方检验(χ²):用于分类变量之间的关系测试。
  4. ANOVA(方差分析):用于比较三个或更多组的均值。
  5. 非参数检验:如Mann-Whitney U检验、Kruskal-Wallis检验等,适用于非正态分布的数据。

三、Type I 和 Type II 错误

在这里插入图片描述

1. Type I Error (I型错误)

1.1 概念

Type I Error(I型错误),也称为误报(False Positive),是指在原假设实际上是正确的情况下,我们错误地拒绝了它。简单来说,就是“不该说有变化时却说了”。

1.2 判别方法
  • 显著性水平α:我们通过设定显著性水平α来控制犯Type I Error的概率。α通常设定为0.05或0.01,这意味着我们愿意接受最高5%或1%的误报率。
  • p值:计算出的p值小于或等于α时,我们会拒绝原假设。如果p值很小,说明数据与原假设不一致的可能性较大,我们可能会犯Type I Error。
1.3 注意事项
  • 降低α值:选择更低的α值(如从0.05降到0.01),可以减少犯Type I Error的风险,但同时也会使检测到真实效应变得更加困难。
  • 权衡风险:降低Type I Error的风险可能会增加Type II Error的风险,因此需要根据具体情况权衡两者之间的关系。
1.4 举个🌰

假设你去医院做了一项血液检测,用来检查是否患有某种罕见疾病。医生根据检测结果告诉你,你的测试呈阳性,意味着你可能患上了这种疾病。然而,实际上你并没有患病。这就是一个Type I Error的例子,发生了误报—错误人为检测结果阳性,而实际上并没有。在统计学中,Type I Error就像是这个误报。它发生在我们根据数据得出结论说新事物(比如新的推荐算法)确实带来了改进,但实际上它并没有带来任何真正的改进。

2. Type II Error (II型错误)

2.1 概念

Type II Error(II型错误),也称为漏报(False Negative),是指在原假设实际上是错误的情况下,我们错误地接受了它。简单来说,就是“该说有变化时却没有说”。

2.2 判别方法
  • 检验力(Power = 1 - β):检验力是避免犯Type II Error的能力。高检验力意味着测试更有可能检测到真实存在的效果,从而减少了β值。检验力取决于样本量、效应大小、显著性水平α以及数据变异性等因素。
  • p值:如果p值大于α,我们不能拒绝原假设。此时,可能存在Type II Error的风险,因为我们可能错过了真实的效应。
2.3 注意事项
  • 增加样本量:更多的数据可以提高检测到真实效应的能力,从而减少β值。
  • 增大效应大小:确保你测试的是一个足够大的效应,这样更容易被检测到。这可以通过预实验来估计。
  • 降低数据变异性:通过控制实验条件或选择更一致的数据源,可以减少数据的变异性,从而更容易检测到真实的效应。
2.4 举个🌰

继续用安检的例子来解释。假设有一个隐藏的违禁物品,但安检门却没有发出警报。这是一个漏报的例子——安检系统未能发现实际存在的问题。在统计学中,Type II Error就像是这个漏报。它发生在我们根据数据得出结论说新事物(比如新的推荐算法)没有带来改进,但实际上它确实有所改进。

3. 总结

  • Type I Error 是在不应该的时候认为有变化或差异(误报),其概率由α控制。
  • Type II Error 是在应该的时候没有发现变化或差异(漏报),其概率由β表示。
  • 两者之间存在权衡关系:降低一种错误的风险往往会增加另一种错误的风险。
  • 理解并管理这两种错误对于设计有效的实验和做出可靠的统计推断至关重要。

四、应用

假设检验不仅限于学术研究,它同样广泛应用于商业领域。例如,在一个典型的推荐系统AB测试中,你可能会将一部分用户随机分配给A组(使用旧算法),另一部分分配给B组(使用新算法)。然后,你可以测量每个组的点击率、转化率等关键指标。通过假设检验,你可以判断新算法是否带来了统计上显著的不同表现。

五、总结

假设检验是一项强大的统计工具,它使我们能够在不确定的世界中找到确定的答案。通过理解和应用假设检验,不仅可以提高数据分析的能力,还能为团队提供更有价值的见解。

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

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

相关文章

金融租赁系统助力行业转型与升级的创新之路

内容概要 在当今快速发展的商业环境中,金融租赁系统逐渐成为企业转型与升级的重要工具。它通过整合大数据与自动化技术,不仅提升了风险管理的准确性,还加快了审批流程,让企业在激烈的市场竞争中游刃有余。这个系统就像是一位聪明…

Postman接口测试02|接口用例设计

目录 六、接口用例设计 1、接口测试的测试点(测试维度) 1️⃣功能测试 2️⃣性能测试 3️⃣安全测试 2、设计方法与思路 3、单接口测试用例 4、业务场景测试用例 1️⃣分析测试点 2️⃣添加员工 3️⃣查询员工、修改员工 4️⃣删除员工、查询…

Python标准库之SQLite3

包含了连接数据库、处理数据、控制数据、自定义输出格式及处理异常的各种方法。 官方文档:sqlite3 --- SQLite 数据库的 DB-API 2.0 接口 — Python 3.13.1 文档 官方文档SQLite对应版本:3.13.1 SQLite主页:SQLite Home Page SQL语法教程&a…

HTML 迷宫游戏

HTML 迷宫游戏 相关资源文件已经打包成压缩文件,可双击index.html直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢&#xff0…

【Linux】上传、下载、压缩、解压

一、上传、下载 1.1 FinalShell文件系统 我们可以通过FinalShell工具,方便的和虚拟机进行数据交换。 在FinalShell软件的下方窗体中,提供了Linux的文件系统视图,可以方便的: 浏览文件系统,找到合适的文件&#xff0…

以柔资讯-D-Security终端文件保护系统 logFileName 任意文件读取漏洞复现

0x01 产品简介 D-Security终端文件保护系统是一套专注于企业文件管理效率与安全的解决方案,统对文件进行全文加密,而非仅在文件表头或特定部分进行加密,从而大大提高了文件的安全性,降低了被破解的风险。D-Security终端文件保护系统是被政府和国安局等情报单位唯一认定的安…

关于重构一点简单想法

关于重构一点简单想法 当前工作的组内,由于业务开启的时间正好处于集团php-》go技术栈全面迁移的时间点,组内语言技术栈存在:php、go两套。 因此需求开发过程中通常要考虑两套技术栈的逻辑,一些基础的逻辑也没有办法复用。 在这…

新的 WhoisXML API 白皮书重点分析了主要 gTLD 和 ccTLD 注册趋势

任何寻求建立在线存在的人似乎都可以选择无限多的互联网域名注册服务。然而,问题依然存在:哪些提供商更受注册者青睐?WhoisXML API 的研究团队通过分析主要 gTLD(通用顶级域)和 ccTLD(国家或地区顶级域&…

zabbix(二)

zabbix 1.zabbix监控的模式 主动和被动模式都是对于客户端而言 主动模式 客户端主动将数据发送给server或者是代理服务器 被动模式 服务端或者proxy(代理服务器)主动找客户端索要数据------------>默认方式 被动模式在成规模的集群(成百上千台的)&…

任务调度之Quartz(二):Quartz体系结构

1、Quartz 体系结构 由上一篇的Quartz基本使用可以发现,Quartz 主要包含一下几种角色: 1)Job:也可以认为是JobDtetail,表示具体的调度任务 2)Trigger:触发器,用于定义任务Job出发执行…

十五、Vue 响应接口

文章目录 一、响应式系统基础什么是响应式系统响应式数据的声明与使用二、响应式原理深入Object.defineProperty () 方法的应用(Vue2)Proxy 对象的应用(Vue3)三、响应式接口之 ref 和 reactive(Vue3)ref 函数的使用reactive 函数的使用四、计算属性(computed)作为响应式…

Nature Electronics——近传感器计算:50 nm异构集成技术的革命

创新点:1.高密度互联设计:基于二维材料,开发出互连密度高达62,500 I/O每平方毫米的M3D集成结构。2.异构层堆叠:整合了第二层石墨烯化学传感器和第一层MoS₂记忆晶体管,实现功能互补。3.超短传感器与计算元件距离&#…

Ubuntu 安装 Java 1.8

如果你希望使用 Oracle JDK 8,可以按照以下步骤操作: 下载 Oracle JDK 8: 访问 Oracle 官方网站 下载适用于 Ubuntu 的 JDK 8 版本 安装 Oracle JDK 8: 将下载的 JDK 8 压缩包解压到一个目录中,例如 /opt/module&…

字节青训入营考核十五题-Java-找单独的数

问题 问题描述 在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。 要求&#xff…

Unity学习之UGUI(三)

十二、Slider 1、作用 Slider是滑动条组件,是UGUI中用于处理滑动条相关交互的关键组件 创建Slider默认包括4个对象 父对象:Slider组件依附的对象 子对象:背景图,进度图,滑动块三组对象 2、主要参数 3、代码控制 voi…

win下搭建elk并集成springboot

一、ELK 是什么? ELK 实际上是三个工具的集合,Elasticsearch Logstash Kibana,这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。 ElasticSearch ElasticSearch 是一个基于 Lucen…

基于微信小程序疫苗预约系统ssm+论文源码调试讲解

第四章 系统设计 到目前为止,市面上已经存在了各种各样的软件系统,从系统的分类着手,主要应用范围倾向于办公系统,娱乐系统,社交系统,然后下面有很多比较细的分支系统。很多系统已经经过了市场的考验&…

MySQL慢查询问题排查

第一步:查看当前正在运行的事务状态 select trx_state,trx_started,trx_mysql_thread_id,trx_query from information_schema.innodb_trx; 其中: Trx_state:事务状态 Trx_started:事务启动时间 Trx_mysql_thread_id&…

c++领域展开第十幕——类和对象(内存管理——c/c++内存分布、c++内存管理方式、new/delete与malloc/free区别)超详细!!!!

文章目录 前言一、c/c内存分布二、c的内存管理方式2.1new/delete操作内置类型2.2new和delete操作自定义类型 三、operator new与operator delete函数3.1operator new与operator delete函数 四、new和delete的实现原理4.1 内置类型4.2 自定义类型 五、malloc/free和new/delete的…

MacBook_Xcode_Swift雨燕

Swift Swift Swift Swift是苹果公司开发的现代化编程语言, 专为Apple平台设计。其简洁语法、类型安全、Optionals处理、Playgrounds交互式环境、泛型编程、协议与扩展、闭包功能、枚举与关联值、结构体与类的高效内存管理、异步编程的async/await语法、Swift Packa…