异常检测之时间序列的异常检测
问题的输出:是否异常
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. 判断新序列最后三个值的平均值是否大于新序列的三倍标准差