风控ML[14] | 风控中的异常检测原理与应用

2022-04-12 15:05:45 浏览数 (1)

今天来介绍一下风控中的异常检测,从最基础的概念开始讲起,因为本人对这块的内容平时工作也做得不多,更多滴偏向于“纸上谈兵”,有什么说得不对的地方,也欢迎各位朋友指正~谢谢。

00 Index

01 异常检测的概念 02 异常检测的难点 03 异常检测的分类及常见算法

01 异常检测的概念

异常检测(Anomaly Detection 或 Outlier Detection),又称为离群点检测,在我们风控领域很多地方都会用到,比如黑产对抗、团伙欺诈识别、羊毛党识别、反洗钱、识别欺诈贷款等等,对我们的风险控制工作,有着不可或缺的作用。抽象来说,就是需要从一堆数据中,找到那个“邻舍不同”(粤语)的点,并能够给出合理的判断和解释。

02 异常检测的难点

为什么说异常检测很难呢?主要有几个原因: 1)异常点和噪声会混杂在一起,机器难以具体识别开来; 2)现实中很少有异常点的标签,因为标签越多也就意味着遇到过的异常越多,也不符合常识认知; 3)对于标签的定义也是很难,比如1个金融场景,欺诈的定义有太多,比如薅羊毛的、团伙骗贷的、个人骗贷的,基本上都混合在一起,不利于有监督模型的开展。

所以很多时候我们在操作的过程中,会先用无监督方法挖掘出异常样本,再基于这些样本去做有监督模型挖掘更多的异常点,这中间也多了一层转化,所以准确率和置信度上也有一定的下滑。

03 异常检测的分类及常见算法

在开始将异常检测算法的分类前,我们先来了解下异常点的分类:

1.点异常:个体表现异常与大众。 2.上下文异常:一般在时间序列中表现,某个时间点的指标相对前后时间段有较大波动的。比如某个中午交易量异常。 3.集合异常:某一堆的数据集合,整体表现异常,但看单个个体又没那么异常的,比如说地方性团伙骗贷。

好了,讲完了异常点的分类,来讲一下异常检测算法的分类吧。

0301 基于统计检验与分布算法

说起异常点检测,最容易想到的就是这个正态分布图了,3倍方差之外的数据属于异常数据。不过,我们切莫不能一上来就用这个东西来检测异常点,要用这个方法,首先要确定数据的分布符合正态(高斯)分布。不过,如果你的数据一开始不是正态分布,可以试试做一下函数变换,比如log变换、平方变换、指数变换等,使其变成正态分布,再来使用这个方法。

第二个会想到的是箱线图了。它是在1977年由美国统计学家John Tukey发明,分析数据需要为定量数据,通过它可以直观的探索数据特征。我们可以从箱线图中直观地看到两点:数据离散分布情况以及离群点。

第三个会想到的,可能就是卡方检验了,卡方检验属于非参数检验,由于非参检验不存在具体参数和总体正态分布的假设,所以有时被称为自由分布检验。它的原理就是检验统计量来对比期望结果与实际结果的差异,最终根据显著性水平确定卡方值,从而来判断事情发生的概率,如果概率很低,却发生了,那就是异常了! 公式如下:

其中,A是实际频数,E是期望频数。

0302 基于时间序列的算法

时间序列,我们最先用到的异常检测方法应该就是同比环比了,当我们的时序图是呈现平稳的周期性规律时候,我们可以通过来计算同比(环比)值来判断异常情况。 当然,也可以基于ARIMA、ARMA等统计模型,当然可以直接用最简单的移动平均,用于标识异常值。 更进阶点的,会用到时间序列分解。利用时间序列分解算法(STL、STAMP、X12-ARIMA)将时间序列分成3条拟合曲线:Trend(趋势)、Seasonal(周期)和Residual(残差)。然后我们会基于Residual曲线做离群点检测。

0303 基于距离的算法

基于距离的算法,其原理就是计算每个点与周围点的距离,从而来判断这个点是否离群,比如说我们熟悉的KNN和Kmeans,回顾一下:

KNN是分类算法,而K-Means是聚类算法; KNN属于监督学习,而K-Means属于无监督学习;

KNN的K是指选择与目标最近k个数量样本来进行预测,可以用多次交叉检验迭代对比后选择最优。而Kmeans的K是指簇中心数量,也就是聚类的数量,可以用肘部法来寻找一个最优的拐点,手肘法是个经验学习,所以不够自动化,所以也有了Gap Statistic方法。

0304 基于密度的算法

