异常检测算法

异常检测算法分类及经典模型概览 - 知乎

维基百科:在数据挖掘中,异常检测(英语:anomaly detection)对不符合预期模式或数据集中其他项目的项目、事件或观测值的识别。 通常异常项目会转变成银行欺诈、结构缺陷、医疗问题、文本错误等类型的问题。 异常也被称为离群值、新奇、噪声、偏差和例外。 异常检测是指在数据中发现不符合预期行为模式的数据的问题

异常检测(Anomaly Detection 或 Outlier Detection)指的是通过数据挖掘手段识别数据中的“异常点”,常见的应用场景包括:

金融领域:从金融数据中识别”欺诈案例“,如识别信用卡申请欺诈、虚假信贷等;
网络安全:从流量数据中找出”入侵者“,并识别新的网络入侵模式;
电商领域:从交易数据中识别”恶意买家“,如羊毛党、恶意刷屏团伙;
生态灾难预警:基于对风速、降雨量、气温等指标的预测,判断未来可能出现的极端天气;
工业界:可通过异常检测手段进行工业产品的瑕疵检测,代替人眼进行测量和判断。

异常点有哪几种类型?

  • 单点异常(Global Outliers):也可以称为全局异常,即某个点与全局大多数点都不一样,那么这个点构成了单点异常。
  • 上下文异常(Contextual Outliers):这类异常多为时间序列数据中的异常,即某个时间点的表现与前后时间段内存在较大的差异,那么该异常为一个上下文异常点。例如,在某个温带城市夏天的气温时序数据中,其中有一天温度为10℃,而前后的气温都在25-35℃的范围,那么这一天的气温就可以说是一个上下文异常。
  • 集体异常(Collective Outliers):这类异常是由多个对象组合构成的,即单独看某个个体可能并不存在异常,但这些个体同时出现,则构成了一种异常。集体异常可能存在多种组成方式,可能是由若干个单点组成的,也可能由几个序列组成。想象这样一个场景,某小区某天有一户人家搬家了,这是一件很正常的事,但如果同一天有10户同时搬家了,那就构成了集体异常,显然这不是一个正常小区会时常发生的事情。 

在异常检测中经常遇到哪些困难?

  1. 在大多数实际的场景中,数据本身是没有标签的,也存在一些数据集有标签,但标签的可信度非常低,导致放入模型后效果很差,这就导致我们无法直接使用一些成熟的有监督学习方法。
  2. 常常存在噪音和异常点混杂在一起的情况,难以区分。
  3. 在一些欺诈检测的场景中,多种诈骗数据都混在一起,很难区分不同类型的诈骗,因为我们也不了解每种诈骗的具体定义。

目前比较常用的手段是,将无监督学习方法和专家经验相结合基于无监督学习得到检测结果,并让领域专家基于检测结果给出反馈,以便于我们及时调整模型,反复进行迭代,最终得到一个越来越准确的模型。

到这里,我们都发现了,很多风控场景中最重要的一环就是:专家经验

异常检测算法的分类:

  • 时序相关 VS 时序独立
  • 全局检测 VS 局部检测
  • 输出形式:标签 VS 异常分数
  • 根据不同的模型特征

时序相关 VS 时序独立

首先可以根据该场景的异常是否与时间维度相关。在时序相关问题中,我们假设异常的发生与时间的变化相关,比如一个人平时的信用卡消费约为每月5000元,但11月的消费达到了10000元,那这种异常的出现就明显与时间维度相关,可能是因为”万恶“的双十一。

而在时序独立问题中,我们假设时间的变化对异常是否发生是无影响的,在后续的分析建模中,也就不会代入时间维度。

全局检测 VS 局部检测

在全局检测方法中,针对每个点进行检测时,是以其余全部点作为参考对象的,其基本假设是正常点的分布很集中,而异常点分布在离集中区域较远的地方。这类方法的缺点是,在针对每个点进行检测时,其他的异常点也在参考集内,这可能会导致结果可能存在一定偏差。

而局部检测方法仅以部分点组成的子集作为参考对象,基于的假设是,正常点中可能存在多种不同的模式,与这些模式均不同的少数点为异常点。该类方法在使用过程中的缺点是,参考子集的选取比较困难。

