【数据分析】02- A/B 测试:玩转假设检验、t 检验与卡方检验
一、背景:当“审判”成为科学
1.1 虚拟场景——法庭审判
想象这样一个场景:有一天,你在王国里担任“首席审判官”。你面前站着一位嫌疑人,有人指控他说“偷了国王珍贵的金冠”。但究竟是他干的,还是他是被冤枉的?你需要做出审判。
• 如果你只是听到“民众都说他很可疑”,就随便判有罪,也许冤枉了一个无辜的人;
• 如果你因为证据不够充分,放任他走了,而真凶恰好就是他?那可怎么办?
这时候,作为审判官,你要收集证据(证人证言、现场线索),并进行理性分析。你不会轻易下结论,而是先假设他无罪(原假设),然后看证据有多强。若证据足够强大,说明在“嫌疑人无罪”的情况下,这么极端的指纹、目击等线索出现简直是“小概率事件”,于是你认定他“极可能有罪”,就推翻了无罪假设。
这便是“假设检验”的核心思想:我们总是先假设“没有差异”“没有效应”(就像嫌疑人无罪),然后让数据“自己说话”,看要不要推翻这个假设。
1.2 假设检验的现代发展
• 过去:统计学家费雪(Fisher)等人在 20 世纪初确立了这套“原假设 vs. 备择假设 + p 值 + 显著性水平”的理论框架。
• 现在:在大数据时代,我们依然需要这种方法来对数据做严谨推断,比如互联网产品的A/B 测试、医药领域的疗效分析、金融风控决策等等。
• 原因:不论数据多庞大,随机性和噪声总在,所以我们要有一把“判定差异是否超越随机”的尺子,这就是假设检验。
二、假设检验:原理、角色与流程
2.1 原假设、备择假设
1. 原假设(Null Hypothesis)
默认都是原假设,即罪人没有罪,需要p值低于阈值的时候我们才会推翻(拒绝)我们的原假设
• 嫌疑人无罪;
• 两个方案无差异;
• 新药无显著疗效……
一般总是表示“没有改变、没有差异、没有效果”。
2. 备择假设(Alternative Hypothesis )
• 嫌疑人有罪;
• 两个方案的确有差异;
• 新药确实起了作用……
2.2 p 值:出现极端证据的概率
• p 值(p-value)是指:在原假设为真的前提下,获得我们这么极端(或更极端)观测结果的概率。
• 如果 p 值很小,比如 < 0.05(这就是显著性水平 的常用阈值 0.05),就意味着:
• “在没有差异的情况下,居然还能看到这么极端的数据,太小概率了吧?!”
• 所以我们倾向于说,“估计是原假设不对”,即拒绝原假设。
就是他是好人的情况下,出现这些不利(极端)证据,概率也太小了吧,所以我们认为他是坏人
2.3 Type I 与 Type II 错误
• Type I 错误:错把一个无罪的人判了死刑(原假设其实对,但被我们拒绝)
• Type II 错误:把真正的罪犯当好人放了(原假设其实不对,但我们没拒绝)
• 做实验或统计分析时,我们也要小心平衡:(Type I 错误率)和 (Type II 错误率),别因极度谨慎而漏掉真差异,也别因过度敏感而冤枉“无差异”的情况。
三、A/B 测试:让你的产品决策更像“法庭审判”
3.1 你在做的,正是“统计审判”!
互联网里,每当你想更换按钮颜色、重新设计界面布局,或者改进推荐算法时,却不确定是不是更好——就能用A/B 测试来模拟“法庭审判”流程:
1. 原假设:新方案和老方案在关键指标(点击率、转化率等)上“无差异”;
2. 备择假设:新方案有更好的表现;
3. 随机分配:把用户随机分成两组,一部分看 A,另一部分看 B;
4. 观察结果:收集一段时间数据,看 B 组指标是否明显高于 A 组;
5. 检验:若差异明显到“原假设难以成立”,就说明新方案的确优于旧方案,推翻原假设。
3.2 常见陷阱
• 样本量过小:就好比证据太少,判案没把握;
• 多重测试:一次试验比较很多方案,就像同时审好几个案子,可能在某个案件里意外得到“极端证据”;
• 外部干扰:如果不是随机分组、A/B 组用户画像差别太大,就像找了一群偏见法官,对审判结果会有偏颇。
四、t 检验:如何量化“均值上的差异”?
4.1 t 检验的来龙去脉
• 场景:我想知道“两个组的平均值”到底差多少,比如“男性与女性的平均身高差异”,或者“A 组人群的日均观看时长 vs. B 组人群的日均观看时长”。
• 原理:

