1. 项目概述:从“拍脑袋”到“有依据”的决策革命
在数据分析、产品迭代、医学研究乃至日常运营中,我们总会遇到这样的场景:新上线的功能真的提升了用户留存吗?A/B测试中,实验组的转化率比对照组高2%,这到底是偶然波动还是确有效果?一种新药的治疗效果是否显著优于安慰剂?十年前,很多决策可能依赖“感觉”或“经验”,但今天,一个成熟的数据驱动团队绝不会这么干。这背后,就是假设检验这套方法论在发挥作用。它不是什么高深莫测的数学魔术,而是一套严谨的“找茬”流程,帮助我们用量化的证据去判断一个观察到的“差异”是否真实可信,而不是随机噪声。
简单来说,假设检验就像一场法庭辩论。我们首先设立一个“无罪推定”,称之为原假设(H0),通常代表“没有效果”、“没有差异”或“现状”。例如,“新功能对留存率无影响”。同时,我们提出一个想要证明的备择假设(H1),代表“有效果”、“有差异”。然后,我们收集数据作为“证据”,计算一个统计量(比如Z值或t值),看看这个证据在“原假设为真”的世界里出现的概率(P值)有多大。如果这个概率极小,小到我们认为几乎不可能发生,那么我们就“拒绝原假设”,接受备择假设,认为差异是显著的。Z检验和t检验,就是这场辩论中最常用、也最核心的两位“证据分析师”,它们分别适用于不同的“证据”(数据)条件。掌握它们,意味着你掌握了用数据说话、科学决策的基本语言,能让你从“我觉得”进化到“数据表明”。
2. 核心思想与流程拆解:一场标准的“数据审判”
假设检验不是单一的操作,而是一套环环相扣的标准流程。理解这个流程,比死记硬背公式更重要。下面我们把这个流程拆解为六个关键步骤,并用一个贯穿始终的例子来说明:我们怀疑一款新的页面设计(B版本)比旧设计(A版本)能带来更高的点击率(CTR)。
2.1 确立对立假设:设定辩论的舞台
第一步是明确我们要检验什么。这需要设立一对互斥的假设。
- 原假设(H0):通常是保守的、需要被挑战的假设。它表示“没有效应”或“没有差异”。在我们的例子中,H0:B版本的点击率等于A版本的点击率(μ_B = μ_A)。
- 备择假设(H1):这是我们希望通过数据去支持的假设。它可以是:
- 双侧检验:H1:B版本的点击率不等于A版本的点击率(μ_B ≠ μ_A)。这用于探测“有无差异”,不关心方向。比如,我们不确定新设计是更好还是更差,只想看看它是否引起了变化。
- 单侧检验:H1:B版本的点击率大于A版本的点击率(μ_B > μ_A)。这用于探测“正向差异”。通常在我们有强理论或业务预期新设计会更好时使用。选择单侧检验需要非常谨慎,必须在看到数据之前就确定方向。
注意:原假设和备择假设必须穷尽所有可能性且互斥。你只能拒绝或不拒绝H0,而不能“接受”H0。不拒绝H0只意味着“证据不足”,而非“证明H0为真”。
2.2 选择检验统计量:挑选合适的“尺子”
根据数据的特性,我们需要选择合适的“尺子”来度量差异。这主要取决于三个因素:
- 检验目标:是比较均值(如平均收入、平均点击率),还是比较比例(如转化率),还是比较方差?
- 样本量:是大样本(通常 n > 30)还是小样本?
- 总体方差是否已知:这是一个关键前提。
对于均值差异的检验:
- Z检验:当总体方差已知,或样本量很大(此时样本方差可作为总体方差的良好估计)时使用。它基于标准正态分布。
- t检验:当总体方差未知,且需要用小样本(n < 30)数据进行估计时使用。它基于t分布。t分布比正态分布更“矮胖”,尾部更厚,这反映了由于方差未知而引入的额外不确定性。
在我们的点击率例子中,点击率本质是一个比例(点击次数/曝光次数)。对于比例的检验,当样本量足够大(满足 np 和 n(1-p) 都大于5或10),我们可以使用基于正态分布的Z检验。如果我们比较的是用户的平均停留时长(连续变量),且我们不知道总体方差,样本量也不大,那么就应该使用t检验。
2.3 确定显著性水平与拒绝域:设定判决标准
在法庭上,我们需要定义“证据确凿”的标准。在假设检验中,这个标准就是显著性水平(α)。α是一个概率阈值,通常设为0.05或0.01。它代表了当原假设为真时,我们错误地拒绝它的风险(即第一类错误,假阳性)。
- α = 0.05:意味着我们愿意承受5%的风险,把本来没差异的情况误判为有差异。
- 拒绝域:根据α和检验类型(单侧/双侧),我们可以在统计量的分布上划出一个区域。如果计算出的检验统计量落在这个区域,我们就拒绝H0。对于α=0.05的双侧Z检验,拒绝域是标准正态分布两端各2.5%的区域(Z值绝对值大于1.96)。
2.4 计算检验统计量与P值:收集并分析证据
这是计算环节。我们根据样本数据,代入相应的公式,计算出Z值或t值。
- Z值计算公式(单样本均值检验,方差已知):
Z = (样本均值 - 原假设下的总体均值) / (总体标准差 / √样本量) - t值计算公式(单样本均值检验,方差未知):
t = (样本均值 - 原假设下的总体均值) / (样本标准差 / √样本量)
同时,我们计算P值。P值是在原假设为真的前提下,观察到当前样本数据或更极端数据的概率。P值越小,说明当前数据与原假设的矛盾越大。
2.5 做出统计决策:宣布审判结果
将计算得到的P值与预先设定的α进行比较:
- 如果P值 ≤ α,则拒绝原假设(H0)。结论:在α显著性水平下,差异具有统计学意义。
- 如果P值 > α,则无法拒绝原假设(H0)。结论:在α显著性水平下,未发现显著差异。
切勿混淆:P值不表示备择假设为真的概率,也不表示差异的大小。它只衡量证据反对原假设的强度。
2.6 得出业务结论:将统计语言翻译成行动指南
这是最后,也是最重要的一步。统计结论必须转化为业务语言。
- 如果拒绝H0:“有统计证据表明,新设计(B版本)的点击率显著高于旧设计(A版本)。建议全量上线B版本。”
- 如果未拒绝H0:“目前没有足够的统计证据表明新设计能提升点击率。差异可能由随机波动导致。建议收集更多数据,或重新审视设计改动点。”
3. Z检验详解:大样本下的“定海神针”
Z检验是假设检验家族中的“老大哥”,应用前提严格,但一旦满足,其结论非常稳健。它核心依赖于中心极限定理:无论原始总体是什么分布,只要样本量足够大,样本均值的分布就近似服从正态分布。
3.1 适用场景与前提条件
Z检验主要用于以下场景,且必须严格满足其前提:
- 单样本Z检验:检验单个样本的均值是否等于某个已知的总体均值。
- 前提:总体方差σ²已知;或者样本量n很大(通常n>30),此时可以用样本方差S²近似代替σ²。
- 双样本Z检验:检验两个独立样本的均值是否存在显著差异。
- 前提:两个总体的方差σ1²和σ2²均已知;或者两个样本量n1和n2都很大。
- 比例Z检验:检验一个样本的比例(如转化率)是否等于某个假设值,或检验两个样本的比例是否有差异。
- 前提:样本量足够大,满足
np ≥ 5且n(1-p) ≥ 5(其中p为样本比例或合并比例)。
- 前提:样本量足够大,满足
3.2 计算公式与实操案例
假设我们是一家电商公司,历史数据显示,某个商品详情页的平均停留时长服从正态分布,总体标准差σ=40秒。我们优化了页面布局,随机抽取了100名用户(n=100),测得他们的平均停留时长为350秒。我们想检验优化后的页面平均停留时长是否显著高于历史均值(330秒)。这是一个单侧检验。
- 设立假设:
- H0: μ = 330秒 (优化无效)
- H1: μ > 330秒 (优化有效,停留时长增加)
- 选择检验统计量:总体方差已知(σ=40),使用Z检验。
- 确定显著性水平:设α=0.05。单侧检验,对应的临界Z值(Zα)为1.645。
- 计算Z值:
Z = (350 - 330) / (40 / √100) = 20 / 4 = 5.0 - 做出决策:计算出的Z值5.0远大于临界值1.645。或者说,计算P值(P(Z>5.0))几乎为0,远小于0.05。
- 结论:拒绝H0。有显著的统计证据表明,优化后的页面平均停留时长高于历史水平。
实操心得:在实际业务中,总体方差已知的情况极少。因此,所谓的“Z检验”更多是指大样本情况下的近似。只要样本量够大,即使总体分布非正态,也可以用Z检验。这是一个非常实用的经验法则。
3.3 Z检验的局限与注意事项
- 对前提假设敏感:在样本量不大且总体方差未知时,强行使用Z检验(用样本方差代替总体方差)会低估不确定性,导致第一类错误(假阳性)的实际概率高于设定的α。这是使用Z检验最大的坑。
- 比例检验的连续性校正:当用正态分布近似二项分布(比例检验)时,特别是样本量不是特别大时,建议使用连续性校正。例如,检验比例p是否等于p0,统计量修正为:
Z = (|样本比例 - p0| - 1/(2n)) / SE。这会使结果更保守、更准确。 - 效应量比显著性更重要:即使Z检验结果显著(P值很小),也要关注效应量,比如均值差异(350-330=20秒)本身。一个统计显著但效应量微乎其微的结果,可能不具备业务意义。
4. t检验详解:小样本时代的“生存利器”
t检验由威廉·戈塞特(笔名“Student”)提出,解决了小样本、总体方差未知情况下的均值推断问题。它是数据分析中最常用的检验方法,没有之一。
4.1 t分布与自由度:不确定性的度量
t分布与正态分布形状类似,都是对称的钟形曲线,但t分布的尾部更厚。这意味着,在相同的概率下,t值比Z值更大。这个特性,正是为了“惩罚”我们因为用小样本估计总体方差而带来的额外不确定性。
- 自由度:t分布的形状由一个参数决定——自由度。对于不同的t检验类型,自由度的计算方式不同。自由度越大,t分布越接近正态分布。当自由度大于30时,两者已非常接近。
- 自由度计算:
- 单样本t检验:df = n - 1
- 独立双样本t检验(假设方差相等):df = n1 + n2 - 2
- 独立双样本t检验(假设方差不相等,即Welch‘s t检验):df 由一个更复杂的公式计算,通常统计软件会自动给出。
4.2 三大经典t检验场景
4.2.1 单样本t检验
检验单个样本的均值是否等于某个理论值或已知值。前提:数据近似正态分布(小样本时尤其重要),或样本量较大。
案例:我们开发了一种新的电池,宣称其平均续航时间为24小时。从生产线抽取10块电池(n=10)测试,得到续航时间:23.5, 24.2, 23.8, 24.1, 23.9, 23.7, 24.3, 23.6, 24.0, 24.1(小时)。样本均值x̄=23.92,样本标准差S≈0.26。问电池的实际平均续航是否达到24小时?(α=0.05,双侧检验)
- 假设:H0: μ=24; H1: μ≠24。
- 计算t值:
t = (23.92 - 24) / (0.26 / √10) ≈ -0.97 - 自由度:df = 10 - 1 = 9。
- 查表或软件得P值:对于t(9) = -0.97,双侧P值约为0.36。
- 决策:P值 > 0.05,不拒绝H0。
- 结论:没有足够证据表明电池的平均续航偏离24小时。
4.2.2 独立双样本t检验
检验两个独立组别的均值是否存在差异。这是A/B测试的核心统计方法。它有两个变体:
- 方差齐性t检验:假设两个总体的方差相等。合并方差进行估计。
- Welch‘s t检验:不假设两个总体方差相等。使用各自的方差进行计算。这是更推荐的做法,因为方差是否相等本身也需要检验,而Welch检验在方差齐或不齐时都表现稳健。
案例(A/B测试):我们测试两个推荐算法。对照组(A)1000用户,平均点击率1.2%,标准差0.3%。实验组(B)1050用户,平均点击率1.5%,标准差0.35%。问B算法是否显著优于A?
- 假设:H0: μ_B = μ_A; H1: μ_B > μ_A (单侧)。
- 选择Welch‘s t检验(不预先假设方差相等)。
- 使用统计软件(如Python的
scipy.stats.ttest_ind,设置equal_var=False)计算:输入两组数据,得到t统计量和P值。 - 结果解读:假设计算得到t=2.1, P值=0.018 (单侧)。
- 决策:P值 < 0.05,拒绝H0。
- 结论:B算法的点击率显著高于A算法。
4.2.3 配对样本t检验
检验同一组对象在两个不同条件下(前后测量、两种处理方法)的均值差异。它通过计算每对数据的差值,将问题转化为对“差值均值是否为0”的单样本t检验。它能有效控制个体差异带来的干扰。
案例:10名患者服用降压药前和服药后的血压数据。我们关心的是每位患者血压的降低值(差值)。
- 计算差值:d_i = 服药前_i - 服药后_i。
- 对差值序列进行单样本t检验:H0: μ_d = 0 (平均差值为0,药无效); H1: μ_d > 0 (平均差值大于0,药有效)。
- 后续步骤同单样本t检验。
核心技巧:在A/B测试中,如果用户是随机分组的,用独立双样本t检验。如果是同一批用户先后体验两个版本(如“发布前/发布后”对比),则必须使用配对样本t检验,否则会严重高估显著性。
4.3 t检验的适用前提与诊断
t检验虽然强大,但也有其“软肋”,使用前必须进行诊断:
- 独立性:样本观测值之间相互独立。这是最重要的前提,通常由随机抽样或随机化实验设计来保证。
- 正态性:数据应(近似)服从正态分布。对于单样本和配对样本t检验,我们关心的是数据本身(或差值)的正态性。对于独立双样本t检验,我们关心的是每个组的数据是否正态。
- 诊断方法:Q-Q图、Shapiro-Wilk检验(小样本)、Kolmogorov-Smirnov检验。但注意,这些检验在样本量大时非常敏感,一点轻微的非正态也会被检出。
- 稳健性:t检验对正态性假设有一定的稳健性。特别是当样本量较大(每组>30)时,根据中心极限定理,即使原始数据非正态,样本均值的分布也接近正态,t检验仍适用。对于明显偏态或存在极端异常值的小样本,应考虑非参数检验(如Mann-Whitney U检验)。
- 方差齐性:仅针对独立双样本t检验的经典版本(非Welch‘s)。可用Levene‘s检验或F检验来检查。强烈建议直接使用不要求方差齐性的Welch‘s t检验,省去检验步骤,结果更可靠。
5. 实操流程与核心环节实现
理论说再多,不如动手跑一遍。这里我们以互联网行业最常见的独立双样本t检验(A/B测试)为例,展示从数据到决策的完整实操流程。我们将使用Python的pandas、scipy和statsmodels库。
5.1 环境准备与数据模拟
首先,我们模拟一份A/B测试数据。假设我们测试了一个新的登录按钮颜色(B组)对比旧颜色(A组),核心指标是用户的“登录耗时”(单位:秒)。
import numpy as np import pandas as pd from scipy import stats import statsmodels.stats.api as sms import matplotlib.pyplot as plt import seaborn as sns # 设置随机种子保证可复现 np.random.seed(42) # 模拟数据 # 对照组 (A组):均值30秒,标准差8秒,样本量500 group_a = np.random.normal(loc=30, scale=8, size=500) # 实验组 (B组):均值28秒(我们期望它更快),标准差9秒,样本量500 group_b = np.random.normal(loc=28, scale=9, size=500) # 创建DataFrame df_a = pd.DataFrame({'group': 'A', 'login_time': group_a}) df_b = pd.DataFrame({'group': 'B', 'login_time': group_b}) df = pd.concat([df_a, df_b], ignore_index=True) # 查看基本描述统计 print(df.groupby('group')['login_time'].describe())运行后,你会看到两组数据的样本量、均值、标准差、最小值、最大值等。从均值上看,B组(~28.1秒)似乎比A组(~30.1秒)快了约2秒。
5.2 前提假设诊断
在进行t检验之前,我们必须检查前提假设。
# 1. 独立性:由实验设计(随机分组)保证,此处无法用代码检验,是实验设计的核心。 # 2. 正态性检验 - 使用Shapiro-Wilk检验(适用于小中样本) # 注意:样本量>5000时,该检验可能过于敏感 print("正态性检验 (Shapiro-Wilk):") stat_a, p_a = stats.shapiro(group_a) stat_b, p_b = stats.shapiro(group_b) print(f"Group A: W={stat_a:.4f}, p={p_a:.4f}") print(f"Group B: W={stat_b:.4f}, p={p_b:.4f}") # 如果p值 < 0.05,则拒绝“数据来自正态分布”的原假设。 # 对于大样本,轻微偏离正态也可接受,可辅以Q-Q图观察。 # 绘制Q-Q图进行可视化诊断 fig, axes = plt.subplots(1, 2, figsize=(12, 5)) stats.probplot(group_a, dist="norm", plot=axes[0]) axes[0].set_title('Group A Q-Q Plot') stats.probplot(group_b, dist="norm", plot=axes[1]) axes[1].set_title('Group B Q-Q Plot') plt.tight_layout() plt.show() # 3. 方差齐性检验 - Levene‘s检验 (比F检验更稳健) print("\n方差齐性检验 (Levene‘s):") lev_stat, lev_p = stats.levene(group_a, group_b) print(f"Levene‘s statistic: {lev_stat:.4f}, p-value: {lev_p:.4f}") # 如果p值 < 0.05,则拒绝“两组方差相等”的原假设,建议使用Welch‘s t检验。在我们的模拟数据中,正态性检验的p值很可能大于0.05(因为数据本就是正态生成的),Q-Q图上的点也应大致分布在参考线附近。方差齐性检验的p值也可能大于0.05,但即便如此,我们依然直接采用更通用的Welch‘s t检验。
5.3 执行假设检验与计算效应量
现在,我们执行不假设方差齐性的Welch‘s t检验。
# 执行Welch‘s t检验 (equal_var=False) t_stat, p_val = stats.ttest_ind(group_a, group_b, equal_var=False) print(f"\nWelch‘s t-test Results:") print(f"t-statistic: {t_stat:.4f}") print(f"p-value (two-tailed): {p_val:.4f}") # 因为我们预设B组耗时更短是备择假设(单侧),所以单侧P值 = 双侧P值 / 2 p_val_one_tailed = p_val / 2 print(f"p-value (one-tailed, for H1: μ_B < μ_A): {p_val_one_tailed:.4f}") # 计算效应量 - Cohen‘s d (适用于独立样本t检验) # 使用合并标准差计算 n1, n2 = len(group_a), len(group_b) var1, var2 = np.var(group_a, ddof=1), np.var(group_b, ddof=1) # ddof=1 计算样本方差 pooled_std = np.sqrt(((n1-1)*var1 + (n2-1)*var2) / (n1 + n2 - 2)) cohen_d = (np.mean(group_a) - np.mean(group_b)) / pooled_std # A均值 - B均值 print(f"\nEffect Size - Cohen‘s d: {cohen_d:.4f}") # Cohen‘s d 解释:|d|≈0.2 小效应,≈0.5 中效应,≈0.8 大效应5.4 结果解读与业务报告
根据输出进行解读:
- 统计决策:假设我们设定α=0.05。单侧P值(例如0.0002)远小于0.05,因此我们拒绝原假设。
- 统计结论:有显著的统计证据表明,B组(新按钮)的用户登录耗时显著低于A组(旧按钮)。
- 效应量:计算出的Cohen‘s d约为0.25,属于小到中等的效应量。这意味着差异虽然统计显著,但实际幅度需要结合业务判断。
- 业务报告:不应只说“P值显著”。一份好的报告应包含:
- 摘要:新按钮使平均登录耗时从30.1秒降低至28.1秒,降低了约2秒(6.7%)。
- 统计可靠性:通过Welch‘s t检验,该差异具有统计学意义(p < 0.001,单侧)。
- 效应量:效应量(Cohen‘s d=0.25)表明这是一个小到中等的实际改进。
- 建议:鉴于统计显著且对用户体验有正向改善,建议全量发布新按钮设计。
- 置信区间(强烈建议提供):
输出可能为# 计算均值差异的95%置信区间 cm = sms.CompareMeans(sms.DescrStatsW(group_a), sms.DescrStatsW(group_b)) ci_low, ci_high = cm.tconfint_diff(alpha=0.05, usevar='unequal') # unequal对应Welch print(f"\n95% CI for mean difference (A - B): [{ci_low:.2f}, {ci_high:.2f}]")[1.2, 2.8]秒。这意味着我们有95%的信心认为,新按钮真正节省的时间在1.2到2.8秒之间。置信区间比P值提供了更多信息,它给出了差异的可能范围。
6. 常见陷阱、疑难排查与高级考量
即使流程正确,实践中依然坑洼遍地。下面是一些高频问题和进阶思考。
6.1 P值滥用与误解“全记录”
- P值不是H1为真的概率:P值=0.03不代表有97%的概率H1成立。它只表示,如果H0为真,观察到当前数据的概率是3%。
- P值操纵与“p-hacking”:这是最严重的滥用。包括:不断收集数据直到P值显著;在多个指标中挑选一个显著的汇报;尝试多种数据分析方法后选择P值最好的那个。这会导致假阳性率急剧膨胀。解决方案:预先注册实验方案、确定主要指标、固定样本量或使用序贯检验。
- 显著性 ≠ 重要性:一个极小的P值可能来自巨大的样本量,即使差异的效应量很小(如点击率从5.00%提升到5.01%)。一定要报告效应量和置信区间。
- 不显著 ≠ 没有差异:P值>0.05只说明“证据不足”,不能证明H0(无差异)为真。可能是样本量太小、方差太大。此时应报告置信区间,看区间是否包含了有业务意义的差值。
6.2 样本量规划与功效分析
在实验开始前,我们应问:需要多少样本才能有把握检测到一个有意义的差异?这需要功效分析。统计功效是指当H1为真时(确实存在差异),我们正确拒绝H0的概率(1 - β,β是第二类错误概率)。
# 使用statsmodels进行功效分析 effect_size = cohen_d # 我们期望检测到的效应量(用Cohen‘s d表示) alpha = 0.05 # 显著性水平 power = 0.8 # 期望的统计功效(通常设为0.8) ratio = 1 # 两组样本量之比 (n2/n1) # 计算所需的每样本量 analysis = sms.TTestIndPower() sample_size_per_group = analysis.solve_power(effect_size=effect_size, alpha=alpha, power=power, ratio=ratio, alternative='two-sided') print(f"\nRequired sample size per group (two-sided): {np.ceil(sample_size_per_group):.0f}")假设我们想检测一个Cohen‘s d=0.2的小效应,在α=0.05,功效=0.8的条件下,双侧检验每组需要约394个样本。不进行功效分析就启动实验,很可能导致样本不足,得到一个“不显著”的模糊结论,浪费资源。
6.3 方差分析与多重比较问题
当需要比较两组以上的均值时(例如,测试红、蓝、绿三种按钮颜色),不能反复进行两两t检验。因为每次检验都有犯第一类错误(α)的风险。比较3组需要做3次两两检验,总的犯错概率会膨胀到约1-(1-α)^3 = 0.143。此时应使用方差分析(ANOVA),它一次性检验所有组均值是否相等。如果ANOVA结果显著,再使用事后检验(如Tukey HSD)进行两两比较,并控制整体错误率。
6.4 非参数检验:当t检验前提被严重违背时
如果数据严重偏离正态(如高度偏态、存在大量异常值)且样本量小,t检验的结果可能不可信。此时应转向非参数检验,它们不依赖于具体的总体分布假设。
- 替代单样本/配对t检验:Wilcoxon符号秩检验。
- 替代独立双样本t检验:Mann-Whitney U检验(Wilcoxon秩和检验)。 这些检验的原假设通常是“两组数据的分布相同”,备择假设是“分布不同(如位置偏移)”。它们检验的是中位数而非均值,功效通常略低于对应的参数检验,但更稳健。
# Mann-Whitney U检验示例 u_stat, p_val_nonpara = stats.mannwhitneyu(group_a, group_b, alternative='two-sided') print(f"\nMann-Whitney U Test (non-parametric):") print(f"U-statistic: {u_stat:.0f}, p-value: {p_val_nonpara:.4f}")6.5 比例检验:Z检验的另一个主场
对于点击率、转化率、存活率等比例数据,我们使用比例检验。其核心思想是利用二项分布在大样本下近似正态分布的特性。
- 单样本比例检验:检验样本比例p是否等于假设值p0。
Z = (p - p0) / sqrt( p0*(1-p0)/n ) - 双样本比例检验:检验两个样本比例p1和p2是否相等。
Z = (p1 - p2) / sqrt( p*(1-p)*(1/n1 + 1/n2) ),其中p为合并比例。
关键点:必须检查np ≥ 5和n(1-p) ≥ 5的条件是否满足,否则正态近似不佳,应考虑使用精确检验(如Fisher精确检验)。
我个人在实际工作中,对于A/B测试中的核心转化率指标,除了看P值,一定会同时计算其置信区间。例如,使用statsmodels.stats.proportion.proportion_confint来计算比例的置信区间。当两个比例的置信区间没有重叠时,通常也意味着差异显著,但这种判断略保守。最可靠的方法还是直接进行比例假设检验。