输出形式:标签 VS 异常分数

这种分类方式是根据模型的输出形式,即直接输出标签还是异常分数。输出标签的方法比较简单直观,可以直接根据模型输出的结果判断每个点是否为异常点。

使用可以输出异常得分的模型,我们可以进一步看哪些点的异常程度更高,也可以根据需要设定阈值,比如设定百分比,找出异常程度排在前10%的异常点。

根据不同的模型特征

最后,还可以根据模型本身的特点进行分类,大致可以分为以下几种:

  • 统计检验方法
  • 基于深度的方法
  • 基于偏差的方法
  • 基于距离的方法
  • 基于密度的方法
  • 深度学习方法

****************************************************************************************************************************************************************

26.异常检测---孤立森林 | one-class SVM - nxf_rabbit75 - 博客园

常见的算法:概率与极值分析(假设数据分布并找到超过中心特定范围的数据),线性模型(如PCA计算重构误差或者分析协方差矩阵的),有相似度模型(如ABOD,LOF、LOCI、LoOP和kNN等),有决策树集成(Isolation Forest、Feature Bagging),有基于SVM的方法如One-class SVM,也有基于神经网络的算法(用auto-encoder计算重构误差)等各种算法。

异常值检测技术:

  • 数字异常值|Numeric Outlier   数字异常值方法是一维特征空间中最简单的非参数异常值检测方法,异常值是通过IQR(InterQuartile Range)计算得的。(箱线图)

计算第一和第三四分位数(Q1、Q3),异常值是位于四分位数范围之外的数据点x i:

  • Z-score  Z-score是一维或低维特征空间中的参数异常检测方法。一个观测的z分数或标准分数是一个度量,表示一个数据点偏离样本均值的多少个标准差。该技术假定数据是高斯分布(高斯分布就是正态分布),异常值是分布尾部的数据点,因此远离数据的平均值。距离的远近取决于使用公式计算的归一化数据点z i的设定阈值Zthr: 

其中xi是一个数据点,μ是所有点xi的平均值,δ是所有点xi的标准偏差。

【机器学习】密度聚类DBSCAN与异常检测_littlemichelle-CSDN博客_dbscan异常检测

基于密度的聚类,(我一直很迷惑密度和距离有什么区别),其实是设定一个邻域,在这个邻域内可达吧。下面的图很清晰。 

preview

 算法的流程:1.找到任意一个核心点,对该核心点进行扩充;2.扩充方法是寻找从该核心点出发的所有密度相连的数据点;3遍历该核心的邻域内所有核心点,寻找与这些数据点密度相连的点。

DBSCAN的主要优点有:

  1. 可以对任意形状的稠密数据集进行聚类。
  2. 可以在聚类的同时发现异常点,对数据集中的异常点不敏感
  3. 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。

DBSCAN的主要缺点有:

  1. 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN不适合。
  2. 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
  3. 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

K均值很难处理非球形的簇和不同大小的簇。 DBSCAN可以处理不同大小或形状的簇,并且不太受噪声和离群点的影响 

该算法基于异常数据的两个特征:(1)异常数据只占少量;(2)异常数据特征值和正常数据差别很大。iForest算法由于简单高效的特点,常用于网络安全中的攻击检测和流量异常等分析。

iForest算法得益于随机森林的思想,与随机森林由大量决策树组成一样,iForest森林也由大量的二叉树组成。iForest中的树叫isolation tree,简称iTree。iTree树和决策树不太一样,其构建过程也比决策树简单,是一个完全随机的过程。

假设数据集有N条数据,构建一颗iTree时,从N条数据中均匀抽样(一般是无放回抽样)出ψ个样本出来,作为这颗树的训练样本。在样本中,随机选一个特征,并在这个特征的所有值范围内(最小值与最大值之间)随机选一个值,对样本进行二叉划分,将样本中小于该值的划分到节点的左边,大于等于该值的划分到节点的右边。由此得到一个分裂条件和左、右两边的数据集,然后分别在左右两边的数据集上重复上面的过程,直到数据集只有一条记录或者达到了树的限定高度。

