离群点检测与序列数据异常检测以及异常检测大杀器-iForest
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》周志华 等;期刊论文
离群点检测与序列数据异常检测以及异常检测大杀器-iForest的更多相关文章
- 如何利用AI识别未知——加入未知类(不太靠谱),检测待识别数据和已知样本数据的匹配程度(例如使用CNN降维,再用knn类似距离来实现),将问题转化为特征搜索问题而非决策问题,使用HTM算法(记忆+模式匹配预测就是智能),GAN异常检测,RBF
https://www.researchgate.net/post/How_to_determine_unknown_class_using_neural_network 里面有讨论,说是用rbf神经 ...
- paip.检测信用卡账单数据的正确性算法
paip.检测信用卡账单数据的正确性算法 主要3点: //1.重点检测.大钱记录 //2.检测遗漏记录 //3.排除双唇记录. //4.试着cls share,改变错误的cls. 作者Attilax ...
- ueditor 添加微软雅黑字体 异常“从客户端中检测到有潜在危险的 request.form值”,解决
使用ueditor往数据库添加文本内容时,如果字体有css样式, <,>," 这些字符会导致报出异常信息:从客户端中检测到有潜在危险的 request.form值 因为这些字符有 ...
- 目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练
将目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练. import xml.etree.ElementTree as ET import numpy as ...
- SpringMVC由浅入深day02_5数据回显_6异常处理器
5 数据回显 5.1 什么数据回显 表单提交失败需要再回到表单页面重新填写,原来提交的数据需要重新在页面上显示. 5.2 pojo数据回显方法 1.springmvc默认对pojo数据进行回显. po ...
- TensorFlow TFRecord封装不定长的序列数据(文本)
TensorFlow TFRecord封装不定长的序列数据(文本) 在实验室环境中,通常数据都是一次性导入内存的,然后使用手工写的数据mini-batch函数来切分数据,但是这样的做法在海量数据下显得 ...
- rancher导入k8s集群后添加监控无数据
1.日志报错 rancher导入k8s集群后添加监控无数据,rancher日志报错: k8s.io/kube-state-metrics/pkg/collectors/builder.go:: Fai ...
- @Valid 数据校验 + 自定义全局异常信息
关于javax.validation.Validator校验的使用 对于要校验的实体类:其需要校验的字段上需要添加注解 实际例子 使用:首先要拿到 validator的子类 Validator val ...
- Python的序列数据和变量
本篇内容涉及字符串.列表.元组.Python中的报错,以及变量本质,包括引用计数技术 该篇只为抛砖引玉,其内容来自Python学习中总结,另外感谢李老师的教导和Python班同学们的帮助 附上李老师和 ...
随机推荐
- 通过Anaconda在Ubuntu16.04上安装 TensorFlow(GPU版本)
一. 安装环境 Ubuntu16.04.3 LST GPU: GeForce GTX1070 Python: 3.5 CUDA Toolkit 8.0 GA1 (Sept 2016) cuDNN v6 ...
- c#构造初使化的顺序
这个很基础的知识,但我至今才意识到它.想想也很失败. 直接上代码:很简单 public class Base { ; public Base() { System.Console.WriteLine( ...
- OS开发(2):自定义tabbar | 导航条 | 突显中间按钮
tabbar是放在APP底部的控件,也叫navigationbar或导航条.常见的APP都使用tabbar来进行功能分类的管理,比如微信.QQ等等. 需求是这样的,需要一个特殊一点的tabbar,要求 ...
- 关于const用法的学习
被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:“Use const whenever you need”.1.const作函数参数 例如 ...
- 获取VirtualBox COM对象失败,Unable to start the virtual device
一.问题 1.将Genymotion和VirtualBox安装好之后,并且已经下载完了virtual device: 2.但是在运行虚拟机的时候却弹出了错误提示:虚拟机电脑控制台——严重错误. 如图: ...
- 从完整备份恢复单个innodb表
现在大多数同学在线上采取的备份策略都是xtrabackup全备+binlog备份,那么当某天某张表意外的删除那么如何从xtrabackup全备中恢复呢?从mysql 5.6版本开始,支持可移动表空间( ...
- #8 Python数学方法
前言 前几节了解了Python的不同数据类型,有小伙伴会问,不同的数据类型之间是否可以相互转换?肯定是可以的,本篇博文主要记录数字类型的转换,其他类型的相互转换会在下几节记录,Here we go! ...
- Freemarker教程1(基本使用)
简介 FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是 ...
- Scala构建工具SBT
SBT(Simple Build Tool)是Scala的项目构建工具,拥有依赖管理,构建过程管理和打包等功能. SBT官网上给出各平台的安装方法: MAC: 使用homebrew安装 brew in ...
- cJSON填坑记
1. 艰辛的过程 最近做了一个嵌入式的项目,需要与服务器进行连接.为了方便服务器处理数据,经商定后统一采用JSON形式进行数据的传输. 以前没有用过JSON格式进行数据处理,所以上网搜索了一下,很多人 ...