EDADS系統包含了眾多的時序模型和異常檢測模型,這些模型的處理會輸入很多引數,若僅使用預設的引數,那麼時序模型預測的準確率將無法提高,異常檢測模型的誤報率也無法降低,甚至針對某些時間序列這些模型將無法使用。
若想有效地使用EGADS系統,那麼必須瞭解EGADS系統的核心演算法思想,並據此調優模型引數,來提高異常檢測的準確率、降低誤報率。
筆者通過閱讀EDADS系統的TimeSeries模型和AnomalyDetection模型的原始碼,整理了模型的處理流程和常用演算法的核心思想。如本文有理解錯誤之處,歡迎大家隨時拍磚指正。
1. TSM時序模型
1.1 時序模型處理流程
時序模型介面主要包含的方法:train()
、predict()
,其類結構如下圖所示。時序模型的主要處理流程:
- 先呼叫train方法訓練出模型
- 在呼叫predict方法,得到時間序列的預測值
時序模型的實現類都遵循以上的處理流程。
1.2 OlympicModel演算法核心思想
OlympicModel 是時序資料的季節性模型,該演算法的核心思想:某個資料點的預測值是歷史n個同期資料的平滑平均值。特別適用於預測有周期的,甚至是巢狀週期的曲線。這裡舉例說明下什麼是巢狀週期,例如:某個資料集每週的波動曲線相似,並且週一至週五是一類波動曲線,週六和週日是一類波動曲線。面對巢狀週期的波動曲線,僅以固定間隔作為週期的預測演算法的效果不太理想。
OlympicModel模型的資料結構:
-
data儲存觀察值,底層的資料結構是
ArrayList
-
model儲存期望值,底層的資料結構是
ArrayList
OlympicModel模型訓練的核心思想:
- 將data的第一個最小週期的資料作為期望值存入model
- 對於data剩餘的資料點,計算出期望值後存入model
- 整個處理流程:針對每層巢狀週期(共w層),每個偏移量(共j個),計算出當前時間點、漂移到下一個時間點、漂移到上一個時間點的期望值,在這些期望值(
w*j*3
)中選擇一個與真實值偏差最小的,作為該時間點的期望值。- 期望值計算:找出歷史同期的所有資料點,去掉可能的異常點(最大值和最小值),剩餘資料點的平均值就是該時間點的期望值。
- 整個處理流程:針對每層巢狀週期(共w層),每個偏移量(共j個),計算出當前時間點、漂移到下一個時間點、漂移到上一個時間點的期望值,在這些期望值(
- 計算出預測值model與真實值data的所有誤差指標(誤差指標用於
AutoForecastModel
篩選出哪個模型更優)
2. ADM異常檢測模型
2.1 異常檢測模型處理流程
異常檢測模型的介面主要包含的方法:tune()
、detect()
,其類結構如下圖所示。異常檢測模型的主要處理流程:
- 先呼叫tune方法,根據訓練資料調教出異常檢測模型的閾值引數
- 在呼叫detect方法,檢測出異常值
異常檢測模型的實現類都遵循以上的處理流程。
2.2 ExtremeLowDensityModel 演算法核心思想
ExtremeLowDensityModel是基於密度的異常檢測模型,其演算法思想類似於聚類演算法。輸入的資料序列為預測值與真實值的差值的絕對值,然後把資料序列按照從大到小排序,在使用聚類演算法把資料序列劃分為兩類:異常點簇和正常點簇,其臨界值為異常點簇的最小值。這裡聚類演算法使用的距離公式為:3*正常點集合的標準差
。
ExtremeLowDensityModel模型輸入的資料結構:
- 觀察值序列,長度為
n
, 底層的資料結構是ArrayList
- 預測值序列,長度為
n
, 底層的資料結構是ArrayList
ExtremeLowDensityModel模型自適應閾值演算法的核心思想:
- 計算出觀測值和預測值的全部誤差指標
- 對於每個時間點
t
,計算出對應觀察值和預測值的所有誤差指標,誤差指標有5個:mae(絕對誤差)、smape、mape、mase、mapee. - 將誤差指標組合成一個map,其中key表示誤差指標,value表示誤差指標對應的
n
個誤差值
- 對於每個時間點
- 對於每項誤差指標,使用基於密度分佈的方式計算出靈敏度,將靈敏度作為該項誤差指標的閾值
- 從誤差指標map中獲取指定的誤差指標對應的
n
個誤差值 - 根據
n
個誤差值,使用基於密度分佈的方式計算出靈敏度(核心演算法)- 把n個誤差值,按照從大到小進行排序
- 初始化一個簇,把第一個資料點移入初始化簇
- 計算出剩餘n-1個點的
標準差*3
作為簇間最大距離的閾值
- 判斷下個資料點與初始化簇的中心點距離是否小於
簇間最大距離的閾值
- 若小於,則從剩餘資料點中移除下個資料點,加入到初始簇中,並重新計算初始化簇的中心點,重新計算剩餘資料點的簇間最大閾值,並返回到步驟4
- 若大於,則停止迭代,此時會把全部資料點劃分為兩個簇
- 如果初始化簇的資料點個數佔比其他簇的資料點個數,超過某個比例(0.05),那麼認為不能做異常檢測,返回正無窮大;否則把
初始化簇和其他簇分割開的臨界點的值
,作為靈敏度並返回
- 將誤差指標和靈敏度儲存到map,該map則儲存了各個誤差指標的閾值
- 從誤差指標map中獲取指定的誤差指標對應的
ExtremeLowDensityModel模型檢測異常演算法的核心思想:
- 將各項誤差指標(5個)的閾值存入陣列
- 計算出每個時間點
t
對應的真實值與期望值的各項誤差指標值(5個) - 若待檢測點處於檢測視窗,且待檢測點的任一誤差指標值超過了對應的閾值,則待檢測點為異常點
2.3 KSigmaModel 演算法核心思想
假設預測值與真實值的誤差值序列符合正態分佈,那麼可以使用KSigmaModel模型做異常檢測,其閾值計算規則為:均值 + 3*標準差
。若某時刻t
的資料點超過該閾值,則認為該時刻對應的資料點異常。
KSigmaModel模型輸入的資料結構:
- 觀察值序列,長度為
n
, 底層的資料結構是ArrayList
- 預測值序列,長度為
n
, 底層的資料結構是ArrayList
KSigmaModel模型調教閾值演算法的核心思想:
- 計算觀測值相比預測值全部的誤差指標
- 對於每個時間點
t
,計算出對應觀察值和預測值的所有誤差指標,誤差指標有5個:mae(絕對誤差)、smape、mape、mase、mapee. - 將誤差指標組合成一個map,其中key表示誤差指標,value表示誤差指標對應的
n
個誤差值
- 對於每個時間點
- 對於每項誤差指標(共5項),使用簡單的KSigma規則計算出異常靈敏度,將靈敏度作為該項誤差指標的閾值
- 假設每項誤差指標值序列均符合正態分佈,計算出每項誤差指標值序列的平均值和標準差
- 對於每項誤差指標,其靈敏度(即閾值)為:
均值 + 3*標準差
- 將誤差指標和靈敏度儲存到map,該map則儲存了各個誤差指標的閾值
KSigmaModel模型檢測異常的核心思想:
- 將各項誤差指標(5個)的閾值存入陣列
- 計算出每個時間點
t
對應的真實值與期望值的各項誤差指標值(5個) - 若待檢測點處於檢測視窗,且待檢測點的任一誤差指標值超過了對應的閾值,則待檢測點為異常點
3. 總結
本文介紹了EGADS的TimeSeries模型和AnomalyDetection模型的處理流程和常用演算法的核心思想。其中TimeSeries模型主要包含:訓練和預測方法,AnomalyDetection模型主要包含:計算閾值引數和檢測異常的方法。
關於TimeSeries模型介紹了可以預測巢狀週期的OlympicModel的核心思想,關於AnomalyDetection模型介紹了基於聚類思想計算出閾值的ExtremeLowDensityModel和基於正態分佈資料的3Sigma法則計算出閾值的KSigmaModel的核心思想。