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

上文我们使用LOF-ICAD方法实现了时序数据的异常检测, 这次我们介绍一种更为常见的方法-------指数平滑.

指数平滑的方法, 其原理就是通过拟合出一个近似的模型来对未来进行预测, 我们可以通过这个预测来和实际的值进行比较, 如果差距过大, 我们就可以判定这个点是异常的.

首先我们介绍一下一阶指数平滑的算法

一阶指数平滑算法

这里给出一些符号的定义:

  1. 序列长度记为n, 参数记为α(指数平滑算法只有一个参数)

  2. 时序序列的定义:


    时序数据序列
  3. 拟合序列的定义:


    拟合数据序列

对于一阶指数平滑而言


迭代过程

这里我们需要定义一下初始值, 一般来说, 我们可以令初值是前3个数据的平均值:


初始值设置

我们通过这样的设置之后, 便可以利用初始值不断迭代出下一步的拟合值, 也就是通过t0可以不断推到tn的值, 但是这样带来的效果可能会很差, 因为参数α可能是不准确的, 那么迭代下去误差会越来越大, 我们必须解决这个问题, 这里我们先搁置, 讲一讲二阶指数平滑

二阶指数平滑算法

二阶指数平滑相对于一阶指数平滑算法只是增加了迭代的次数, 使得拟合的精度相对提高了

这里我们给出相应的迭代的细节:

迭代细节

对于未来T期的估计

对未来的估计

其中

参数细节

好了, 我们接下来就需要解决α参数的优化问题, 我们需要一种学习算法来使得误差变小, 以往的算法是使用动态规划, 这里我们使用随机梯度下降策略, 给出具体的细节

随机梯度下降法策略

随机梯度下降法, 需要我们去求部分偏导数, 这里我们首先给出初始的梯度计算, 以及一般性的梯度计算


初始梯度计算
一般性梯度计算

定义损失函数:


Loss

根据上述偏导数, 我们就可以给出迭代的具体过程:

具体迭代过程

到此, 我们便给出了一阶和二阶指数平滑的算法以及利用梯度下降来对参数进行优化的方法

具体代码的实现以及使用的细节可以到我的github项目中进行查看:
https://github.com/MezereonXP/AnomalyDetectTool

欢迎大家star~~, 有任何的问题可以提issue或者发送邮件到我的邮箱[email protected]

你可能感兴趣的:(时序数据异常检测(2)指数平滑方法)