基于LSCP集成异常检测框架

--------------------------------------框架1理解---------------------------------------

1. 研究背景

先说说为啥要做这个问题,因为异常检测有三个特点:

  • 无监督:一般没有标签可用
  • 极端的数据不平衡:异常点往往远少于正常点
  • 复杂的模式

在这种前提下,人们一般会使用集成学习来解决这个问题,也就是训练一大堆异常检测模型再去合并。因为我们说到异常检测是无监督,人们一般会同时独立训练模型(像bagging),而非做依赖顺序模型(sequential),因为后者不好评估。所以绝大部分的异常检测集成都是这种并行式的(parallel)。

那么并行式的集成最终也还是需要合并起来。如上图所示,人们会用简单的平均、加权平均或者求最大值来做。但这一类简单粗暴的合并方式有两个问题:

  • 不存在选择的过程(no selection process),因此只能得到平庸的结果
  • 忽视了异常检测的局部性特征

异常检测中的局部性(locality)往往是一个很重要的特性,换句话说就是做density estimation(密度估计),说白了就是对相似性进行度量。我们会认为异常点应该可以被粗略的分为局部异常和全局异常,局部异常指的是在小范围上的密度很低,虽然从全局来看可能趋于正常。全局性异常可能就相反,更在意的是把所有点都考虑进去,观察区别。

不难看出,如果训练一大堆无监督异常检测器,再求个平均,就更多的考虑了全局上的关系因为可能某个检测器能检出这个特性,但在合并过程中被掩盖了。说白了,缺乏选择过程的全局性合并过程会使得合并的价值有所降低,得到稳定却中庸的结果。我们把这一类合并方法叫做 Generic & Global (GG)类合并。

2. 研究目标

我们是否能提出一种新的合并框架,来“选择”适合于每个测试点的基础异常检测模型?

 换句话说,我们是否可以做到“因材施教”,根据不同的 X来选择更适合它的模型们去预测是否属于异常?

3. LSCP框架

Locally Selective Combination in Parallel Outlier Ensembles(LSCP),一个多个异常检测算法的并行集成框架,可以对多个异常检测模型进行集成,提高性能与稳定性。

显然这是可行的,很自然的我们就会想到一种在监督学习中会用的方法Dynamic Classifier Selection (动态分类器选择).

它的根本思想就是,每当我们获得一个新的X进行预测时,先评估一下哪些基学习器(base classifiers)在这个点附近的区域上表现良好(也就是在X的邻近区域上),那我们就更可以相信它会在X上表现良好。所以最简单的就是对于X,找到在它附近的训练数据上表现最好的模型 Ci ,然后输出 Ci(X) 作为X的结果即可。

这种思路其实也很适合异常检测问题,因为考虑“附近区域”就是一种考虑局部关系的方法。所以如果我们可以把DCS移植到异常检测的语境下,那就一箭双雕的解决了“选择”和“局部性”两个问题。

但和分类问题不同的是,无监督的异常检测面临两个困难:

  • 没有标签,我们怎么评估基模型在X临近区域上的表现呢?
  • 我们该选择一个还是多个模型作为最终输出结果呢?如果上一步的评估不是非常准确,这一步会不会有很大的风险?

针对这两个问题,我们设计了几个方法(tricks)来解决:

  1. 生成伪标签来进行评估。我们使用所有基学习器的输出结果的{均值,最大值}作为伪标签。衡量模型在小范围上的表现就是求在那个区域上 Di 的输出和伪标签之间的Pearson Correlation。
  2. 定义X的附近区域(邻居)时采用了一种随机K近邻的方法来提高稳定性,降低维数灾难的影响
  3. 在X的最终结果时,选择多个表现优异的模型进行二次合并而非依赖于单一的模型输出,提高表现。

3.3部分修正为:local region definition for each test instance, find its nn in X_train? 

MOM不就是全局max,同理AOA不就是全局平均

