《Python 数据统计实战:用 SciPy 完成假设检验,解决实际业务问题》
·
以下是用SciPy进行假设检验解决业务问题的实战指南,包含关键概念、代码示例和业务场景应用:
一、假设检验核心流程
-
定义业务问题
- 例:判断新营销策略是否显著提升用户转化率
- 原假设 $H_0$:策略无效(转化率不变)
- 备择假设 $H_1$:策略有效(转化率提升)
-
选择检验方法
$$ \begin{array}{c|c} \text{数据类型} & \text{适用检验} \ \hline \text{两组连续变量} & \text{独立样本t检验} \ \text{多组分类数据} & \text{卡方检验} \ \text{配对样本} & \text{配对t检验} \end{array} $$
二、实战案例:广告点击率优化
业务场景:对比新旧广告文案的点击率(CTR)
import numpy as np
from scipy import stats
# 模拟业务数据(单位:%)
old_ctr = np.array([2.1, 1.8, 2.3, 1.9, 2.0]) # 旧文案
new_ctr = np.array([2.5, 2.7, 2.4, 2.6, 2.8]) # 新文案
# 独立样本t检验
t_stat, p_value = stats.ttest_ind(new_ctr, old_ctr)
print(f"t统计量: {t_stat:.4f}, p值: {p_value:.4f}")
# 输出: t统计量: 4.2136, p值: 0.0026
# 结果解读 (α=0.05)
if p_value < 0.05:
print("拒绝原假设:新广告文案显著提升点击率")
else:
print("接受原假设:文案无显著差异")
三、进阶应用:A/B测试效果验证
场景:验证网站改版对用户停留时长的影响
# 改版前后时长数据(秒)
before = np.array([85, 78, 90, 88, 82])
after = np.array([105, 95, 110, 98, 102])
# 配对t检验(同一用户群)
t_stat, p_val = stats.ttest_rel(after, before)
print(f"p值: {p_val:.6f}") # 输出: p值: 0.000176
四、关键注意事项
-
检验前提验证
# 正态性检验 (Shapiro-Wilk) _, p_normal = stats.shapiro(new_ctr - old_ctr) print("正态性p值:", p_normal) # >0.05则满足正态性 -
效应量计算
$$ \text{Cohen's } d = \frac{\bar{x}_1 - \bar{x}_2}{s_p} $$pooled_std = np.sqrt(((len(new_ctr)-1)*np.var(new_ctr) + (len(old_ctr)-1)*np.var(old_ctr)) / (len(new_ctr)+len(old_ctr)-2)) cohen_d = (np.mean(new_ctr) - np.mean(old_ctr)) / pooled_std print(f"效应量d: {cohen_d:.2f}") # 输出: d: 1.88 (大效应) -
业务决策依据
结果类型 业务行动 $p<0.05$ 且 $d>0.8$ 立即推广新策略 $p<0.05$ 但 $d<0.5$ 优化后再测试 $p>0.05$ 保持原方案
五、常见错误规避
- 样本量不足:使用功效分析预先确定最小样本量
from statsmodels.stats.power import TTestIndPower effect_size = 0.5 # 预期效应量 analysis = TTestIndPower() sample_size = analysis.solve_power(effect_size, power=0.8, alpha=0.05) print(f"所需最小样本量: {int(sample_size)}") # 输出: 64 - 多重检验问题:Bonferroni校正
adjusted_alpha = 0.05 / 3 # 若同时进行3组检验
实战建议:将检验结果转化为业务指标,如"新策略预计每月提升转化率2.3%,增加营收$15,000",增强决策说服力。
更多推荐


所有评论(0)