异常检测方法分类:统计方法、机器学习、深度学习路线图
做异常检测这些年,我最常被问的一个问题是:"到底该用哪种方法?" 说实话,没有万能答案。不同场景、不同数据,适合的工具完全不一样。但有一条主线我很早就摸清楚了——统计方法、机器学习、深度学习这三条路径,基本覆盖了工业界和学术界的所有主流方案。
下面这张图是我自己梳理的路线图。每次带新人入门,我都会先让他看这个框架,心里有个全局感再说。
1. 统计方法 — 简单、快、可解释
统计方法是异常检测的"老大哥"。它的核心思路就一句话:假设正常数据服从某个分布,偏离分布太多的就是异常。我记得刚入行时,第一个落地项目就是给服务器CPU指标做监控,用的就是3-sigma法则。简单到可以用一行代码实现:
import numpy as np
def three_sigma_detection(data):
mu = np.mean(data)
sigma = np.std(data)
# 超出3个标准差就报警
return [(x, '异常' if abs(x - mu) > 3 * sigma else '正常') for x in data]
避坑指南:曾经我有一个项目直接对原始指标跑3-sigma,结果发现天花板效应——数据有硬上限,大量正常值集中在靠近上限的位置,标准差被压低,导致大片误报。后来加了分段窗口和滑动平均才好。所以统计方法对数据分布很敏感,用之前先画个直方图看看。
常用的统计方法我列了三个主流:
- 3-sigma(拉依达准则):适用于近似正态分布。我的经验是工业传感器数据大多能用,但注意多模态分布要先分簇处理。
- IQR(四分位距):对偏态分布更鲁棒。一次做金融交易数据异常检测,交易金额分布长尾严重,IQR比3-sigma准很多。
- Grubbs检验 / Z-score:适合单变量、样本量不大的情况。如果样本少于30,慎用,容易漏报。
2. 机器学习 — 灵活、多特征、能应对复杂模式
当特征维度超过两三个,统计方法开始吃力。这时候机器学习的优势就出来了。我个人最常用的是孤立森林,它的思想很巧妙——用随机切分把异常点"孤立"出来,异常点因为特征稀疏,切几刀就能单独成叶。
另一个经典是One-Class SVM。我建议你在特征空间没有明显边界时先用它试试。但注意,它不太适合高维数据——我曾经在200维特征上跑,训练时间爆炸,效果还不如降维后用孤立森林。
还有LOF(局部异常因子),它衡量的是局部密度。做信用卡欺诈检测时,我用它抓到了不少"小团体"异常——正常用户行为有聚类,但欺诈行为往往藏在正常簇的边缘。LOF对密度变化敏感,但对K值(邻居数)选择有点头痛,我一般用网格搜索调参。
警告:机器学习方法普遍需要标定阈值。很多新手直接取默认阈值,结果要么漏报要么误报。我建议每次训练后先画异常得分分布图,结合业务可接受的成本来确定边界。
3. 深度学习 — 大数据、高维、非线性
深度学习是近年来的热门。它的优势在于能自动提取复杂特征,尤其适合图像、时序、文本等非结构化数据。嗯,我这里只说三种最常用的架构:
| 方法 | 核心思想 | 典型场景 | 我的经验 |
|---|---|---|---|
| 自编码器 | 压缩-重建,重建误差大即异常 | 传感器时序、网页日志 | 别用太深的网络,3-4层足够。加深了反而学"坏"——把异常也学会了 |
| VAE(变分自编码器) | 概率分布建模,用似然度判断 | 图像异常检测、稀有事件 | 训练比AE稳定,但收敛慢。我习惯先用AE粗调,再用VAE求精 |
| GAN | 生成器+判别器博弈,异常点难被生成 | 医学图像、视频监控 | 训GAN是真难。曾经一周没出结果,后来用了WGAN-GP才跑通 |
一句话总结选型思路:如果数据量小于1万条,老老实实从统计方法开始;1万到10万条,上机器学习;10万条以上且特征复杂,考虑深度学习。当然,这只是我的经验值,具体还要看业务容忍度。
记得有一次做一个IoT设备异常检测,数据量才5000条,我脑子一热直接上了LSTM-AE,结果过拟合得一塌糊涂。后来退回到3-sigma加滑动窗口,两天就上线了。所以别为了用深度而用深度,从简单开始,反而不容易翻车。
现在你心里应该有个大概脉络了。统计方法、机器学习、深度学习这三条路,不是替代关系,而是互补关系。很多工业落地项目都是混合用的——比如先用统计方法做初筛,砍掉99%的正常数据,再把剩下1%的候选异常丢给深度学习模型精细判断。我最近做的这个项目就是这种组合,效果比单一方法好很多。
嗯,到这你已经搭好了异常检测方法的"知识地图"。接下来每一类我都会拿出实际代码和项目踩坑记录,我们一点点把模型部署到生产环境。别急,地基先打牢。