4. 基于统计的异常检测方法:Z-Score与IQR方法
大家好,我是你们的老朋友。今天咱们聊聊异常检测里最经典、也最实用的统计方法。说实话,我入行那会儿,深度学习还没这么火,做环境监测全靠这些统计手段。现在回头看,这些方法虽然简单,但真管用。
4.1 Z-Score:标准分数法
Z-Score 说白了就是看一个数据点离平均值有多远。公式很简单:
Z = (x - μ) / σ
其中 μ 是均值,σ 是标准差。通常我们认为 |Z| > 3 就是异常。为什么是3?因为正态分布下,99.7%的数据都在3个标准差内。
核心要点:Z-Score 假设数据服从正态分布。如果数据偏态严重,结果会失真。
我在项目中遇到过一件事。某次监测河流pH值,数据看起来挺正常,但Z-Score标出了好几个异常点。后来一查,原来是传感器在雨天出现了漂移。嗯,Z-Score帮我省了一次现场排查的功夫。
4.2 IQR:四分位距法
IQR 不依赖正态分布假设。它用中位数和四分位数来定义异常边界:
IQR = Q3 - Q1
下界 = Q1 - 1.5 * IQR
上界 = Q3 + 1.5 * IQR
超出这个范围的点,就是异常。系数1.5是经验值,你也可以调成3,更严格。
我的习惯:做探索性数据分析时,先用IQR快速扫一遍。它鲁棒性好,不容易被极端值带偏。
你想想看,如果数据里有几个特别大的值,均值会被拉高,Z-Score可能就失效了。但IQR用中位数,稳得很。
4.3 Grubbs检验与Dixon检验
这两种方法属于假设检验类,专门用来检测单个异常点。
| 方法 | 适用场景 | 限制 |
|---|---|---|
| Grubbs检验 | 数据近似正态,一次检测一个异常 | 不能检测多个异常(掩蔽效应) |
| Dixon检验 | 小样本(n < 30),不要求正态 | 只检测极值,对中间值不敏感 |
Grubbs检验的统计量是:
G = max|xi - x̄| / s
然后查表判断是否显著。Dixon检验则用极差比,公式稍微复杂些,但原理类似。
避坑指南:我曾经用Grubbs检验处理一组含有两个异常的数据,结果一个都没检测出来。这就是掩蔽效应——两个异常互相掩护。后来我改用IQR,才把问题揪出来。
4.4 移动平均与指数平滑
这两种方法专门处理时间序列数据。环境监测数据大多是时序的,所以特别实用。
移动平均:取最近k个点的平均值作为当前点的估计值。如果实际值偏离估计值太多,就是异常。
MA_t = (x_t + x_{t-1} + ... + x_{t-k+1}) / k
指数平滑:给近期数据更高权重,权重按指数衰减。
S_t = α * x_t + (1 - α) * S_{t-1}
α 在0到1之间,越大越看重近期数据。
我的经验:做空气质量监测时,我习惯用指数平滑。因为污染物浓度变化有惯性,昨天的浓度对今天有影响。α取0.3左右效果不错。
4.5 统计方法的优缺点与适用场景
咱们总结一下。统计方法最大的优点是:可解释性强。你告诉业务方“这个点超过了3个标准差”,他们一听就懂。深度学习模型呢?解释起来费劲。
但缺点也很明显:
- 对数据分布敏感——Z-Score要求正态,IQR虽然好点,但也不是万能
- 难以处理高维数据——这些方法基本都是一维的
- 对周期性模式无能为力——比如每天早晚的污染物峰值,会被误判为异常
适用场景我列一下:
- 快速筛查——拿到数据先跑一遍IQR,心里有底
- 传感器校验——检测设备是否漂移或故障
- 小样本场景——数据量少,深度学习没法用
- 业务解释要求高——需要向非技术人员说明异常原因
下面这张图是我自己整理的,把今天讲的方法串起来了:
最后说一句心里话。统计方法不是万能的,但它是你工具箱里最趁手的那把螺丝刀。遇到新数据,我永远是先跑统计方法,心里有个数,再考虑要不要上复杂模型。别一上来就整深度学习,很多时候统计方法就够了。
好了,这一节就到这里。记住:简单不等于低效,关键是选对场景。