1. 异常检测简介

异常检测,它的任务是发现与大部分其他对象不同的对象,我们称为异常对象。异常检测算法已经广泛应用于电信、互联网和信用卡的诈骗检测、贷款审批、电子商务、网络入侵和天气预报等领域。这些异常对象的主要成因有:来源于不同的模式、自然变异、数据测量以及随机误差等。而常见的异常检测算法都是针对独立的数据点进行异常检测,此时异常检测又称为离群点检测。而在序列数据的异常检测过程中,我们既可以直接使用对序列进行异常检测的算法,也可以先对序列数据进行特征提取然后转化为传统的离群点检测。

2. 基本的离群点检测算法

离群点检测方法 方法描述 方法特点
基于统计 大部分的基于统计的离群点检测方法是构建一个概率分布模型,并计算对象符合该模型的概率,把具有低概率的对象视为离群点 基于统计模型的离群点检测方法的前提是必须知道数据集服从什么分布;而对于高维的数据,可能每一维度服从的分布都不太一致,所以通常对高维数据来讲通常效果较差。
基于邻近度 通常可以在数据对象之间定义邻近性度量,把远离大部分点的对象视为离群点。 算法假定离群点是离散的,低维数据我们可以作图观察,而高维数据我们无法观察,所以难以确定有效的参数和全局阈值,效果较差。
基于密度 考虑到数据集可能存在不同密度区域这一事实,从基于密度的观点分析,离群点是在低密度区域中的对象。 算法假定离群点存在密度较低的区域,具有全局的阈值,对参数选择敏感。
基于聚类 一种利用聚类检测离群点的方法是直接丢弃远离其他簇的小簇;另一种是对数据点属于簇的程度进行评价,去除得分较低的点。 聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大,对数据的可分类性要求较高

3. 序列数据的异常检测算法

3.1 序列数据的异常分类

 

异常类别名称

异常描述

异常图形

语境异常点

此种异常为序列数据中的点异常,语境异常点一定是处在序列数据的上下文中的异常点,如右图(横坐标代表时间,纵坐标代表温度),t1处和t2处的取值是一样的,但是t2属于异常点,而t1是正常的温度

异常子序列

如右图所示,异常的子序列就是红色部分,顾名思义,就是子序列的方式与整体序列的模式大不相同。

异常序列-对比于基础序列

此种是给出一个基础的序列,判断测试序列与基础序列相比是否异常。如右图左部分是基础序列,右部分是测试序列,红色序列模式大不相同所以是异常序列。

3.2 序列异常检测的挑战

1)异常子序列的长度难以有效确定

2)异常未在训练集中出现

3)序列经常存在比较大的噪声,会产生像离群点检测一样的淹没效应(异常点和正常点的距离很小,甚至难以分别)以及掩蔽效应(异常点增多,导致其密度增大)

3.3 序列异常检测的预处理-数据转换常见方式

1)聚合数据;常见的操作有 Piecewise Aggregate Approximation(PAA)以及其变体 Adaptive piecewise constant approximation(APCA)

2)离散化;与我们常见的数据离散化方式一致

3)基于信号处理的;常见的如傅里叶变换、小波变换、Haar变换等

3.4 序列异常检测常见的方式

序列异常检测方法 方法描述 方法特点
基于窗口 此方法将序列分为具体的固定长度的窗口来进行检测 窗口的大小需要谨慎的选择,一定要能覆盖到异常序列,不然检测效果会比较差。
基于邻近度 此方法使用邻近度来衡量序列数据之间的距离,方法假设异常数据在此度量下是远离正常数据的 此方法的预测效果极大的依靠我们设计的邻近度度量,PS:针对序列数据来讲,DTW是一种强大的衡量序列数据距离的方法。
基于预测 此种方法通过预测数据,让后将预测数据与真实数据对比偏差较大的市委异常 基于预测的方法,比较适用于异常点的检测,如果针对一个子序列,预测的时间过长,难以达到有效精度会影响检测的效果。

4. 异常检测中的大杀器-iForest

4.1 iForest 异常检测的原理

iForest(孤立森林)的原理和常见的异常检测算法一样直观上非常容易理解,iForest像随机森林一样也是由大量的树构成,简称iTree。iTree的构建过程是每次随机选一个特征,然后随机在特征的最大值和最小值之间选择一个分界值,然后对数据进行二叉划分,不断的递归下去,直到不能够进行划分为止,就构造了一颗二叉树-iTree。而进行离群点判断时,我们会发现离群点在iTree树的深度更浅。如上图所示,正常点xi需要多次划分才能定位,而异常点比较少的划分就可以定位。

如上图所示,随着iTree树的个数的增加,正常点和离群点的树的平均深度都快速收敛,而且正常点的树的深度明显更大。

4.2 iForest 异常检测的优势

1)高效,尤其在线的检测只需要遍历整个iForest既可得到结果。

2)自适应,与传统基于密度或者距离的异常检测算法不同,它们的阈值全部是全局的阈值,所以在异常点局部密度较大时会失效,而iTree在每次对二叉树进行划分时,都是在局部的最大值和最小值之间随机选值,也就是说每次划分的取值区间是根据局部自适应的,这让iForest变得鲁棒、强大。


参考文献:

《python 数据分析与挖掘实战》张良均 等; 书籍

《外卖订单量预测异常报警模型实践》东杰; 美团技术团队博客 链接:https://tech.meituan.com/order-holtwinter.html

《Introduction to Anomaly Detection》Pramit Choudhary; datascience blog链接:https://www.datascience.com/blog/intro-to-anomaly-detection-learn-data-science-tutorials

