1. 背景
异常(异常值、离群点)一般指的是与标准值或期待值有偏离的样本,即与绝大部分数据“长得不一样”。
2. 异常检测(Anomaly Detection)
2.1 AD的一些特点
1. 异常不一定代表是“坏”的事情,但往往是“有价值”的事情,要对异常的成因感兴趣;
2. AD往往是在无监督模式下完成的,我们并不知道哪些数据是异常。
2.2 AD的应用
1. 金融反欺诈、信用卡诈骗检测(把欺诈或金融风险当作异常);
2. 罕见病检测:检测早发的阿兹海默症;
3. 网络流量入侵检测;
4. 机器故障检测:实时监测发现或预测机械故障;
5. 图结构、群体检测:如检测疫情的爆发点。
2.3 AD的挑战与难点
1. 大部分情况下是无监督学习,没有标签信息可以使用;
2. 数据是极端不平衡的(异常点仅占总体的一小部分),建模难度大;
3. 检测方法往往涉及到密度估计,需要进行大量距离/相似度计算,运算开销大;
4. 在实际场景中往往需要实时检测,比离线检测难度更高;
5. 在实际场景中常常需要同时处理很多案例,运算开销大;
6. 可解释性比较差,一般很难给出AD的原因,尤其是在高维数据上(但业务方需要了解成因);
7. 在实际场景中往往有一些检测的历史规则,如何与学习模型进行整合。
2.4 AD工具汇总
语言 | 框架 | 备注 | 链接 |
python | PyOD | Python Outlier Detection Toolbox, 30多种模型算法,和sklearn用法一致 | https://github.com/yzhao062/pyod https://zhuanlan.zhihu.com/p/58313521 |
Scikit-Learn | 包含4种常见算法,简单易用 | ||
TODS | 与PyOD类似,包含多种时间序列检测 | ||
R | outliers package | ||
AnomalyDetection | |||
Java | ELKI | ||
RapidMiner | AD扩展 |
2.5 AD算法汇总
主要模型 | 备注 | |
线性模型 | PCA | |
基于相似度的度量算法 | KNN,LOF,HBOS | |
基于概率的算法 | COPOD | |
集成检测算法 | 孤立森林、XGBOD | |
NN算法 | AutoEncoder(自编码器) |
2.6 评估方法
因数据极端不平衡,不能简单使用准确度(accuracy)进行评估。
备注 | |
ROC-AUC曲线 | |
Precision @ Rank K | topK 的精准 |
Average Precision | 平均精准度 |