python时间序列异常值查找_(No.38)时间序列异常点检测算法
寫在前面:
針對一個數(shù)值序列,識別出其中的異常波動點。例如:
p = [1 1 1.1 1 0.9 1 1 1.1 1 0.9 1 1.1 1 1 0.9 1 1 1.1 1 1 1 1 1.1 0.9 1 1.1 1 1 0.9 1, ...
1.1 1 1 1.1 1 0.8 0.9 1 1.2 0.9 1 1 1.1 1.2 1 1.5 1 3 2 5 3 2 1 1 1 0.9 1 1 3, ...
2.6 4 3 3.2 2 1 1 0.8 4 4 2 2.5 1 1 1];
其實不同場景有不同的使用需求,有的場景需要識別peak點,有的場景需要識別異常波動的起始點。
下面介紹一種方法對不同場景下都有一定啟發(fā)意義,可以在該基礎(chǔ)上做一定的trick。
Smoothed z-score algorithm
主要思想:
1 利用過去一段歷史窗口針對下個節(jié)點值做預(yù)測(利用平均值,方差信息),若是其超過了一定的閾值,則是個異常點。
2 對異常點的數(shù)值進(jìn)行平滑,以便評估下下個點是否為異常點。因為不做平滑,由于當(dāng)前是個異常點,對平均值、方差影響較大,若是下一個點仍是異常點,可能不會識別。
可以看到紅色是序列數(shù)據(jù),灰色區(qū)域是可接受的范圍值,中間的綠線是平滑后的預(yù)估值。
當(dāng)紅色點超出灰色區(qū)域,則在下面標(biāo)記一個信號量,其取值為-1,0,1.
這樣就把一個序列數(shù)據(jù),轉(zhuǎn)變成一個類似脈沖信號的中間態(tài)。然后我們就可以基于這個信號根據(jù)需求加以利用。
python代碼:
可見,根據(jù)當(dāng)前值和歷史平均值的絕對差值和方差做比較。
然后對當(dāng)前節(jié)點做平滑,平滑系數(shù)是(0,1),值越大越受當(dāng)前值的影響。
參考參數(shù):lag=5左右, threshold=3.5左右, influence=0.5左右
總結(jié)
以上是生活随笔為你收集整理的python时间序列异常值查找_(No.38)时间序列异常点检测算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 万特电能表接线仿真系统 软件_【学习软件
- 下一篇: 问八股文的公司都是垃圾!?