You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试两款套餐收入均值差异时t检验p-value返回NaN的问题排查

错误原因定位
  • 检验方法与传入参数完全不匹配
    你要验证两个独立分组(surf套餐用户、ultimate套餐用户)的月收入均值是否相等,却误用了单样本t检验st.ttest_1samp,且传入的两个参数都是已经计算完成的均值标量,而非原始样本观测值。

st.ttest_1samp的参数要求:

  • 第一个参数:待检验的样本观测值一维序列,样本量需≥2
  • 第二个参数:待对比的假设总体均值,为单个标量

你当前的传入逻辑相当于给单样本t检验传入了一个长度为1的样本,计算t统计量时自由度为n-1=0,无法得到有效计算结果,因此p-value直接返回NaN。

  • 检验输入逻辑错误
    即使换用适配双样本均值比较的检验方法,也不能直接把两个组的均值作为输入。t检验需要结合每个组的原始观测值、样本量、样本标准差计算统计量,仅靠两个均值完全无法完成检验。
    你之前计算均值时pandas.Series.mean()默认开启skipna=True,自动跳过了monthly_revenue列的NaN值,因此能得到正确的均值结果,但这和t检验需要的输入类型完全不同。
修正步骤
  1. 提前提取两个分组的非空月收入序列,不要提前计算均值
# 提取surf套餐的有效月收入,自动过滤NaN
surf_rev = call_plan_merge.query('tariff == "surf"')['monthly_revenue'].dropna()
# 提取ultimate套餐的有效月收入,自动过滤NaN
ultimate_rev = call_plan_merge.query('tariff == "ultimate"')['monthly_revenue'].dropna()
  1. 改用独立双样本t检验st.ttest_ind,传入两个原始观测序列
# 建议加equal_var=False,使用Welch's t检验,无需提前假设两组方差相等
results = st.ttest_ind(surf_rev, ultimate_rev, equal_var=False)
  1. 后续的p值显著性判断逻辑可保持不变。

内容的提问来源于stack exchange,提问作者lm.bertrand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 12:24:04