• 分子是“两个平均值之间的差”,分母是“这俩差值可能出现的标准误(综合了方差和样本量)”。
• 若这个 t 值很大,表明相对随机波动而言,均值差距太明显,p 值就会小。
4.2 适合场合
1. 数据近似正态分布,或者样本量足够大(中心极限定理可以帮忙);
2. 数值型指标,且你关心“平均值”本身的差异;
3. 如果两组是独立样本,就用“独立样本 t 检验”;若是一组人自己前后对比,则用“配对 t 检验”。
4.3 t 检验代码
案例分析:
案例1:独立样本t检验
问题描述:比较男性和女性的平均身高是否存在显著差异。
import numpy as np
from scipy import stats# 生成模拟数据
np.random.seed(0)
male_heights = np.random.normal(175, 7, 100) # 男性身高(cm)
female_heights = np.random.normal(165, 6, 100) # 女性身高(cm)# 进行独立样本t检验
t_stat, p_value = stats.ttest_ind(male_heights, female_heights)print(f't统计量: {t_stat:.2f}')
print(f'p值: {p_value:.4f}')# 结果解读
alpha = 0.05
if p_value < alpha:print("拒绝原假设,认为男性和女性的平均身高存在显著差异。")
else:print("无法拒绝原假设,认为男性和女性的平均身高无显著差异。")
输出:

案例2:独立样本t检验
问题描述: 在A/B测试中,评估新版本(B)是否显著提升了转化率。
import numpy as np
from scipy import stats# 生成模拟数据
np.random.seed(0)
control = np.random.binomial(1, 0.10, 1000) # 控制组转化率10%
treatment = np.random.binomial(1, 0.12, 1000) # 试验组转化率12%# 计算转化率
control_rate = np.mean(control)
treatment_rate = np.mean(treatment)print(f'控制组转化率: {control_rate:.2%}')
print(f'试验组转化率: {treatment_rate:.2%}')# 进行独立样本t检验
t_stat, p_value = stats.ttest_ind(treatment, control)print(f't统计量: {t_stat:.2f}')
print(f'p值: {p_value:.4f}')# 结果解读
alpha = 0.05
if p_value < alpha:print("拒绝原假设,认为新版本显著提升了转化率。")
else:print("无法拒绝原假设,认为新版本未显著提升转化率。")
输出:

案例3:药物疗效的配对样本t检验
问题描述: 评估某药物在治疗前后患者的血压变化,判断药物是否有效。
import numpy as np
from scipy import stats# 生成模拟数据
np.random.seed(0)
pre_treatment_bp = np.random.normal(150, 10, 30) # 治疗前血压
post_treatment_bp = pre_treatment_bp - np.random.normal(10, 5, 30) # 治疗后血压# 进行配对样本t检验
t_stat, p_value = stats.ttest_rel(post_treatment_bp, pre_treatment_bp)print(f't统计量: {t_stat:.2f}')
print(f'p值: {p_value:.4f}')# 结果解读
alpha = 0.05
if p_value < alpha:print("拒绝原假设,认为药物显著降低了血压。")
else:print("无法拒绝原假设,认为药物未显著降低血压。")
输出:
五、卡方检验:处理“分类变量”就靠它
5.1 当你的证据是“频数”而非“均值”
• 如果你拿到的是“买 or 不买”这样的分类标签,或者“一共投票给 A/B/C 的人数分别是多少”,就不能简单地比较平均值。
• 这时要用卡方检验(Chi-Square),因为它专门对“观察到的频数”和“期望的频数”做比较。
5.2 原理简述

5.3 卡方检验代码
import numpy as np
from scipy.stats import chi2_contingency# 构建列联表
# 行:性别(男、女),列:购买(是、否)
data = np.array([[30, 10],[20, 20]])# 进行卡方检验
chi2, p, dof, expected = chi2_contingency(data)print(f'卡方统计量: {chi2:.2f}')
print(f'p值: {p:.4f}')
print('期望频数:')
print(expected)# 结果解读
alpha = 0.05
if p < alpha:print("拒绝原假设,认为性别与购买决策存在关联。")
else:print("无法拒绝原假设,认为性别与购买决策无关联。")
输出:

六、再回到法庭:如何让判决更高效?
1. 注意样本量:别审太少证据就想定罪,也别没完没了地搜证耽误时间。
2. 明确检验方法:是要比较数值平均?还是比较分类频数?选对 t 检验 or 卡方检验。
3. 控制误差率: 设多少?怎么平衡漏判与冤判?
4. 多重比较调整:若你要审好几件案子(或 A/B 测试好多种版本),要做相应方法调整,避免“捡到极端结果就说差异大”。
七、总结:只要有决策,就可能需要假设检验
从审判一个嫌疑人是否有罪,到互联网 A/B 测试中判断“新老方案孰优孰劣”,再到科研里探讨“实验组与对照组”效果差异,我们都能看到假设检验的身影。它让我们在随机干扰中保持理性,用t 检验检查数值均值,用卡方检验衡量分类差异,用A/B 测试来做商业产品优化。
文章小结:
1. 假设检验:就像法庭审案,“无罪”假设先行,数据若够极端就能推翻;
2. A/B 测试:互联网“快速试验”神器;
3. t 检验:比较“两组均值”时最常用;
4. 卡方检验:用来判断分类/频数的差异或关联度。
希望通过这个“法庭审判”比喻,让你更好理解为何需要假设检验,以及如何把它用在各种实际场景上。本文若能带给你启发或快乐,请不吝在 一键三连(点赞、收藏、关注)并评论分享哦!让更多人知道,“统计思维”才是我们在复杂世界里做出理性决策的秘密武器。
参考阅读
• Fisher, R. A. (1925). Statistical Methods for Research Workers.
• Montgomery, D. C. (2017). Design and Analysis of Experiments.
• Pearson, K. (1900). On the criterion… (The seminal paper on Chi-Square test).
—— 全文完 ——
感谢阅读,期待你的点赞 + 关注 + 评论 + 收藏 + 转发,我们下期见!
相关文章:
【数据分析】02- A/B 测试:玩转假设检验、t 检验与卡方检验
一、背景:当“审判”成为科学 1.1 虚拟场景——法庭审判 想象这样一个场景:有一天,你在王国里担任“首席审判官”。你面前站着一位嫌疑人,有人指控他说“偷了国王珍贵的金冠”。但究竟是他干的,还是他是被冤枉的&…...
Windows下的C++内存泄漏检测工具Visual Leak Detector (VLD)介绍及使用
在软件开发过程中,内存管理是一个至关重要的环节。内存泄漏不仅会导致程序占用越来越多的内存资源,还可能引发系统性能下降甚至程序崩溃。对于Linux平台来说,内存检测工具非常丰富,GCC自带的AddressSanitizer (asan) 就是一个功能…...
[苍穹外卖] 1-项目介绍及环境搭建
项目介绍 定位:专门为餐饮企业(餐厅、饭店)定制的一款软件产品 功能架构: 管理端 - 外卖商家使用 用户端 - 点餐用户使用 技术栈: 开发环境的搭建 整体结构: 前端环境 前端工程基于 nginx 运行 - Ngi…...
人物一致性训练测评数据集
1.Pulid 训练:由1.5M张从互联网收集的高质量人类图像组成,图像标题由blip2自动生成。 测试:从互联网上收集了一个多样化的肖像测试集,该数据集涵盖了多种肤色、年龄和性别,共计120张图像,我们称之为DivID-120,作为补充资源,还使用了最近开源的测试集Unsplash-50,包含…...
AI的出现,是否能替代IT从业者?
AI的出现,是否能替代IT从业者? AI在IT领域中的应用已成趋势,IT 从业者们站在这风暴之眼,面临着一个尖锐问题:AI 是否会成为 “职业终结者”?有人担忧 AI 将取代 IT 行业的大部分工作,也有人坚信…...
乘联会:1月汽车零售预计175万辆 环比暴跌33.6%
快科技1月18日消息,据乘联会的初步推算,2025年1月狭义乘用车零售总市场规模预计将达到约175万辆左右。与去年同期相比,这一数据呈现了-14.6%的同比下降态势;而相较于上个月,则出现了-33.6%的环比暴跌情况。 为了更清晰…...
LLM - 大模型 ScallingLaws 的 CLM 和 MLM 中不同系数(PLM) 教程(2)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145188660 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scalin…...
开发神器之cursor
文章目录 cursor简介主要特点 下载cursor页面的简单介绍切换大模型指定ai学习的文件指定特定的代码喂给ai创建项目框架文件 cursor简介 Cursor 是一款专为开发者设计的智能代码编辑器,集成了先进的 AI 技术,旨在提升编程效率。以下是其主要特点和功能&a…...
使用 Ansys Motor-CAD 的自适应模板加速创新
应对现代电机设计挑战 电机设计不断发展,Ansys 正在通过创新解决方案引领潮流,不断突破可能的界限。随着电动汽车、工业自动化和可再生能源系统的快速增长,对优化电机的需求从未如此之高。工程师面临着越来越大的压力,他们需要开发…...
RabbitMQ前置概念
文章目录 1.AMQP协议是什么?2.rabbitmq端口介绍3.消息队列的作用和使用场景4.rabbitmq工作原理5.整体架构核心概念6.使用7.消费者消息推送限制(work模型)8.fanout交换机9.Direct交换机10.Topic交换机(推荐)11.声明队列…...
http转化为https生成自签名证书
背景 项目开发阶段前后交互采用http协议,演示环境采用htttps协议 ,此处为个人demo案例 组件 后端:springBoot 前端:vue web 服务:tomcat 部署环境:linux 生成自签名证书 创建目录 存储证书位置 # mkdir -p…...
《贪心算法:原理剖析与典型例题精解》
必刷的贪心算法典型例题! 算法竞赛(蓝桥杯)贪心算法1——数塔问题-CSDN博客 算法竞赛(蓝桥杯)贪心算法2——需要安排几位师傅加工零件-CSDN博客 算法(蓝桥杯)贪心算法3——二维数组排序与贪心算…...
【网络协议】【http】【https】RSA+AES-TLS1.2
【网络协议】【http】【https】RSAAES-TLS1.2 https并不是一个协议 而是在传输层之间添加了SSL/TLS协议 TLS 协议用于应用层协议(如 HTTP)和传输层(如 TCP)之间,增加了一层安全性来解决 HTTP 存在的问题,H…...
【数据库】MySQL数据库之约束与多表查询
约束 1.概述 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据目的:保证数据库中数据的正确性、有效性,完整性和一致性分类: 注意:约束是作用于表中字段上的,可以在创建表/修改表…...
【Pandas】pandas Series dot
Pandas2.2 Series Binary operator functions 方法描述Series.add()用于对两个 Series 进行逐元素加法运算Series.sub()用于对两个 Series 进行逐元素减法运算Series.mul()用于对两个 Series 进行逐元素乘法运算Series.div()用于对两个 Series 进行逐元素除法运算Series.true…...
02UML图(D2_行为图)
目录 学习前言 ---------------------------------- 讲解一:活动图 ---------------------------------- 讲解二:用例图 ---------------------------------- 讲解三:状态机图 ---------------------------------- 讲解四:…...
Kali环境变量技巧(The Environment Variable Technique Used by Kali
Kali环境变量技巧 朋友们好,我们今天继续更新《黑客视角下的Kali Linux的基础与网络管理》中的管理用户环境变量。为了充分利用我们的黑客操作系统Kali Linux,我们需要理解和善于使用环境变量,这样会使我们的工具更具便利,甚至具…...
【C++】如何从源代码编译红色警戒2地图编辑器
【C】如何从源代码编译红色警戒2地图编辑器 操作视频视频中的代码不需要下载三方库,已经包含三方库。 一、运行效果:二、源代码来源及编程语言:三、环境搭建:安装红警2安装VS2022下载代码,源代码其实不太多,…...
安路FPGA开发工具TD:问题解决办法 及 Tips 总结
安路科技(Anlogic)是一家专注于高性能、低功耗可编程逻辑器件(FPGA)设计和生产的公司。其提供的开发工具TD(TangDynasty)是专门为安路FPGA系列产品设计的集成开发环境(IDE)。以下是对…...
【Django开发】django美多商城项目完整开发4.0第12篇:商品部分,表结构【附代码文档】
本教程的知识点为: 项目准备 项目准备 配置 1. 修改settings/dev.py 文件中的路径信息 2. INSTALLED_APPS 3. 数据库 用户部分 图片 1. 后端接口设计: 视图原型 2. 具体视图实现 用户部分 使用Celery完成发送 判断帐号是否存在 1. 判断用户名是否存在 后…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网(IIoT)场景中,结合 DDS(Data Distribution Service) 和 Rx(Reactive Extensions) 技术,实现 …...
