基於時間序列的異常檢測系統的實現思路之一

2021-08-07 15:01:58 字數 977 閱讀 4584

技術方案:spark、kafka、opentsdb、yahoo的egads

模型靜態訓練:採用兩種演算法進行模型的訓練:指數移動平均和hotwinters,模型一天訓練一次,即每天0點開始訓練,每天凌晨0:5分根據訓練好的模型進行異常檢測,具體包括點的**以及點的異常檢測;

模型實時訓練:hotwinters根據3個指標進行**,其中兩個可以進行靜態的訓練,另外乙個指標在進行異常檢測之後要 對模型進行實時的訓練;對模型進行實時訓練就要求每個批次的資料訓練的結果做乙個有狀態的儲存,經過調查採用mapwithstate運算元進行實現;

模型的訓練流程為  根據 配置的要訓練的指標從opentsdb時序資料庫中讀取資料,然後呼叫opentsdb的介面進行訓練,把訓練好的模型儲存到相對應的路徑;

模型預存流程為 根據要**的指標通過spark streamimg從kafka實時讀取資料,讀取的點首先進行**,然後在進行異常檢測;當模型不進行實時訓練時,模型廣播到excutor端進行優化,當需要對模型進行實時訓練時間,直接把模型包裝成rdd即可,**如下modelupdateonline類所示

思考過程:對模型進行實時訓練問題,由於spark的運算元與egads不相容,每個批次**之後,再dstream.foreachrdd方法中,把rdd的資料collect到driver端,然後,再進行模型的訓練,訓練之後 再廣播到各個executor,這樣每個批次都要進行廣播,當廣播模型比較多時,網路開銷特別大;通過調研採用mapwithstate來保證增量更新的狀態,優勢,不需要每批次模型被增量更新後都要儲存到redis,下乙個批次再從redis讀取資料,這樣網路開銷也比較大。

優化點:1)目前這些配置檔案和訓練好的模型都在伺服器本地檔案系統中,後續把這些檔案放到hdfs上面以保證spark程式在**時間能夠driver模式;

2)模型訓練當模型比較多時間,由於採用單執行緒  效能是乙個瓶頸。

遇到的問題:1)模型太多,要同時訓練多個模型;2)動態訓練模型時,要能保證模型更新的狀態(調研後,採用mapwithstate運算元)

基於概率建模的多維時間序列的異常檢測

摘要 亞馬遜提出的deepar演算法基於seq2seq模型對單維時間序列進行建模 基於 結果對時間序列中的異常點進行識別,但這種方法不適用於多維度的時間序列建模。在利用iot ai對現實世界中的物理裝置進行異常檢測的過程中,乙個裝置的運轉 健康狀態往往是由一系列指標共同決定的,指標之間並非相互獨立的...

hivemall之時間序列資料異常檢測

安裝hivemall git clone cd incubator hivemall bin build.sh 啟動hive和匯入相關 jar add jar home hadoop incubator hivemall target hivemall core 0.4 2 rc 2 with de...

基於孤立森林的異常值檢測

孤立森林基於異常點和正常點存在顯著不同的特徵,在構建決策樹進行對每個點進行分類時,異常點容易區分,通常距離根節點近這樣的特徵進行異常點探測。在演算法中,設定了異常值函式,s x,n 計算具有n個值得x得異常度 在sklearn的ensemble包中,存在isolationforest類,其使用方法為...