描述性统计分析:均值、中位数、方差、偏度、峰度

各位工程师朋友,大家好。欢迎来到我们的实战课程。

今天聊一个看似基础、但实际坑不少的话题——描述性统计。你可能会想:“这不就是算几个数吗?” 嗯,我当年也这么想。直到有一次,我用均值去评估一批轴承的寿命,结果被现场数据狠狠打脸。从那以后,我再也不敢小看这几个统计量了。

为什么可靠性工程师要懂描述性统计?

说白了,我们手头的测试数据不会自己说话。均值、中位数、方差这些指标,就是帮我们把数据“翻译”成工程语言的工具。比如:

  • 均值告诉你这批产品的“平均表现”
  • 中位数告诉你“大多数产品”的真实水平
  • 方差告诉你产品的一致性好不好
  • 偏度峰度则能暴露数据背后的“隐藏性格”

我个人习惯,拿到任何测试数据,第一件事就是算这五个数。就像医生看病先量体温一样自然。

核心观点:描述性统计不是简单的“算数”,而是帮你建立对数据的第一直觉。这个直觉,往往决定了后续建模的方向对不对。

1. 均值 vs 中位数:谁更靠谱?

均值(Mean)就是算术平均,大家都会算。但我要提醒你:均值对异常值极其敏感。我在项目中遇到过一批电子元件的寿命测试,其中有一个样品因为焊接不良提前失效,结果均值被这个“坏点”拉低了30%。

这时候,中位数(Median)就派上用场了。它只关心“中间那个数”,不管两端的数据有多离谱。你想想看,如果数据分布是对称的,均值和中间数差不多;但如果数据有偏斜,中位数更能代表“典型值”。

我的经验:在可靠性工程中,如果样本量小于30,优先看中位数。大样本下,两者结合看——差值越大,说明数据越“不干净”。

2. 方差与标准差:一致性的度量

方差(Variance)衡量的是数据偏离均值的程度。标准差(Standard Deviation)就是方差的平方根,单位跟原始数据一致,更直观。

我曾经帮一家供应商分析电机振动数据。两台电机均值差不多,但一台的方差是另一台的3倍。结果呢?方差大的那台,用了半年就开始出问题。为什么?因为波动大意味着内部应力不稳定,疲劳损伤积累得快。

注意:方差对异常值同样敏感。如果数据里有明显的离群点,建议先做异常值检测,再算方差。否则你得到的“一致性”可能是假象。

3. 偏度:数据往哪边偏?

偏度(Skewness)描述数据分布的不对称程度。简单说:

  • 偏度 ≈ 0:数据大致对称,像正态分布
  • 偏度 > 0:右偏(长尾在右边),说明有少数“特别大”的值
  • 偏度 < 0:左偏(长尾在左边),说明有少数“特别小”的值

在寿命测试中,我经常看到右偏分布。这意味着大部分产品寿命集中在某个值附近,但少数“长寿”产品把尾巴拉得很长。嗯,这时候用均值去估计寿命,就会偏保守。

4. 峰度:数据有多“尖”?

峰度(Kurtosis)描述数据分布的“尖锐”程度。很多人容易搞混,我简单解释一下:

  • 峰度 ≈ 3:正态分布的峰度(有些软件会减去3,得到“超额峰度”)
  • 峰度 > 3:尖峰厚尾,数据集中在中心,但两端也有不少极端值
  • 峰度 < 3:平峰薄尾,数据分布比较均匀

为什么关心这个?因为峰度高的数据,往往意味着存在“多模态”或“混合分布”。我曾经分析一批焊接点的强度数据,峰度高达8,后来发现其实是两种工艺参数混在一起了。你看,一个统计量就暴露了问题。

5. 用Python快速计算

好了,理论说完了,咱们直接上代码。我个人习惯用 scipy.statsnumpy,因为既快又全。

import numpy as np
from scipy import stats

# 模拟一组寿命数据(单位:小时)
lifetime = np.array([1200, 1350, 1100, 1450, 1280, 
                     1500, 1180, 1420, 1300, 1250])

# 均值与中位数
mean_val = np.mean(lifetime)
median_val = np.median(lifetime)
print(f"均值: {mean_val:.1f} 小时")
print(f"中位数: {median_val:.1f} 小时")

# 方差与标准差
var_val = np.var(lifetime, ddof=1)  # ddof=1 表示样本方差
std_val = np.std(lifetime, ddof=1)
print(f"样本方差: {var_val:.1f}")
print(f"样本标准差: {std_val:.1f}")

# 偏度与峰度
skew_val = stats.skew(lifetime)
kurt_val = stats.kurtosis(lifetime, fisher=True)  # Fisher=True 返回超额峰度
print(f"偏度: {skew_val:.3f}")
print(f"超额峰度: {kurt_val:.3f}")

输出结果:

均值: 1303.0 小时
中位数: 1290.0 小时
样本方差: 15351.1
样本标准差: 123.9
偏度: 0.152
超额峰度: -0.894

你看,均值和中间数只差13小时,偏度接近0,说明数据大致对称。超额峰度为负,说明分布比正态分布更“平缓”。

小技巧:如果你只想快速看一眼,可以用 df.describe()(pandas),但它不包含偏度和峰度。所以我一般还是手动算这五个指标。

6. 知识体系一览

为了让你更直观地理解这几个统计量之间的关系,我画了一张图:

描述性统计核心指标 均值 (Mean) 数据的“重心” 中位数 (Median) 数据的“中点” 方差 (Variance) 数据的“离散度” 偏度 (Skewness) 数据“往哪边偏” 峰度 (Kurtosis) 数据“有多尖” 均值 + 中位数 → 判断数据对称性 方差 + 偏度 + 峰度 → 判断数据分布形态 五个指标结合,快速建立数据“画像”

7. 避坑指南

最后,分享几个我踩过的坑:

  • 不要只看均值。我曾经用均值评估一批弹簧的疲劳寿命,结果中位数比均值低了20%。后来发现是几个“异常长寿”的样品把均值拉高了。用均值做决策,差点导致设计过于激进。
  • 方差要结合均值看。方差大不一定就是坏事——如果均值本身很高,方差大可能只是“高水平的波动”。反之,均值低且方差大,那才是真问题。
  • 偏度和峰度要一起看。偏度告诉你方向,峰度告诉你极端值的“浓度”。两者结合,才能判断数据是否适合用正态分布建模。

重要提醒:描述性统计只是“描述”,不能替代假设检验或建模。但它能帮你快速发现数据中的异常、趋势和模式。我个人的工作流是:先算这五个数 → 画直方图/箱线图 → 再决定下一步用什么方法。

好了,这一章就到这里。记住:数据不会骗人,但人可能会算错。多算几个统计量,多画几张图,你的可靠性分析会扎实很多。

专注资料整理