离群点检测与序列数据异常检测以及异常检测大杀器-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班同学们的帮助 附上李老师和 ...
随机推荐
- 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) —— 2.Programming assignments : Keras Tutorial - The Happy House (not graded)
Keras tutorial - the Happy House Welcome to the first assignment of week 2. In this assignment, you ...
- 使用 redis-dump 批量导入导出数据
有时候需要将 redis 的数据进行导入导出操作,可以使用 redis-dump 这款工具. 一.安装RVM redis-dump 工具依赖于2.2以上版本的 ruby,而 centos 环境下 yu ...
- mysql 开发进阶篇系列 37 工具篇 perror (错误代码查看工具)与总结
一. perror 错误代码查看工具 在mysql 的使用过程中,可能会出现各种各样的error.这些error有些是由于操作系统引起的,比如文件或者目录不存在等等,使用perror的作用就是解 ...
- Android应用系列:双击返回键退出程序
前言 有一个很古老的应用技巧,一直被各种大大小小的app用得乐此不疲,那就是双击返回键退出程序.今天就写写它的实现代码,非常简单而且实用. 正文 双击返回键退出程序,一般有两种实现思路,一种是用一个布 ...
- Android_Fragment和Activity之间的通信
Fragment 的生命周期是随着activity变化而变化的. 如果activity要给在运行的时候给fragment传人数据则需要fragment实现一个自定义的接口,并且实现接口里面的方法,在a ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十二):解决跨域问题
什么是跨域? 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 如果一个请求地址里面的协议.域名和端口号都相同,就属于同源. ...
- Enumerable转换为DataTable
今天在项目组公共类库中发现一个 Enumerable类型转换为DataTable,写的挺精简的,拿出来跟大家共享一下. using System; using System.Collections.G ...
- linux centos7 root密码重置
转:http://blog.chinaunix.net/uid-21209618-id-4738916.html 分类: LINUX 三年左右没接触linux技术工作,忘记的有很多.不知该怎么去运用. ...
- 关于wepack的使用总结以及优化探讨
一.前言 不知不觉,webpack版本已经到4.0了.使用它也有很长一段时间了,回头看看,自己木有总结webpack方面的知识,现在有空起个头,主要是总结自己常用的配置和一下优化的探讨,以后有啥想法也 ...
- 身份认证与加密浅谈(PKI)
利用PKI体系解决私密文件传输中一系列问题的大体思路 背景:现有A用户和B用户之间想加密传输一些秘密文件,通过什么样的技术可以确保A和B传输数据的安全性?方案:采用对称秘钥对数据进行加密传输(对称加密 ...