在互联网大厂做产品改进时,上线了一个新的按钮颜色(A/B 测试)。新按钮的点击转化率从 5.0% 提升到了 5.2%。请问:这 0.2% 的提升究竟是新按钮真的更好,还是仅仅因为运气好抽样产生的随机波动?
答案要靠假设检验与 A/B 测试。这一章我们将理清 $p$ 值的数学物理本质,手算 $z$-统计量,避免多重比较陷阱,并手写一份工业级 A/B 测试评估分析报告。
把假设检验比作法庭审判:
点击放大查看图:双侧假设检验拒绝域与 p 值拒绝域示意图在后续【阶段 1 机器学习】产品迭代中,我们将使用假设检验来对比新旧模型算法的离线与在线表现(A/B 测试)。在数学阶段,我们重点掌握原假设 、 值与显著性水平 的定义!
点击放大查看图:第一类错误、第二类错误与检验功效 Power 双正态重叠曲线示意图
| 真实情况 \ 检验决策 | 接受 (认为无差异) | 拒绝 (认为有差异) |
|---|---|---|
| 实际上成立 | ✅ 决策正确 () | ❌ 第一类错误 Type I () (假阳性) |
| 实际上不成立 | ❌ 第二类错误 Type II () (假阴性) | ✅ 检验功效 Power () |
常用的显著性水平 。检验功效 Power () 表示当新方案确实有效时,我们能够成功检测出来的概率(工业界要求 Power )。
值是指:在原假设 成立的假设下,观察到当前数据或比当前数据更加极端情况的概率!
在大数据时代(如 ),哪怕微乎其微的 0.0001 提升也能算出来 。但这个提升在商业上可能毫无价值! 因此必须查看效应量 Cohen's d(标准化均值差):
如果同时测试 20 个不同的按钮颜色,即使所有颜色都毫无效果,按照 ,也几乎100% 概率会有一个颜色犯第一类错误误报为“显著有效”! 解决方法:使用 Bonferroni 修正,将显著性水平调整为 。
假设某电商网站进行 A/B 测试:
下面的代码模拟 A/B 测试,手写计算转化率提升、经验 95% 置信区间与 值,并与 scipy.stats.ttest_ind 结果核对:
| 现象 | 先问什么 | 处理方式 |
|---|---|---|
| 把 p 值误解为“新方案正确的概率” | 是否理解了假设前提 | p 值是在假定 (新方案无差异)成立的前提下观察到当前数据的概率,绝非方案正确的概率 |
| 在 A/B 测试中每天偷看数据直到 | 是否进行了动态早停 | 偷看数据(Peeking)会极大地飙升第一类错误率,必须在实验前根据样本量计算提前固定样本量 |
| 仅看 而忽略实际商业效应量 | 提升幅度是否有商业意义 | 大数据下微小的差异也会显著,必须结合 Cohen's d 与置信区间判断商业落地价值 |
ci_95 的左右边界都不跨过 0?🎉 恭喜你成功完成概率与统计(第 11-15 周)的全部课程!
你已经完整掌握了随机变量、贝叶斯定理、常见分布矩特征、大数定律、CLT、Bootstrap、MLE/MAP 损失推导与 A/B 测试假设检验。请准备迈入 Python 综合大作业 12. 综合实战:鸢尾花分类小项目!
scipy.stats 假设检验 API 指南。