于是最终的LSCP框架长这个样子,共有四个部分(见上图):

  1. 训练多个基础异常检测器(Base Detector Generation)
  2. 生成伪标签用于评估(Pseudo Ground Truth)
  3. 对于每个测试点生成局部空间,也就是近邻(Local Region Definition)
  4. 模型选择与合并(Model Selection and Combination),即对所有的基模型在我们找到的局部空间上用生产的伪标签进行评估,和伪标签在局部空间上Pearson大的被选做最终输出模型。

在以上一系列过程中,为了提升效果,我们做了两种交叉选择:

  1. 用均值(A)或者最大值(M)作为伪标签
  2. 最终依赖于单个最优模型,还是二次合并选择 s个模型再合并一次

最终得到了4个LSCP模型,分别是LSCP_ALSCP_MLSCP_AOMLSCP_MOA,前两个只选择1个模型,而后两个会有二次合并过程。

4. 实验结果

 我们对提出的4种LSCP方法与传统的7种合并方法在20个异常检测数据上进行对比(ROC和mAP),我们发现其中的LSCP_AOM的效果非常稳定,在大部分情况下都有不俗的表现。我们有一些猜想,大家可以到文章中去细读。

大致的理论是是LSCP_AOM使用了最大值最为伪标签,最大程度的保留了异常的特性,而在评估后的第二轮合并降低了伪标签带来的随机性和方差,提升了模型的可靠性。

5. 模型讨论与分析

无监督学习最大的问题就是假设很多,难以验证。我们一般追求泛化比较好的方法,在绝大部分情况下有效。但这仅仅是一种希望。比如LSCP也会失效,尤其是如果异常的分布无法在局部区域上形成模式(pattern),下图(将真实数据用t-SNE降维)中的左和中都很适合LSCP,但右图的数据因为异常过于分散,没有形成局部特征,LSCP的表现就并不理想

因此不难看出,我们提出的框架依然需要使用者有对于数据的良好理解,而不能滥用。

至于后续的研究,还可以做:

  • 更好的伪标签生成
  • 更好的局部区域定义
  • 更复杂的选择方法

--------------------------------------------------------框架2理解--------------------------------------------------------

什么是并行(parallel)的集成?
如果多个模型之间是独立生成的,互不干扰,则能够并行执行,即并行的集成。它的对立面即是另一种集成方式即 —— 顺序(sequential)的集成,即模型之间是相互依赖,需要迭代训练得到的,比如像 boosting 这样的思想,但是由于异常检测属于无监督任务,即没有 ground truth,故无法使用类似的方式。

为何提出 LSCP?解决什么问题?

  • 现有的组合方式不对模型进行选择,导致组合中存在较差的模型会影响组合之后的性能,导致组合之后只能得到一个比较平庸的结果
  • 现在的大部分算法都忽略了数据中的局部特征

一个异常检测模型可能无法涵盖多种离群点的情况,故将多个模型组合起来是一种很好的解决方式。但是异常检测是一种无监督的任务,即数据没有标签,没有 ground truth,故无法像集成有监督模型一样,在集成的过程中,得到误分类的样本或者选择出准确率更高的模型。
现有的模型组合方式,都是不对模型进行选择,最后直接选择所有模型产出的异常分的平均值/最大值等指标作为样本最终的异常分数。但是不对模型进行选择的话,一些性能差的模型,将会影响组合后的模型的性能。
(LSCP 支持组合异构模型,也支持组合同构模型;组合异构模型可以让模型具有多样性,组合同构模型,通过设置不同的超参,也能实现多样性,论文利用组成多个超参不同 LOF 为例)

异常检测可以粗略分为局部异常和全局异常。全局异常即是整理考虑全部数据,找到与大盘数据偏离较远的点,即只有当异常点与全局数据分布差异非常大的时候,效果才比较好。而局部异常包含了部分在局部较异常,局部密度低,而在全局数据中观察较正常的情况。目前大部分算法都是全局异常算法,但是全局特征不能表示数据在局部的异常,所以在异常检测算法中,需要关注局部异常。

LSCP 最后达到的结果?
能够对不同的测试数据,利用不同的 base model 进行训练。即假设共有 10 个 base model,第一个测试数据可以用前三个模型进行,第二个测试数据利用后四个模型进行训练。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值