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

为何Excel与PySpark/Scipy计算的偏度值存在差异?

为什么Scipy/PySpark和Excel/Pandas计算的偏度结果不一致?

这个问题的核心原因很明确:不同工具默认采用了不同的样本偏度计算范式,差异主要来自「是否对样本进行无偏性校正」以及「使用总体标准差还是样本标准差」。咱们结合你给出的例子拆解验证:

先明确两组工具的计算逻辑

  • Scipy(默认参数)、PySpark:计算的是有偏样本偏度,使用总体标准差(分母为样本量n),且不应用样本量校正系数;
  • Excel SKEW函数、Pandas(默认参数):计算的是无偏样本偏度,使用样本标准差(分母为n-1),同时应用$\frac{n}{(n-1)(n-2)}$的校正系数,目的是让样本估计更接近真实的总体偏度。

用你的数据手动验证

给定数据:val = [120.7, 120.5, 120.4, 120.2, 120.1],样本量n=5

  1. 计算均值:$\bar{x} = (120.7+120.5+120.4+120.2+120.1)/5 = 120.38$
  2. 计算离均差的三次方之和:$\sum(x_i-\bar{x})^3 = 0.032768 + 0.001728 + 0.000008 - 0.005832 - 0.021952 = 0.00672$

1. Scipy默认计算(和PySpark一致)

  • 总体标准差:$\sigma = \sqrt{\frac{\sum(x_i-\bar{x})^2}{n}} = \sqrt{\frac{0.228}{5}} ≈ 0.2135$
  • 偏度公式:$\frac{1}{n} \times \frac{\sum(x_i-\bar{x})3}{\sigma3}$
  • 代入数值:$\frac{0.00672}{5} / (0.2135)^3 ≈ 0.1380$,和你得到的Scipy结果完全匹配。

2. Excel/Pandas计算

  • 样本标准差:$s = \sqrt{\frac{\sum(x_i-\bar{x})^2}{n-1}} = \sqrt{\frac{0.228}{4}} ≈ 0.2387$
  • 偏度公式:$\frac{n}{(n-1)(n-2)} \times \frac{\sum(x_i-\bar{x})3}{s3}$
  • 代入数值:$\frac{5}{4×3} × \frac{0.00672}{(0.2387)^3} ≈ 0.20575$,和你得到的Excel/Pandas结果一致。

如何让结果统一?

如果需要跨工具得到相同结果,只需调整参数匹配计算逻辑:

  • 让Scipy匹配Excel/Pandas:调用skew(val, bias=False)(启用无偏估计校正);
  • 让Pandas匹配Scipy/PySpark:调用df.skew(bias=True)(关闭无偏估计校正)。

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:37:54