好久沒更新了,記錄一下近兩年研究的一套算法吧,只講講方法部分,細節再更新吧。
時序數據的異常檢測我一般分成兩類,單信號和多信號。
單信號
對於一條數據的異常檢測,我劃分成兩類,與時序無關和與時序相關。
與時序無關
指的是單看信號即可完成異常的判斷。這塊主要方法就是數據質量監控。一般會加入時間窗平滑,如有必要還需對時間窗內分配權重。
- 檢測異常值或空置出現的頻率隨時間的變化;
- 檢測超過閾值數據的嚴重度和頻率隨時間的變化。
與時序相關
指的是信號會隨時間發生分佈的改變。這塊主要就是建立信號與時間的數學模型,監控模型的變化情況。(一般異常檢測並不包含老化,所以會加入一個衰減係數)
多信號
多信號是異常檢測的難點,一般是對某一系統或系統的組合進行監控。難點主要在於特徵的選擇,分清哪些參數是主因,哪些只是分佈近似但毫無關聯。
能做的前提條件要有異常數據,需要多少異常數據取決於系統的複雜程度。
在拿到數據後,首先找相關業務做功課,縮小參數的選擇空間。(並不是指以外的參數無用,只是作爲初始化更加高效並有物理模型支撐)沒有相關數據那就自己根據九年義務教育的知識找兩個靠譜的參數開始也行。
寫程序讀數據,幾個特徵各種可視化先看一遍,要做到完全清楚這個特徵是怎麼分佈或怎樣變化的。(特別容易忽略的一步,但特別重要,磨刀不誤砍柴工)
把數據根據異常時間分爲三個部分,異常前,異常中,異常後。查看各參數在這三個階段的變化情況,再加上時序看,最後兩兩結合看數學模型的變化。精簡到用最少的特徵在不同階段表現出差異。
替換這些特徵,找到差異最大化的一組參數。
最後加入無異常數據,增加新特徵,以降低誤報率同時保持精確度不下降太多。
以上步驟完成了特徵的選擇,根據這些特徵,可以做出一個指標(算法核心自己根據數據調整),對單信號的異常監控就ok了。