由于异常数据较小且特征值和正常数据差别很大。因此,构建iTree的时候,异常数据离根更近,而正常数据离根更远。一棵iTree的结果往往不可信,iForest算法通过多次抽取样本,构建多棵二叉树。最后整合所有树的结果,并取平均深度作为最终的输出深度,由此计算数据点的异常分值

preview

IForest目前是异常点检测最常用的算法之一,它的优点非常突出,它具有线性时间复杂度。因为是随机森林的方法,所以可以用在含有海量数据的数据集上面。通常树的数量越多,算法越稳定。由于每棵树都是互相独立生成的,因此可以部署在大规模分布式系统上来加速运算。对于目前大数据分析的趋势来说,它的好用是有原因的。

但是IForest也有一些缺点,比如不适用于特别高维的数据。由于每次切数据空间都是随机选取一个维度和该维度的随机一个特征,建完树后仍然有大量的维度没有被使用,导致算法可靠性降低。此时推荐降维后使用,或者考虑使用One Class SVM。

  • 线性模型(linear models)

假设数据在低维空间上有嵌入,那么无法、或者在低维空间投射后表现不好的数据可以认为是离群点。举个简单的例子,PCA可以用于做异常检测,一种方法就是找到k个特征向量(eigenvector),并计算每个样本再经过这k个特征向量投射后的重建误差(reconstruction error),而正常点的重建误差应该小于异常点。同理,也可以计算每个样本到这k个选特征向量所构成的超空间的加权欧氏距离(特征值越小权重越大)。在相似的思路下,我们也可以直接对协方差矩阵进行分析,并把样本的马氏距离(在考虑特征间关系时样本到分布中心的距离)作为样本的异常度,而这种方法也可以被理解为一种软性(Soft PCA)。同时,另一种经典算法One-class SVM也一般被归类为线性模型。

  • one-class SVM(单分类算法One Class Learning)(无监督)

寻找一个超平面将样本中的正例圈出来,预测就是用这个超平面做决策,在圈内的样本就认为是正样本。由于核函数计算比较耗时,在海量数据的场景用的并不多

它的训练集不应该掺杂异常点,因为模型可能会去匹配这些异常点

  • Autoencoder

Autoencoder,中文称作自编码器,是一种无监督式学习模型。本质上它使用了一个神经网络来产生一个高维输入的低维表示。Autoencoder与主成分分析PCA类似,但是Autoencoder在使用非线性激活函数时克服了PCA线性的限制。

Autoencoder包含两个主要的部分,encoder(编码器)和 decoder(解码器)。Encoder的作用是用来发现给定数据的压缩表示,decoder是用来重建原始输入。在训练时,decoder 强迫 autoencoder 选择最有信息量的特征,最终保存在压缩表示中。最终压缩后的表示就在中间的coder层当中。

以下图为例,原始数据的维度是10,encoder和decoder分别有两层,中间的coder共有3个节点,也就是说原始数据被降到了只有3维。Decoder根据降维后的数据再重建原始数据,重新得到10维的输出。从Input到Ouptut的这个过程中,autoencoder实际上也起到了降噪的作用。

preview

优化目标则是通过最小化重构误差来同时优化encoder和decoder,从而学习得到针对样本输入x的抽象特征表示z。

AutoEncoder在优化过程中无需使用样本的label,本质上是把样本的输入同时作为神经网络的输入和输出,通过最小化重构误差希望学习到样本的抽象特征表示z。这种无监督的优化方式大大提升了模型的通用性。

preview

案例:仅有部分样本有标签,剩下大部分样本都无标签;异常样本的类型不止一种,往往是多种异常情形同时存在;有标签的异常样本可能并没有区分出不同的异常类型;

WWW 2018论文分享| 基于部分可见异常样本的异常检测问题

这个算法的主要流程分成两个阶段。在第一阶段,对已知异常样本进行聚类,并从未标记样本中挖掘潜在异常样本以及可靠正常样本;第二阶段,基于以上的样本,构建带权重的多分类模型

preview

  • 1
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值