异常检测介绍

一、异常检测的基本概念

随着信息技术的快速发展,人们日常生活接触电子产品的频率越来越高,日常出行乘坐飞机、火车或打车,吃饭时订外卖或者餐饮店中扫码点餐等,均需要通过电子产品完成,随之而来的是数据的大量产生,金融机构希望从数据中获取有价值的数据,检测出“异常”的数据,方便他们作出“聪明”的决策。

本文从异常检测定义以及检测方法入手进行研究,最后尝试通过一段代码实现数据的异常检测。

1、异常检测的定义?
异常检测介绍_第1张图片

异常检测(Outlier Detection),是识别与正常数据不同的数据,与预期行为差异大的数据。识别如信用卡欺诈,工业生产异常,网络流里的异常(网络侵入)等问题,针对的是少数的事件。
针对商业分析等领域的时间序列数据,Prophet 可以进行很好的拟合和预测,但是对于一些周期性或者趋势性不是很强的时间序列,用 Prophet 可能就不合适了。Prophet 提供了一种时序预测的方法,在用户不是很懂时间序列的前提下都可以使用这个工具得到一个能接受的结果。

1.1、异常的类别?

点异常(point anomalies)指的是少数个体实例是异常的,大多数个体实例是正常的,例如正常人与病人的健康指标;

条件异常(conditional anomalies),又称上下文异常,指的是在特定情境下个体实例是异常的,在其他情境下都是正常的,例如在特定时间下的温度突然上升或下降,在特定场景中的快速信用卡交易;

群体异常(group anomalies)指的是在群体集合中的个体实例出现异常的情况,而该个体实例自身可能不是异常,在入侵或欺诈检测等应用中,离群点对应于多个数据点的序列,而不是单个数据点。例如社交网络中虚假账号形成的集合作为群体异常子集,但子集中的个体节点可能与真实账号一样正常。

1.2、异常检测任务分类?

有监督:训练集的正例和反例均有标签

无监督:训练集无标签

半监督:在训练集中只有正例,异常实例不参与训练

1.3、异常检测场景

  • 故障检测
  • 医疗日常检测
  • 网络入侵检测
  • 欺诈检测
  • 工业异常检测
  • 时间序列异常检测
  • 视频异常检测
  • 日志异常检测

1.4、难点

1.数据量少。异常检测任务通常情况下负样本(异常样本)是比较少的,有时候依赖于人工标签,属于样本不平衡问题。

2.噪音。异常和噪音有时候很难分清。

二、异常检测的基本方法

2.1、基础方法

2.1.1、基于统计学的方法

统计学方法对数据的正常性做出假定。**它们假定正常的数据对象由一个统计模型产生,而不遵守该模型的数据是异常点。**统计学方法的有效性高度依赖于对给定数据所做的统计模型假定是否成立。

2.1.2、线性模型

典型的如PCA方法,Principle Component Analysis是主成分分析,简称PCA。它的应用场景是对数据集进行降维。降维后的数据能够最大程度地保留原始数据的特征(以数据协方差为衡量标准)。其原理是通过构造一个新的特征空间,把原数据映射到这个新的低维空间里。PCA可以提高数据的计算性能,并且缓解"高维灾难"。

2.1.3、基于邻近度的方法

这类算法适用于数据点的聚集程度高、离群点较少的情况。同时,因为相似度算法通常需要对每一个数据分别进行相应计算,所以这类算法通常计算量大,不太适用于数据量大、维度高的数据。

基于相似度的检测方法大致可以分为三类:

  • 基于集群(簇)的检测,如DBSCAN等聚类算法。
    聚类算法是将数据点划分为一个个相对密集的“簇”,而那些不能被归为某个簇的点,则被视作离群点。这类算法对簇个数的选择高度敏感,数量选择不当可能造成较多正常值被划为离群点或成小簇的离群点被归为正常。因此对于每一个数据集需要设置特定的参数,才可以保证聚类的效果,在数据集之间的通用性较差。聚类的主要目的通常是为了寻找成簇的数据,而将异常值和噪声一同作为无价值的数据而忽略或丢弃,在专门的异常点检测中使用较少。

  • 基于距离的度量,如k近邻算法。

    k近邻算法的基本思路是对每一个点,计算其与最近k个相邻点的距离,通过距离的大小来判断它是否为离群点。在这里,离群距离大小对k的取值高度敏感。如果k太小(例如1),则少量的邻近离群点可能导致较低的离群点得分;如果k太大,则点数少于k的簇中所有的对象可能都成了离群点。为了使模型更加稳定,距离值的计算通常使用k个最近邻的平均距离。

  • 基于密度的度量,如LOF(局部离群因子)算法。

    局部离群因子(LOF)算法与k近邻类似,不同的是它以相对于其邻居的局部密度偏差而不是距离来进行度量。它将相邻点之间的距离进一步转化为“邻域”,从而得到邻域中点的数量(即密度),认为密度远低于其邻居的样本为异常值。

    2.2、集成方法

    集成是提高数据挖掘算法精度的常用方法。集成方法将多个算法或多个基检测器的输出结合起来。其基本思想是一些算法在某些子集上表现很好,一些算法在其他子集上表现很好,然后集成起来使得输出更加鲁棒。集成方法与基于子空间方法有着天然的相似性,子空间与不同的点集相关,而集成方法使用基检测器来探索不同维度的子集,将这些基学习器集合起来。

    常用的集成方法有Feature bagging,孤立森林等。

    2.3、机器学习

    在有标签的情况下,可以使用树模型(gbdt,xgboost等)进行分类,缺点是异常检测场景下数据标签是不均衡的,但是利用机器学习算法的好处是可以构造不同特征。
    使用机器学习对某应用软件运行过程中产生的时间序列的状态数据进行异常检测,使用prophet工具进行预测。
    prophet 所做的事情就是:

输入已知的时间序列的时间戳和相应的值;
输入需要预测的时间序列的长度;
输出未来的时间序列走势。
输出结果可以提供必要的统计指标,包括拟合曲线,上界和下界等。
就一般情况而言,时间序列的离线存储格式为时间戳和值这种格式,更多的话可以提供时间序列的 ID,标签等内容。因此,离线存储的时间序列通常都是以下的形式。其中date 指的是具体的时间戳,category 指的是某条特定的时间序列 id,value 指的是在 date 下这个 category 时间序列的取值,label 指的是人工标记的标签(‘0’ 表示异常,'1‘ 表示正常,‘unknown’ 表示没有标记或者人工判断不清)。

参考来源:

[1] 《Outlier Analysis》——Charu C. Aggarwal

[2] https://zhuanlan.zhihu.com/p/260651151

[3] https://gitee.com/datawhalechina/team-learning-data-mining/blob/master/AnomalyDetection/%E4%B8%80%E3%80%81%E6%A6%82%E8%BF%B0.md
[4] https://zhuanlan.zhihu.com/p/52330017

你可能感兴趣的:(自然语言处理,数据挖掘,机器学习)