时序数据异常检测算法简述与分类

摘要:异常检测是目前时序数据分析最成熟的应用之一,有效的异常检测被广泛用于现实世界的很多领域,例如量化交易,网络安全检测、自动驾驶汽车和大型工业设备的日常维护。本文主要对目前主流的异常检测算法进行汇总并将其分为基于统计的异常检测、基于预测的异常检测等类别,介绍各自的优缺点并寻找适合时序数据的异常检测算法。

关键词:异常检测,时序数据分析

1 引言

异常检测是目前时序数据分析最成熟的应用之一,有效的异常检测被广泛用于现实世界的很多领域,例如量化交易,网络安全检测、自动驾驶汽车和大型工业设备的日常维护。本文主要对目前主流的异常检测算法进行汇总并将其分为基于统计的异常检测、基于预测的异常检测等类别,介绍各自的优缺点并寻找适合时序数据的异常检测算法。

1.1 异常类型

异常大致分为三种类型:点异常、上下文异常和集合异常。它们常见的表现形式如下:
(1)点异常:离群点、孤立点、异常值;
(2)上下文异常:值无异常,但在上下文环境中呈现异常(如时序数据);
(3)集合异常:单点无异常,但子集相对于全集呈现异常;

2 异常检测算法类别

现有的异常检测算法大致可以分为以下四类:
(1)基于统计的异常检测算法:通过历史同期的数据分布来确定当前数据的合理波动范围。例如基于3σ准则的异常检测算法。
(2)基于预测的传统异常检测算法:比较预测值与真实值的差异,超出阈值则认为是异常点,例如ARIMA、指数平滑法。
(3)直接异常检测算法:如LOF、孤立森林、One-class SVM算法等。
(4)基于深度学习的异常检测算法:对数据降维再升维重构,不能良好复原的点认为是异常点。例如基于GAN,自编码器,变分自编码器等的异常检测算法。

2.1 基于统计的异常检测算法

1.  基于3σ准则的异常检测算法
    借助正态分布的优良性质,3σ准则常用来判定数据是否异常。由于正态分布关于均值μ对称,且数值分布在(μ-σ,u+σ)中的概率为0.6827,数值分布在(μ-3σ,u+3σ)中的概率为0.9973。即只有0.3%的数据会落在均值的±3σ之外,这是一个小概率事件。为了避免极端值影响到模型整体的鲁棒性,常将其判定为异常值并从数据中剔除。
    基于统计的异常检测算法优点为计算简单,缺点为要求数据分布近似正态,受异常点的影响较大。
注:除了常见的正态分布,还存在幂律分布。在日常的数据分析中,订单数据和浏览数据都会呈现出近似幂律分布的状态,其特点为少数群体占有多数资源。

2.2 基于预测的传统异常检测算法

1.  ARIMA(p, d, q)数据预测模型
    ARIMA差分整合移动平均自回归模型,其中p为滞后值,d是非平稳序列转化为平稳序列所需的差分次数,q是预测误差的滞后值。AR模型描述的是当前值和历史值之间的关系。MA模型描述的是当前值与自回归部分误差累积的关系。对于非平稳序列,由于它的方差和均值不稳定,处理方法一般是将其转化成平稳序列。然后对它的滞后值以及随机误差值进行回顾来建立模型。

2. 指数平滑预测模型
    指数平滑兼容了全期平均和移动平均所长,不舍弃过去的数据,但是仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。主要是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。

2.3 直接异常检测算法

1.  LOF局部离群因子检测法(基于密度)
    该算法为数据集中的每个点计算一个离群因子,通过判断其是否接近于1来判定该点是否为离群点。若离群因子远大于1,则该点为离群点,若接近于1,则为正常点。

2.  孤立森林
    该算法基于集成学习,适用于连续数据的异常检测,通过多棵iTree形成森林来判定是否有异常点。

3.  One-class SVM算法
    寻找一个超平面将样本中的正例圈出来,预测就是用这个超平面做决策,在圈内的样本就认为是正样本。适用于已知样本绝大多数为正样本,仅有极少数为负样本的场景。它可以通过已知数据训练一个一类分类器,得到一个紧凑的分类边界,超出这个边界就认为是不合格产品。

