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

问题的输入:一个时间序列

问题的输出:是否异常

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

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

=======2019年9月28日更新============

移动指数平均法还包括一次指数平滑和二次指数平滑以及三级指数平滑,其中三次指数平滑又叫holt winters算法,holt winters算法又分为累加式和累乘式

简书上有一个专栏写的很详细,这里就不再详细介绍了:

Holt Winter 指数平滑模型www.jianshu.com图标

6. mean subtraction cumulation

算法步骤:

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

b. 计算剩余点的平均值

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

d. 求剩余序列的标准差

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

7. 最小二乘法

算法步骤:

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

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

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


参考文献:各种wiki

编辑于 2019-09-28

文章被以下专栏收录