异常检测之时间序列的异常检测

标签: | 发表时间:2018-05-28 18:22 | 作者:
出处:https://zhuanlan.zhihu.com
问题的输入:一个时间序列

问题的输出:是否异常

1. 3倍方差

其实之前介绍过3倍方差,只是,这里的3倍方差讲的是在时间序列异常检测中的应用。

一个很直接的异常判定思路是,拿最新3个数据点的平均值(tail_avg方法)和整个序列比较,看是否偏离历史总体平均水平太多,如果偏离太多,就报警。

2. first hour average

算法步骤:

和上述算法基本一致,只是比较对象不是整个序列,而是开始一个小时(其实这种这种思想可以推广,只要是时间序列刚开始的一段时间即可)的以内的数据,求出这段时间的均值和标准差和尾部数据(新产生的数据)用三本方差的方法比较即可。

3. stddev from moving average

先求出最后一个点处的指数加权移动平均值,然后再用最新的点和三倍方差方法求异常。

4. 移动平均

给定一个时间序列和窗口长度N,moving average = 当前data point之前N个点(包括当前点)的平均值。不停地移动这个窗口,就得到移动平均曲线。

5. 指数移动平均

指数移动与移动平均有些不同:

a. 并没有时间窗口,用的是从时间序列第一个data point到当前data point之间的所有点。

b. 每个data point的权重不同,离当前时间点越近的点的权重越大,历史时间点的权重随着离当前时间点的距离呈指数衰减,从当前data point i往前的data point,权重依次为α, α(1-α), α(1-α)^2….., α(1-α)^n

该算法可以检测一个异常较短时间后发生另外一个异常的情况,异常持续一段时间后可能被判定为正常。

6. mean subtraction cumulation

算法步骤:

a. 排除掉全序列最后一个点

b. 计算剩余点的平均值

c. 所有点减去上一步计算的平均值,得到新的序列

d. 求剩余序列的标准差

e. 判断步骤c中得到的新序列的最后一个值是否大于3倍标准差

7. 最小二乘法

算法步骤:

a. 用最小二乘法拟合时间序列

b. 用实际值减去拟合值得到新序列

c. 判断新序列最后三个值的平均值是否大于新序列的三倍标准差



相关 [异常检测 时间序列 异常检测] 推荐:

异常检测之时间序列的异常检测

- -
其实之前介绍过3倍方差,只是,这里的3倍方差讲的是在时间序列异常检测中的应用. 一个很直接的异常判定思路是,拿最新3个数据点的平均值(tail_avg方法)和整个序列比较,看是否偏离历史总体平均水平太多,如果偏离太多,就报警. 和上述算法基本一致,只是比较对象不是整个序列,而是开始一个小时(其实这种这种思想可以推广,只要是时间序列刚开始的一段时间即可)的以内的数据,求出这段时间的均值和标准差和尾部数据(新产生的数据)用三本方差的方法比较即可.

异常检测机制

- - 奇虎360-addops
传统的异常检测系统通过设置一个固定的阈值来保证监控项处于正常水平,一旦超过设定的阈值,就会触发报警来提醒人们的注意. 静态阈值法适用于在一定范围内波动的监控项,比如磁盘使用率,CPU使用率等,但是如果遇到网络流量这种不具有明显上限,波动比较剧烈的情况,单纯利用静态阈值法如果设置的阈值比较小,会出现很多误报的情况,增加人工成本;而如果将阈值设置的比较大,又会出现漏报的情况.

[原]异常检测--综述

- - 工作笔记
异常点检测,有时也叫离群点检测,英文一般叫做Novelty Detection或者Outlier Detection,这里就对异常点检测算法做一个总结. 1. 异常点检测算法使用场景.     什么时候我们需要异常点检测算法呢. 一是在做特征工程的时候需要对异常的数据做过滤,防止对归一化等处理的结果产生影响.

如何基于Flink+TensorFlow打造实时智能异常检测平台?只看这一篇就够了

- - zhisheng的博客
本文转自 AI 前线公众号,作者 | 潘国庆 编辑 | Natalie. Flink 已经渐渐成为实时计算引擎的首选之一,从简单的实时 ETL 到复杂的 CEP 场景,Flink 都能够很好地驾驭. 本文整理自携程实时计算负责人潘国庆在 QCon 全球软件开发大会(北京站)2019 的演讲,他介绍了携程如何基于 Flink 与 TensorFlow 构建实时智能异常检测平台,以解决规则告警系统准确率低、时效性低、规则配置复杂与耗费人力等诸多问题,实现了业务指标毫秒级延迟与智能化检测,同时依托 Flink 实现了强大的容错机制.

妄谈时间序列表格型大数据系统设计

- - Solrex Shuffling
一直在特定领域的分布式系统一线摸爬滚打,曾取得一些微不足道的成绩,也犯过一些相当低级的错误. 回头一看,每一个成绩和错误都是醉人的一课,让我在兴奋和懊恼的沉迷中成长. 自己是个幸运儿,作为一个 freshman 就能够有机会承担许多 old guy 才能够有的职责. 战战兢兢、如履薄冰的同时,在一线的实作和思考也让我获得了一些珍贵的经验,却直至今日才够胆量写出来一晒.

时间序列分段算法 [Time series Breakout Detection]

- - ITeye博客
在时间序列分析中,断点检测(breakout detection)是一个很基本的问题. 通过捕捉时序数据中的断点(breakout),来发现时序数据所表示的系统在过去是否发生了某种事件(event),进而为系统诊断提供必要的数据支持. 为了实现对时序断点的检测,我们首先需要对时序的整体时序做拟合. 这里我们通过一条直线来拟合一段时序,如果时序的趋势发生了变化,则用多条直线来拟合整条时序数据.

以秒为单位生成唯一的时间序列号

- - ITeye博客
//测试是否有生成重复的ID. private static final byte LEVEL = 7; //限定一秒钟最多产生1000万-1 个数. * 测试机器系统参数: Win7 64位 i5-4210M 4core 2.6GHz 内存8GB. * 测试10个线程并发产生,每秒可以产生310万左右个序列号.

用Python进行时间序列预测的7种方法

- - 标点符
时间序列预测在日常分析中常会用到,前段时间在处理预算相关的内容,涉到一些指标预测,学习到了这篇文章,整理出来分享给大家. 数据集(JetRail高铁的乘客数量)下载,链接: https://pan.baidu.com/s/15w5_5_o8IK6ZT3VlNSRa7Q 提取码: 9be3. 假设要解决一个时序问题:根据过往两年的数据(2012 年 8 月至 2014 年 8月),需要用这些数据预测接下来 7 个月的乘客数量.

通俗易懂带你看懂时间序列分解模型?高深也不过如此

- - IT瘾-bigdata
观察趋势,或许是我们在日常分析中最常见的需求. 但遗憾的是,许多管理者或者业务分析人员,对着高高低低的折线图(时间序列数据)不知道怎么“看”. 本节将介绍一种通俗易懂的时间序列分解方法,帮助大家从时间序列的波动中挖掘信息. 另外,时间序列数据经过分解之后,可以对未来的数值进行一定程度的预测. 5.5.1  怎样观察时间序列数据.