异常检测的学习笔记并非原创,而是搜索各位大佬的帖子整理而得。如有冒犯,请联系我。
1. 异常检测定义
在数据挖掘中,异常检测(Anomaly Detection)对不匹配预期模式或数据集中其他项目的项目、事件或观测值的识别。通常异常项目会转变成银行欺诈、结构缺陷、医疗问题、文本错误等类型的问题。异常也被称为离群值、新奇、噪声、偏差和例外。
1.1 异常检测的类别
异常点检测(Outlier detection),又称为离群点检测,是找出与预期对象的行为差异较大的对象的一个检测过程。异常点检测在生产生活中有着广泛应用,比如信用卡反欺诈、工业损毁检测、广告点击反作弊等。异常检测的一大难点是缺少ground truth。常见的方法是先用无监督方法挖掘异常样本,再用有监督模型融合多个特征挖掘更多作弊。
上下文异常,指的是在特定情境下个体实例是异常的,在其他情境下都是正常的,\href{}{例如在特定时间下的温度突然上升或下降},在特定场景中的快速信用卡交易;
群体异常指的是在群体集合中的个体实例出现异常的情况,而该个体实例⾃⾝可能不是异常,例如社交网络中虚假账号形成的集合作为群体异常⼦集,但⼦集中的个体节点可能与真实账号⼀样正常。
1.2 异常检测的应用
在自然界,人类社会中,以及其他数据领域,大多数事件和个体都是平常或者普通的。但总有一些个体或事件是‘不平凡‘’的。比如一些极端天气,一些运动员总能打破纪录。
1. 欺诈检测
2. 入侵检测
3. 生态灾难预警
4. 反垃圾
5. 制药领域
6. 时间序列异常检测
2. 异常检测的方法
2.1 传统方法
2.1.1 基于统计学的方法
主要是对数据的分布做出假设,并找出假设下所定义的“异常”,异常检测的统计学⽅法的⼀般思想是:学习⼀个拟合给定数据集的⽣成模型,然后识别该模型低概率区域中的对象,把它们作为异常点。
2.1.2 线性模型
基于矩阵分解的异常点检测方法的主要思想是利用主成分分析(PCA)去寻找那些违反了数据之间相关性的异常点。为了找到这些异常点,基于主成分分析的算法会把数据从原始空间投影到主成分空间,然后再从主成分空间投影回原始空间。
2.1.3 基于相似度的方法
这类算法适⽤于数据点的聚集程度⾼、离群点较少的情况。同时,因为相似度算法通常需要对每⼀个数据分别进⾏相应计算,所以这类算法通常计算量⼤,不太适⽤于数据量⼤、维度⾼的数据。
2.2 集成方法
对于高维数据而言,往往一个模型是不够的,比如前面的feature bagging(类比于监督学习中的随机森林)会建立多个模型。
集成异常检测(outlier ensembles)一般是平行式(parallel learning)的比如求平均,bagging类型为主流,而非序列式(sequential)如boosting。现在的主流集成异常检测因此性能还是有限的,毕竟取多个模型的均值或者最大值是现阶段的可行方法。
2.3 机器学习
在有标签的情况下,可以使⽤树模型(gbdt,xgboost等)进⾏分类,缺点是异常检测场景下数据标签是不均衡的,但是利⽤机器学习算法的好处是可以构造不同特征。