05.23 時序數據異常檢測(2)指數平滑方法

上文我們使用LOF-ICAD方法實現了時序數據的異常檢測, 這次我們介紹一種更為常見的方法-------指數平滑.

指數平滑的方法, 其原理就是通過擬合出一個近似的模型來對未來進行預測, 我們可以通過這個預測來和實際的值進行比較, 如果差距過大, 我們就可以判定這個點是異常的.

首先我們介紹一下一階指數平滑的算法

一階指數平滑算法

這裡給出一些符號的定義:

序列長度記為n, 參數記為α(指數平滑算法只有一個參數)時序序列的定義:

時序數據序列擬合序列的定義:

擬合數據序列對於一階指數平滑而言

迭代過程

這裡我們需要定義一下初始值, 一般來說, 我們可以令初值是前3個數據的平均值:

初始值設置

我們通過這樣的設置之後, 便可以利用初始值不斷迭代出下一步的擬合值, 也就是通過t0可以不斷推到tn的值, 但是這樣帶來的效果可能會很差, 因為參數α可能是不準確的, 那麼迭代下去誤差會越來越大, 我們必須解決這個問題, 這裡我們先擱置, 講一講二階指數平滑

二階指數平滑算法

二階指數平滑相對於一階指數平滑算法只是增加了迭代的次數, 使得擬合的精度相對提高了

這裡我們給出相應的迭代的細節:

迭代細節

對於未來T期的估計

對未來的估計

其中

參數細節

好了, 我們接下來就需要解決α參數的優化問題, 我們需要一種學習算法來使得誤差變小, 以往的算法是使用動態規劃, 這裡我們使用隨機梯度下降策略, 給出具體的細節

隨機梯度下降法策略

隨機梯度下降法, 需要我們去求部分偏導數, 這裡我們首先給出初始的梯度計算, 以及一般性的梯度計算

初始梯度計算

一般性梯度計算

定義損失函數:

Loss

根據上述偏導數, 我們就可以給出迭代的具體過程:

具體迭代過程

到此, 我們便給出了一階和二階指數平滑的算法以及利用梯度下降來對參數進行優化的方法

具體代碼的實現以及使用的細節可以到我的github項目中進行查看:

https://github.com/MezereonXP/AnomalyDetectTool

歡迎大家star~~, 有任何的問題可以提issue或者發送郵件到我的郵箱mezereonxp@gmail.com