2.4 基于深度学习的异常检测算法

1.  基于GAN网络的异常检测算法
    通过生成式对抗网络仅仅学习正常数据的数据分布,得到的模型G只能生成或者重建正常数据。将测试样本输入训练好的模型G,如果G经过重建后输出的数据和输入样本一样或者接近,表明测试的是正常数据,否则是异常数据。

2.  基于AE(自编码器)的异常检测算法
    自编码器的输入层维度等于输出层维度,隐藏层维度小于输入层维度。通过自编码器学习数据分布最显著的特征,对原图进行重构并产生新图,新图与原图之间产生较大差异的点就是异常点。

3.  基于VAE(变分自编码器)的异常检测算法
    使用训练数据训练好一个VAE,该VAE的encoder能够将输入数据X映射到隐变量Z,decoder将隐变量Z再映射回X。当训练好一个VAE之后,如果输入一个异常数据,该模型很大概率会将该异常数据重构成一个正常数据,因此我们就可以判别输入数据是否是一个正常数据。正常数据重构成正常数据的概率很高,而异常数据重构成异常数据的概率很低。
    AE与VAE的主要区别在于前者是一种没有概率基础的确定性判别模型,而后者是可以提供校准概率的随机生成模型。

2.5 各类异常检测算法的优劣总结表

3 不同异常检测算法的结合

时间序列数据异常检测是指从正常的时间序列中识别不正常的事件或行为的过程,而由于时间序列数据具有周期性、趋势性、季节性、随机性,异常检测算法必须兼顾这些特性才能起到更好的检测效果,因此可以尝试不同类别异常检测算法组合,各取所长,从而提高检测的准确度。

1.  基于预测与统计的时序数据异常检测
    该方法采用Prophet算法与3σ准则实现。在时间序列分析领域,有一种常见的分析方法叫做STL分解,它把时间序列分解为季节项(seasonal)、趋势项(trend)、残余项(residue)。即当t≥0时,满足下式:

而Prophet基于这种方法进行了必要的改进和优化,在上述三项的基础上又增加了节假日项,此时数据则满足下方的新公式:

其中g(t)为趋势项,表示时间序列在非周期上面的变化趋势;s(t)为周期项,或者称季节项,一般以周或者年为单位;h(t)为节假日项,表示在当天是否存在节假日;ϵt表示误差项或者称剩余项。Prophet 算法就是通过拟合这几项,然后进行累加就得到了时间序列的预测值。
    3σ准则借助历史的波动数据来估计并计算不同日期同一时刻的数值的标准差。
    最后,在Prophet预测上下界的基础上分别加减3σ得到数据波动的合理范围,当实际数据超过这个范围时则标注为异常数据。此算法训练快,效果好。

2.  基于预测与直接异常检测的方法
    首先去除时间序列数据的趋势和周期性。用预测模型给出的预测值与真实值相减计算序列的残差,残差不包含周期性和趋势性,可以作为直接异常检测算法的输入。此算法效果较好,适用于离线、测试、生产三种场景。

文末备注:本文是作者第一篇博客,如有不足之处,还请各位大佬海涵并提出修改意见,在下一定及时更正。内容来源于作者对百度和知乎上其他相关内容的汇总,涵盖了多数最基础的异常检测方法,如果各位有补充意见,请不吝赐教。谢谢大家的阅读!后续还会有其他关于异常检测的内容,愿与诸君共同进步!

