哈喽各位小伙伴!我是您们的统计学+ Python 零露老师~
恭喜您!坚持到了Day16,前面咱们学了描述统计、分布、假设检验、相关性分析,今天咱们就来一场终极实战,把前面学的所有知识串起来,搞定互联网、电商、运营里最常用的数据分析方法——AB 测试!
全程大白话,从原理到全流程Python 代码,小白看完就能直接套用到您的工作里,把统计学真正用起来!
一、大白话讲透:什么是AB 测试?
一句话定义:AB 测试就是把用户随机分成两组,一组用旧方案(A 组),一组用新方案(B 组),对比两组的效果,判断新方案是不是真的比旧方案好。
这其实就是咱们Day10 学的独立样本假设检验的真实业务应用!
举个最经典的例子,一秒懂:您是电商运营,觉得现在的「立即购买」按钮是灰色的,点击率太低,想换成红色。但您不敢直接全量换,万一红色点击率更低就亏大了。这时候就做AB 测试:
(1)把10000 个用户随机分成两组,每组 5000 人
(2)A 组(对照组):继续看灰色按钮
(3)B 组(实验组):看红色按钮
(4)一周后,对比两组的点击率,用假设检验判断红色按钮是不是真的能提升点击率
这就是AB 测试,核心逻辑就是「先小范围实验,用统计学判断效果,再决定要不要全量推广」,完全避免拍脑袋决策!
二、小白必记的AB 测试全流程 5 步走
不用记复杂的方法论,记住这5 步,日常 99% 的 AB 测试都能搞定:
(1)确定目标:明确您要测什么,比如「提升按钮点击率」「提升活动转化率」;
(2)设计实验:确定A/B 两组的方案、样本量、实验时长;
(3)收集数据:按实验方案上线,收集两组的业务数据;
(4)分析数据:用假设检验判断两组差异是不是真的显著;
(5)得出结论:决定是全量推广新方案,还是继续用旧方案,或者再优化。
三、Python 全流程实战!电商按钮颜色 AB 测试
咱们用一个最真实的电商场景:测试「红色按钮」vs「灰色按钮」的点击率,手把手带您走完全流程!
第一步:先导入工具库(必须先运行!)
pythonimport pandas as pdimport numpy as npfrom scipy import statsimport matplotlib.pyplot as plt# 解决中文显示问题plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei"]plt.rcParams["axes.unicode_minus"] = False |
第二步:模拟/ 准备实验数据
假设我们做了一周的实验,收集到了以下数据:
(1)A 组(灰色按钮):5000 人访问,420 人点击
(2)B 组(红色按钮):5000 人访问,510 人点击
我们把数据整理成Python 能处理的格式:
python# 1. 准备数据:两组的点击人数、总访问人数# A组:对照组(灰色按钮)a_click = 420 # A组点击人数a_total = 5000 # A组总访问人数# B组:实验组(红色按钮)b_click = 510 # B组点击人数b_total = 5000 # B组总访问人数# 2. 计算两组的样本点击率a_rate = a_click / a_totalb_rate = b_click / b_totalprint(f"✅ A组(灰色按钮)点击率:{a_rate:.2%}")print(f"✅ B组(红色按钮)点击率:{b_rate:.2%}")print(f"✅ B组比A组点击率提升:{(b_rate - a_rate)/a_rate:.2%}") |
运行后您会看到,B 组点击率比 A 组高了 21.43%,看起来效果很好!但这时候还不能下结论,因为可能是随机抽样的运气误差,必须做假设检验!
第三步:假设检验,判断差异是不是真的显著
这就是咱们Day12 学的两总体比例检验,直接套用就行!
python# 1. 两总体比例检验(双侧检验,先看有没有差异)z_stat, p_value = stats.proportions_ztest(count=[a_click, b_click], nobs=[a_total, b_total], alternative='two-sided')# 2. 结果解读print(f"\n✅ 假设检验p值:{p_value:.6f}")if p_value < 0.05:print("�� 核心结论:p<0.05,两组点击率有显著差异!")# 再做一次单侧检验,看B组是不是显著高于A组z_stat_greater, p_value_greater = stats.proportions_ztest(count=[a_click, b_click], nobs=[a_total, b_total], alternative='smaller' # 检验A组比例是否小于B组)if p_value_greater < 0.05:print("�� 进一步结论:B组(红色按钮)点击率显著高于A组(灰色按钮),建议全量推广红色按钮!")else:print("�� 核心结论:p≥0.05,两组点击率差异不显著,只是随机误差,建议继续用灰色按钮,或优化新方案后再测试") |
第四步:可视化结果,直观展示
画个柱状图,把两组的点击率对比展示出来,汇报给老板看超直观!
python# 画两组点击率对比图plt.figure(figsize=(6, 5))groups = ['A组(灰色按钮)', 'B组(红色按钮)']rates = [a_rate, b_rate]plt.bar(groups, rates, color=['gray', 'red'], width=0.5)plt.title('AB测试:两组按钮点击率对比', fontsize=14)plt.ylabel('点击率', fontsize=12)plt.ylim(0, max(rates)*1.2) # 调整y轴范围,让对比更明显# 在柱子上标注具体数值for i, v in enumerate(rates):plt.text(i, v+0.002, f"{v:.2%}", ha='center', fontsize=12)plt.show() |
四、小白必记的AB 测试 3 个避坑指南
这是新手最容易踩的坑,记住这3 点,您的AB 测试才靠谱:
(1)样本量一定要够:样本量太小,结果完全不可靠,比如每组只有100 人,很容易出现随机误差;
(2)实验期间不要改方案:实验一旦上线,A/B 两组的方案就不能再改了,否则数据就乱了;
(3)实验时长要覆盖完整周期:比如电商要覆盖工作日和周末,只测一天的结果不可靠。
一张表总结:AB 测试和假设检验的对应关系
小白直接收藏,原来AB 测试就是咱们学过的假设检验!
AB 测试场景 | 对应假设检验方法 | Python 函数 |
对比两组点击率/ 转化率(比例数据) | 两总体比例检验 | stats.proportions_ztest |
对比两组客单价/ 停留时长(均值数据) | 独立样本t 检验 | stats.ttest_ind |
对比三组及以上方案 | 单因素方差分析 | stats.f_oneway |
第十六天学习总结
恭喜您!完成了终极实战AB 测试,把前面学的所有知识都串起来了,核心就 3 点:
(1)AB 测试就是假设检验的真实业务应用,核心是「先小范围实验,用数据说话,避免拍脑袋」;
(2)全流程5 步走:确定目标→设计实验→收集数据→分析数据→得出结论;
(3)分析数据就是用咱们学过的假设检验,p<0.05 就是差异显著,代码直接套用就行。清华大学数学科学系-东门