01异常检测的概念02异常检测的难点03异常检测的分类及常见算法
异常检测(AnomalyDetection或OutlierDetection),又称为离群点检测,在我们风控领域很多地方都会用到,比如黑产对抗、团伙欺诈识别、羊毛党识别、反洗钱、识别欺诈贷款等等,对我们的风险控制工作,有着不可或缺的作用。抽象来说,就是需要从一堆数据中,找到那个“邻舍不同”(粤语)的点,并能够给出合理的判断和解释。
为什么说异常检测很难呢?主要有几个原因:1)异常点和噪声会混杂在一起,机器难以具体识别开来;2)现实中很少有异常点的标签,因为标签越多也就意味着遇到过的异常越多,也不符合常识认知;3)对于标签的定义也是很难,比如1个金融场景,欺诈的定义有太多,比如薅羊毛的、团伙骗贷的、个人骗贷的,基本上都混合在一起,不利于有监督模型的开展。
所以很多时候我们在操作的过程中,会先用无监督方法挖掘出异常样本,再基于这些样本去做有监督模型挖掘更多的异常点,这中间也多了一层转化,所以准确率和置信度上也有一定的下滑。
在开始将异常检测算法的分类前,我们先来了解下异常点的分类:
好了,讲完了异常点的分类,来讲一下异常检测算法的分类吧。
说起异常点检测,最容易想到的就是这个正态分布图了,3倍方差之外的数据属于异常数据。不过,我们切莫不能一上来就用这个东西来检测异常点,要用这个方法,首先要确定数据的分布符合正态(高斯)分布。不过,如果你的数据一开始不是正态分布,可以试试做一下函数变换,比如log变换、平方变换、指数变换等,使其变成正态分布,再来使用这个方法。
第二个会想到的是箱线图了。它是在1977年由美国统计学家JohnTukey发明,分析数据需要为定量数据,通过它可以直观的探索数据特征。我们可以从箱线图中直观地看到两点:数据离散分布情况以及离群点。
第三个会想到的,可能就是卡方检验了,卡方检验属于非参数检验,由于非参检验不存在具体参数和总体正态分布的假设,所以有时被称为自由分布检验。它的原理就是检验统计量来对比期望结果与实际结果的差异,最终根据显著性水平确定卡方值,从而来判断事情发生的概率,如果概率很低,却发生了,那就是异常了!公式如下:
其中,A是实际频数,E是期望频数。
基于距离的算法,其原理就是计算每个点与周围点的距离,从而来判断这个点是否离群,比如说我们熟悉的KNN和Kmeans,回顾一下:
KNN是分类算法,而K-Means是聚类算法;KNN属于监督学习,而K-Means属于无监督学习;
KNN的K是指选择与目标最近k个数量样本来进行预测,可以用多次交叉检验迭代对比后选择最优。而Kmeans的K是指簇中心数量,也就是聚类的数量,可以用肘部法来寻找一个最优的拐点,手肘法是个经验学习,所以不够自动化,所以也有了GapStatistic方法。
基于距离的算法显然可以解决一部分问题,但有一些场景还是没办法很好的识别,比如说数据分布极其不均匀,如果采用距离来衡量的话(因为距离说一个全局变量),可能没法准确识别出异常情况。所以,就有了基于密度的异常点检测算法,它的原理就是计算异常点的周围密度和其临近点的周围密度,基于这两个密度值计算出相对密度,作为异常分数。即相对密度越大,异常程度越高。常见的算法有LOF、COF、ODIN、MDEF、INFLO、LoOP、LOCI、aLOCI等。
孤立森林(IsolationForest)就是基于深度的一个树模型算法。08年由周志华和刘飞老师等提出的1个不基于距离或者密度等指标区描述样本与其他样本的差异,而是通过不断地分裂,从直观上就可以找到“孤立”的点。具体做法就是随机选择m个特征,通过在所选特征的最大值和最小值之间随机选择一个值来分割数据点,递归地重复观测点,直到所有的观察值被孤立。其算法原理就是异常样本更容易快速落入叶子结点或者说,异常样本在决策树上,距离根节点更近。
聚类算法我们遇过了很多,比如上面提到的KMeans,而利用聚类算法来做异常检测无非是基于3种假设。1、孤立的,无法归属于任何簇的点为异常点。代表的算法有DBSCAN、SNNclustering、FindOutalgorithm、WaveClusterAlgorithm,这类聚类算法的缺点就是如果整个簇是异常的(团伙欺诈),那么就没办法识别出来;2、距离最近簇的距离过远的点为异常点。代表的算法有K-Means、Self-OrganizingMaps(SOM)、GMM,其缺点和第一类一样。3、小簇的点都是异常点。代表的算法有CBLOF、LDCOF、CMGOS。
说到图模型,我们的直观应用就是找异常社区,确实也是这样。基于图模型的异常检测分为孤立点检测和异常群簇检测。这块比较基础的就是最大联通图的应用,通过不同顶点(比如设备ID、IP、地址、手机号等)和关系,把本不相干的信息联通起来,可以用于团伙作案的异常行为,这类的应用比较依赖业务专家经验。
机器学习模型,这里指的是有监督模型,常用的算法有LR、SVM、GBDT、XGBOOST等二分类模型,用于识别异常样本。而深度学习模型,在异常检测领域又叫深度异常检测(deepanomalydetection(DAD)),主要可以分为监督DAD、半监督DAD、非监督DAD和混合DAD。1、监督DAD:对于数据量要求较高,使得该类方法难以获得足够数量的干净样本标签。2、半监督DAD:半监督DAD假设所有的训练样本只有一个标签,即正样本,训练过程学习到正样本的界限,测试时,不属于正样本边界内的就划为异常。3、非监督DAD:比较出名的有Autoencoder,中文名叫自编码器,由Encoder(编码器)和Decoder(解码器)两部分构成,如下图,左边为编码器,它把高维的输入压缩成低维的形式来表示,在此过程中,神经网络会尽量留下有用的信息,去除掉一些不重要的信息和噪声。而右边为解码器,它负责把压缩了的数据再进行还原,努力恢复成原本的样子。如果恢复不了,那就意味着样本不是同一类,可以归纳为异常数据。4、混合DAD:深度学习模型提取特征+SVM进行分类。
深度学习模型常见的有CNN、RNN、LSTM等,另外,如果标签较少,也可以选择利用SMOTE或者GAN来生成一些样本,从而来使用监督DAD,毕竟这类算法的准确率还是会比半监督那些高得多。