《Outlier detection with several methods》;sklearn doc 链接:http://scikit-learn.org/stable/auto_examples/covariance/plot_outlier_detection.html#sphx-glr-auto-examples-covariance-plot-outlier-detection-py

《Anomaly Detection of Time Series》Deepthi Cheboli;硕士论文

《Isolation-based Anomaly Detection》周志华 等;期刊论文

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/h4565445654/article/details/77273608

离群点检测与序列数据异常检测以及异常检测大杀器-iForest的更多相关文章

  1. 如何利用AI识别未知——加入未知类(不太靠谱),检测待识别数据和已知样本数据的匹配程度(例如使用CNN降维,再用knn类似距离来实现),将问题转化为特征搜索问题而非决策问题,使用HTM算法(记忆+模式匹配预测就是智能),GAN异常检测,RBF

    https://www.researchgate.net/post/How_to_determine_unknown_class_using_neural_network 里面有讨论,说是用rbf神经 ...

  2. paip.检测信用卡账单数据的正确性算法

    paip.检测信用卡账单数据的正确性算法 主要3点: //1.重点检测.大钱记录 //2.检测遗漏记录 //3.排除双唇记录. //4.试着cls share,改变错误的cls. 作者Attilax ...

  3. ueditor 添加微软雅黑字体 异常“从客户端中检测到有潜在危险的 request.form值”,解决

    使用ueditor往数据库添加文本内容时,如果字体有css样式, <,>," 这些字符会导致报出异常信息:从客户端中检测到有潜在危险的 request.form值 因为这些字符有 ...

  4. 目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练

    将目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练. import xml.etree.ElementTree as ET import numpy as ...

  5. SpringMVC由浅入深day02_5数据回显_6异常处理器

    5 数据回显 5.1 什么数据回显 表单提交失败需要再回到表单页面重新填写,原来提交的数据需要重新在页面上显示. 5.2 pojo数据回显方法 1.springmvc默认对pojo数据进行回显. po ...

  6. TensorFlow TFRecord封装不定长的序列数据(文本)

    TensorFlow TFRecord封装不定长的序列数据(文本) 在实验室环境中,通常数据都是一次性导入内存的,然后使用手工写的数据mini-batch函数来切分数据,但是这样的做法在海量数据下显得 ...

  7. rancher导入k8s集群后添加监控无数据

    1.日志报错 rancher导入k8s集群后添加监控无数据,rancher日志报错: k8s.io/kube-state-metrics/pkg/collectors/builder.go:: Fai ...

  8. @Valid 数据校验 + 自定义全局异常信息

    关于javax.validation.Validator校验的使用 对于要校验的实体类:其需要校验的字段上需要添加注解 实际例子 使用:首先要拿到 validator的子类 Validator val ...

  9. Python的序列数据和变量

    本篇内容涉及字符串.列表.元组.Python中的报错,以及变量本质,包括引用计数技术 该篇只为抛砖引玉,其内容来自Python学习中总结,另外感谢李老师的教导和Python班同学们的帮助 附上李老师和 ...

随机推荐

  1. Hadoop服务库与事件库的使用及其工作流程

    Hadoop服务库与事件库的使用及其工作流程   Hadoop服务库: YARN采用了基于服务的对象管理模型,主要特点有: 被服务化的对象分4个状态:NOTINITED,INITED,STARTED, ...

  2. SQL 必知必会·笔记<9>使用子查询

    子查询(subquery),即嵌套在其他查询中的查询. 1. 利用子查询进行过滤 SELECT 语句中,子查询总是从内向外处理.示例: SELECT cust_name, cust_contact F ...

  3. python机器学习笔记 ID3决策树算法实战

    前面学习了决策树的算法原理,这里继续对代码进行深入学习,并掌握ID3的算法实践过程. ID3算法是一种贪心算法,用来构造决策树,ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性 ...

  4. 将tomcat添加为linux系统服务

    前言 在博客 --> virtualBox安装centos,并搭建tomcat中,讲到了centos下搭建tomcat环境,发现启动tomcat不是那么方便,要是忘记路径了,那就更麻烦了!当然了 ...

  5. BBWebImage 设计思路

    BBWebImage 设计思路 BBWebImage 是高性能 Swift 图片组件,用于图片下载.缓存.编解码.编辑与展示. GitHub 地址: https://github.com/Silenc ...

  6. MySQL中MyISAM和InnoDB两种主流存储引擎的特点

    一.数据库引擎(Engines)的概念 MySQ5.6L的架构图: MySQL的存储引擎全称为(Pluggable Storage Engines)插件式存储引擎.MySQL的所有逻辑概念,包括SQL ...

  7. python程序编写中常见错误

    1,NameError语法错误 s还没定义,给s赋值就行了 2,IndexError 索引错误 对于列表l1来说,只有4个元素,所以l1的Index只能是0-3,当你所输入的Index不在这范围,就会 ...

  8. webpack 学习总结demo

    github源码地址 https://github.com/ghshuo/webpack-demo webpack介绍 webpack 是一个现代 JavaScript 应用程序的静态模块打包器(mo ...

  9. angularjs小练习(分别通过ng-repeat和ng-option动态生成select下拉框)

    本次做一个简单的关于动态生成select的练习 在实现上有两种方式: 其一.通过ng-repeat来实现 其二.通过ng-option来实现 在页面效果上,两种实现的效果都一样 但是在数据选择的数据从 ...

  10. [PHP] 算法-快速排序的PHP实现

    快速排序: 1.基于二分的思想 2.第一个作为基准数,左右各一个指针,同时扫描,右边先走,找到比基准数小的停下 左边再走,找到比基准数大的停下,左右交换 3.当左右相遇的时候,把当前的和基准数调换,递 ...