用 Python 做 A/B 测试分析实战:让数据告诉你哪个方案更好
一、前言
在产品运营中,我们常常面临这样的选择:
-
哪个按钮颜色更容易让用户点击?
-
哪种定价策略能带来更高转化率?
-
哪个广告文案更吸引人?
这些问题的答案,都可以通过 A/B 测试(AB Testing) 来找到。
A/B测试是一种数据驱动决策方法,通过让用户随机分组,分别体验不同方案(A组 vs B组),并比较两组的转化率或其他指标差异,来判断哪个方案更优。
二、实验背景
假设我们正在优化一个网站的注册页:
-
A组:旧版本页面
-
B组:新版本页面(按钮颜色优化 + 提交表单简化)
我们收集了部分测试数据,包含:
| user_id | group | converted |
|---|---|---|
| 1001 | A | 1 |
| 1002 | B | 0 |
| 1003 | A | 1 |
| ... | ... | ... |
其中:
-
group表示用户所在实验组(A/B) -
converted表示是否完成注册(1=成功,0=未注册)
三、数据加载与预览
import pandas as pd # 读取数据 df = pd.read_csv('ab_test_data.csv') # 查看基本情况 print(df.head()) print(df['group'].value_counts())
四、计算转化率
conversion_rate = df.groupby('group')['converted'].mean() print(conversion_rate)
输出示例:
group A 0.105 B 0.126
结果显示:
-
A组转化率为 10.5%
-
B组转化率为 12.6%
新版本表面上更好,但这是否具有统计学意义?
五、显著性检验(统计分析)
我们可以使用 独立样本比例检验(Z-test for proportions) 来判断差异是否显著。
import statsmodels.api as sm # A/B组数据 convert_A = df[df['group'] == 'A']['converted'] convert_B = df[df['group'] == 'B']['converted'] # 样本量与成功数 n_A, n_B = len(convert_A), len(convert_B) success_A, success_B = convert_A.sum(), convert_B.sum() # 比例检验 count = [success_A, success_B] nobs = [n_A, n_B] zstat, pval = sm.stats.proportions_ztest(count, nobs) print(f"Z统计量: {zstat:.3f}, P值: {pval:.4f}")
输出结果示例:
Z统计量: 2.372, P值: 0.0177
当 P值 < 0.05 时,表示差异具有统计显著性。
✅ 结论:新版页面(B组)显著提高了注册转化率。
六、可视化对比结果
import matplotlib.pyplot as plt plt.bar(['A组(旧版)', 'B组(新版)'], conversion_rate.values, color=['gray', 'skyblue']) plt.title('A/B Test Conversion Rate Comparison') plt.ylabel('Conversion Rate') plt.ylim(0, max(conversion_rate.values) + 0.02) for i, v in enumerate(conversion_rate.values): plt.text(i, v + 0.005, f"{v:.2%}", ha='center') plt.show()
📊 图表清晰展示了新版页面带来的转化率提升,为业务决策提供了有力的数据支撑。
七、延伸分析
为了更深入了解效果,可以进一步分析:
-
不同渠道的A/B表现(自然流量 vs 广告流量);
-
用户设备差异(PC端与移动端的转化对比);
-
分时间段分析(测试期间是否存在时间效应)。
例如:
df.groupby(['group', 'device'])['converted'].mean().unstack()
可以直接对比不同设备下A/B组转化效果。
八、结论与启示
本次A/B测试结果显示:
-
新版页面(B组)在样本量足够的情况下,显著提升了用户注册转化率;
-
通过统计显著性检验,我们避免了“凭感觉”决策;
-
若在后续复测中保持同样趋势,可以逐步推广新版设计。
💡 A/B测试的核心思维是:用科学方法验证直觉。
这是一种把“猜测”变成“数据驱动”的思考方式。
更多推荐


所有评论(0)