震惊!(竟有这么好的)时序数据异常检测算法简述与分类相关推荐

  1. 实现波动数组Java_教你用java实现时序数据异常检测(1)LOF-ICAD方法

    数据的异常检测是一个难题, 面临许多挑战, 其中包括: 定义一个正常表现的范围是比较困难的, 异常值和正常值有时候边界并不是特别明显 某些恶意行为会伪装成正常值, 难以发现 大多数领域的正常行为只能在 ...

  2. 时序数据异常检测(2)指数平滑方法

    上文我们使用LOF-ICAD方法实现了时序数据的异常检测, 这次我们介绍一种更为常见的方法-------指数平滑. 指数平滑的方法, 其原理就是通过拟合出一个近似的模型来对未来进行预测, 我们可以通过 ...

  3. paddle入门--通过AutoEncoder实现时序数据异常检测

    来源:paddle官网,入门教程,paddlepaddle 2.3,代码 顺序有修改. 摘要: 本示例将会演示如何使用飞桨2.1完成时序异常检测任务.这是一个较为简单的示例,将会构建一个AutoEnc ...

  4. 孤立森林:大数据背景下的最佳异常检测算法之一

    孤立森林或"iForest"是一个非常漂亮和优雅简单的算法,可以用很少的参数来识别异常.原始的论文对广大的读者来说是容易理解的,并且包含了很少的数学知识.在这篇文章中,我将解释为什 ...

  5. 时序预测竞赛之异常检测算法综述

    本文将介绍在时间序列预测相关问题中常见的异常检测算法,可以很大程度上帮助改善最终预测效果. 异常分类 时间序列的异常检测问题通常表示为相对于某些标准信号或常见信号的离群点.虽然有很多的异常类型,但是我 ...

  6. 【时间序列】时序预测竞赛之异常检测算法综述

    本文将介绍在时间序列预测相关问题中常见的异常检测算法,可以很大程度上帮助改善最终预测效果. 异常分类 时间序列的异常检测问题通常表示为相对于某些标准信号或常见信号的离群点.虽然有很多的异常类型,但是我 ...

  7. #时间预测算法_【时间序列】时序预测竞赛之异常检测算法综述

    本文将介绍在时间序列预测相关问题中常见的异常检测算法,可以很大程度上帮助改善最终预测效果. 异常分类 时间序列的异常检测问题通常表示为相对于某些标准信号或常见信号的离群点.虽然有很多的异常类型,但是我 ...

  8. Yahoo大规模时列数据异常检测技术及其高性能可伸缩架构

    本文已经在InfoQ首发 本文是Yahoo在ACM国际会议上发布的一篇关于时序数据自动异常检测上的学术论文,对在智能监控尤其是趋势预测.异常数据监测和报警等方面的技术同学具有一定研究和参考价值,以下是 ...

  9. 数据异常检测方法以及实际应用

    转载于: 已获得作者同意转载 关于数据的异常检测,看这一篇就够了 - 携程技术中心的文章 - 知乎 https://zhuanlan.zhihu.com/p/65023844 文章目录 前言 一.应用 ...

最新文章

  1. 视频直播技术详解(1)采集
  2. java 树 右键菜单_VUE实现Studio管理后台(八):用右键菜单contextmenu,编辑树形结构...
  3. 2018最新大神教你用Python玩转数据视频教程
  4. JSW Java_java服务安装(一):使用java service wrapper及maven打zip包
  5. php5.3 gd库,php5.3动态编译gd库 zlib扩展 mcrypt扩展 mysqli扩展
  6. MySQL INSERT的4种形态
  7. 【恋上数据结构】快速排序
  8. Windows软件路由器运用实例之OSPF配置
  9. http 性能测试 wrk使用教程
  10. .net源码解读之StringBuilder
  11. Python爬虫实战:《战狼2》豆瓣影评分析
  12. ShareX+七牛云搭建博客图床
  13. 1.3.随机变量,随机向量的自相关与自协方差
  14. 【教学类-17-02】20221125《世界杯七巧板A4整页-随机参考图七巧板 3份一页》(大班)
  15. 在线表格,推荐使用超级表格——超好用的电子表格
  16. docker 构建企业级Maven私服仓库 nexus3
  17. EDIUS设置采集磁带的教程
  18. 基于Asp.Net Core的简单社区项目源代码开源
  19. DPOS3.0的改进分析
  20. Vue.js 根据数据,进行Table单元格合并

热门文章

  1. H5实战(一):照片墙效果
  2. Unity3D Android手机屏幕分辨率问题
  3. java对office、pdf文档在线预览解析(融合进项目中)
  4. 图解一致性哈希算法的基本原理
  5. 数组之map方法详解
  6. 4070显卡和3080显卡对比 rtx4070显卡和rtx3080显卡性能差距
  7. 国产手机:2022疑无路,2023又一村?
  8. APM飞控SITL仿真环境 修改初始地理位置
  9. Apache网页优化个人认识
  10. linux操作系统中添加永久交叉编译工具链