时间序列异常点检测算法(Smoothed z-score algorithm)
生活随笔
收集整理的這篇文章主要介紹了
时间序列异常点检测算法(Smoothed z-score algorithm)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
- 前言
- 一、原理
- 二、代碼實(shí)現(xiàn)
- 總結(jié)
前言
時(shí)間序列異常點(diǎn)處理!
一、原理
- 算法原理:利用滑動窗口對之后的節(jié)點(diǎn)值做一個范圍預(yù)測(利用平均值和方差),如果真實(shí)節(jié)點(diǎn)不在這個范圍,則表明該節(jié)點(diǎn)是異常值。
- 平滑原理:對異常點(diǎn)做一個平滑,以用來評估之后的節(jié)點(diǎn)。(這里平滑的值=當(dāng)前異常節(jié)點(diǎn)的百分之五十+上一個被平滑后節(jié)點(diǎn)的百分之五十,百分之五十這個值可以調(diào)節(jié))
- 缺點(diǎn):遇到連續(xù)的異常點(diǎn),可能不會檢測到第一個異常點(diǎn)之后的節(jié)點(diǎn)。
- 建議1:咱這邊對于這個缺點(diǎn),給出的建議是,對異常點(diǎn)的平滑可以做一個修改,可以使用之前幾個值的一個平均值或者是中位數(shù)來做一個填充,如果咱這個技術(shù)過硬,可以采用機(jī)器學(xué)習(xí)預(yù)測異常點(diǎn),嗨嗨嗨,也是極好的。
- 建議2:如果能大概測試到異常點(diǎn)有多少,可以使用之前平均值和跳過幾個異常點(diǎn)之后的平均值做差,當(dāng)作系數(shù)乘到這里threshold * stdFilter [i-1]。
- 圖示解釋:可以看到紅色是序列數(shù)據(jù),灰色區(qū)域是程序可接受的范圍值,當(dāng)紅色點(diǎn)超出灰色區(qū)域,則在下面標(biāo)記一個信號量,其取值為-1,0,1.(可以理解為信號量是對程序處理異常點(diǎn)的一個直觀體現(xiàn))
- 與代碼的對應(yīng):信號量對應(yīng)程序中的列表signals,方差列表對應(yīng)stdFilter ,修正后的輸入列表對應(yīng)filteredY
二、代碼實(shí)現(xiàn)
#!/usr/bin/env python # Implementation of algorithm from https://stackoverflow.com/a/22640362/6029703 import numpy as np import pylab# 源代碼地址 # https://stackoverflow.com/questions/22583391/peak-signal-detection-in-realtime-timeseries-data/43512887#43512887 # 參考文章 # https://zhuanlan.zhihu.com/p/39453139 def thresholding_algo(y, lag, threshold, influence):signals = np.zeros(len(y))filteredY = np.array(y)avgFilter = [0]*len(y)stdFilter = [0]*len(y)avgFilter[lag - 1] = np.mean(y[0:lag])stdFilter[lag - 1] = np.std(y[0:lag])for i in range(lag, len(y)):if abs(y[i] - avgFilter[i-1]) > threshold * stdFilter [i-1]:if y[i] > avgFilter[i-1]:signals[i] = 1else:signals[i] = -1filteredY[i] = influence * y[i] + (1 - influence) * filteredY[i-1]avgFilter[i] = np.mean(filteredY[(i-lag+1):i+1])stdFilter[i] = np.std(filteredY[(i-lag+1):i+1])else:signals[i] = 0filteredY[i] = y[i]avgFilter[i] = np.mean(filteredY[(i-lag+1):i+1])stdFilter[i] = np.std(filteredY[(i-lag+1):i+1])return dict(signals = np.asarray(signals),avgFilter = np.asarray(avgFilter),stdFilter = np.asarray(stdFilter))總結(jié)
煩、裝linux環(huán)境裝的我心煩意亂! 裝了好久了還沒裝好,億點(diǎn)點(diǎn)毛病。
總結(jié)
以上是生活随笔為你收集整理的时间序列异常点检测算法(Smoothed z-score algorithm)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬虫抓取百度图片_Pytho
- 下一篇: onchange监听input值变化及i