基于距离的算法显然可以解决一部分问题,但有一些场景还是没办法很好的识别,比如说数据分布极其不均匀,如果采用距离来衡量的话(因为距离说一个全局变量),可能没法准确识别出异常情况。所以,就有了基于密度的异常点检测算法,它的原理就是计算异常点的周围密度和其临近点的周围密度,基于这两个密度值计算出相对密度,作为异常分数。即相对密度越大,异常程度越高。常见的算法有LOF、COF、ODIN、MDEF、INFLO、LoOP、LOCI、aLOCI等。

0305 基于深度的算法

孤立森林(Isolation Forest) 就是基于深度的一个树模型算法。08年由周志华和刘飞老师等提出的1个不基于距离或者密度等指标区描述样本与其他样本的差异,而是通过不断地分裂,从直观上就可以找到“孤立”的点。具体做法就是随机选择m个特征,通过在所选特征的最大值和最小值之间随机选择一个值来分割数据点,递归地重复观测点,直到所有的观察值被孤立。其算法原理就是异常样本更容易快速落入叶子结点或者说,异常样本在决策树上,距离根节点更近

0306 基于聚类的算法

聚类算法我们遇过了很多,比如上面提到的KMeans,而利用聚类算法来做异常检测无非是基于3种假设。 1、孤立的,无法归属于任何簇的点为异常点。代表的算法有DBSCAN、SNN clustering、FindOut algorithm、WaveCluster Algorithm,这类聚类算法的缺点就是如果整个簇是异常的(团伙欺诈),那么就没办法识别出来; 2、距离最近簇的距离过远的点为异常点。代表的算法有K-Means、Self-Organizing Maps(SOM)、GMM,其缺点和第一类一样。 3、小簇的点都是异常点。代表的算法有CBLOF、LDCOF、CMGOS。

0307 基于图模型的算法

说到图模型,我们的直观应用就是找异常社区,确实也是这样。基于图模型的异常检测分为孤立点检测和异常群簇检测。这块比较基础的就是最大联通图的应用,通过不同顶点(比如设备ID、IP、地址、手机号等)和关系,把本不相干的信息联通起来,可以用于团伙作案的异常行为,这类的应用比较依赖业务专家经验。

还有另一种,标签传播,该算法根据图的拓扑结构,进行子图的划分,使得子图内部节点的连接较多,子图之间的连接较少。其算法基本思路是节点的标签依赖其邻居节点的标签信息,影响程度由节点相似度决定,通过传播迭代更新达到稳定。通过这类算法,也可以把一些我们意想不到的点聚类在一起,用于业务分析。 更多的高级算法,还有OddBall、LOCKINFER、GraphRAD等,具体我也不熟,后续可以学习之后再来分享一下。

0308 基于机器学习和深度学习的算法

机器学习模型,这里指的是有监督模型,常用的算法有LR、SVM、GBDT、XGBOOST等二分类模型,用于识别异常样本。而深度学习模型,在异常检测领域又叫深度异常检测(deep anomaly detection(DAD)),主要可以分为监督DAD、半监督DAD、非监督DAD和混合DAD。 1、监督DAD:对于数据量要求较高,使得该类方法难以获得足够数量的干净样本标签。 2、半监督DAD:半监督DAD假设所有的训练样本只有一个标签,即正样本,训练过程学习到正样本的界限,测试时,不属于正样本边界内的就划为异常。 3、非监督DAD:比较出名的有Autoencoder,中文名叫自编码器,由Encoder(编码器)和Decoder(解码器)两部分构成,如下图,左边为编码器,它把高维的输入压缩成低维的形式来表示,在此过程中,神经网络会尽量留下有用的信息,去除掉一些不重要的信息和噪声。而右边为解码器,它负责把压缩了的数据再进行还原,努力恢复成原本的样子。如果恢复不了,那就意味着样本不是同一类,可以归纳为异常数据。 4、混合DAD:深度学习模型提取特征 SVM进行分类。

深度学习模型常见的有CNN、RNN、LSTM等,另外,如果标签较少,也可以选择利用SMOTE或者GAN来生成一些样本,从而来使用监督DAD,毕竟这类算法的准确率还是会比半监督那些高得多。

Reference

[1] 异常检测算法分类及经典模型概览 https://blog.csdn.net/cyan_soul/article/details/101702066 [2] 异常检测—算法篇 https://blog.csdn.net/weixin_43880935/article/details/95048991 [3] 异常检测算法演变及学习笔记 https://www.cnblogs.com/zhengzhicong/p/12922836.html [4] 异常检测简介:概念与技术 https://zhuanlan.zhihu.com/p/29784187 [5] 一文了解时间序列异常检测 https://www.pianshen.com/article/31332148436/ [6] 基于图的异常检测(一):OddBall https://zhuanlan.zhihu.com/p/69159780 [7] 用于异常检测的深度学习方法综述 https://www.jianshu.com/p/1e8116993490

0 人点赞