EGADS介紹(二)--時序模型和異常檢測模型演算法的核心思想

bjehp發表於2021-02-07

EDADS系統包含了眾多的時序模型和異常檢測模型,這些模型的處理會輸入很多引數,若僅使用預設的引數,那麼時序模型預測的準確率將無法提高,異常檢測模型的誤報率也無法降低,甚至針對某些時間序列這些模型將無法使用。

若想有效地使用EGADS系統,那麼必須瞭解EGADS系統的核心演算法思想,並據此調優模型引數,來提高異常檢測的準確率、降低誤報率。

筆者通過閱讀EDADS系統的TimeSeries模型和AnomalyDetection模型的原始碼,整理了模型的處理流程和常用演算法的核心思想。如本文有理解錯誤之處,歡迎大家隨時拍磚指正。

1. TSM時序模型

1.1 時序模型處理流程

時序模型介面主要包含的方法:train()predict(),其類結構如下圖所示。時序模型的主要處理流程:

  • 先呼叫train方法訓練出模型
  • 在呼叫predict方法,得到時間序列的預測值

時序模型的實現類都遵循以上的處理流程。

TimeSeriesModel

1.2 OlympicModel演算法核心思想

OlympicModel 是時序資料的季節性模型,該演算法的核心思想:某個資料點的預測值是歷史n個同期資料的平滑平均值。特別適用於預測有周期的,甚至是巢狀週期的曲線。這裡舉例說明下什麼是巢狀週期,例如:某個資料集每週的波動曲線相似,並且週一至週五是一類波動曲線,週六和週日是一類波動曲線。面對巢狀週期的波動曲線,僅以固定間隔作為週期的預測演算法的效果不太理想。

OlympicModel模型的資料結構:

  • data儲存觀察值,底層的資料結構是ArrayList

  • model儲存期望值,底層的資料結構是ArrayList

OlympicModel模型訓練的核心思想:

  1. 將data的第一個最小週期的資料作為期望值存入model
  2. 對於data剩餘的資料點,計算出期望值後存入model
    1. 整個處理流程:針對每層巢狀週期(共w層),每個偏移量(共j個),計算出當前時間點、漂移到下一個時間點、漂移到上一個時間點的期望值,在這些期望值(w*j*3)中選擇一個與真實值偏差最小的,作為該時間點的期望值。
      1. 期望值計算:找出歷史同期的所有資料點,去掉可能的異常點(最大值和最小值),剩餘資料點的平均值就是該時間點的期望值。
  3. 計算出預測值model與真實值data的所有誤差指標(誤差指標用於AutoForecastModel篩選出哪個模型更優)

2. ADM異常檢測模型

2.1 異常檢測模型處理流程

異常檢測模型的介面主要包含的方法:tune()detect(),其類結構如下圖所示。異常檢測模型的主要處理流程:

  • 先呼叫tune方法,根據訓練資料調教出異常檢測模型的閾值引數
  • 在呼叫detect方法,檢測出異常值

異常檢測模型的實現類都遵循以上的處理流程。

AnomalyDetectionModel

2.2 ExtremeLowDensityModel 演算法核心思想

ExtremeLowDensityModel是基於密度的異常檢測模型,其演算法思想類似於聚類演算法。輸入的資料序列為預測值與真實值的差值的絕對值,然後把資料序列按照從大到小排序,在使用聚類演算法把資料序列劃分為兩類:異常點簇和正常點簇,其臨界值為異常點簇的最小值。這裡聚類演算法使用的距離公式為:3*正常點集合的標準差

ExtremeLowDensityModel模型輸入的資料結構:

  1. 觀察值序列,長度為n, 底層的資料結構是ArrayList
  2. 預測值序列,長度為n, 底層的資料結構是ArrayList

ExtremeLowDensityModel模型自適應閾值演算法的核心思想:

  1. 計算出觀測值和預測值的全部誤差指標
    1. 對於每個時間點t,計算出對應觀察值和預測值的所有誤差指標,誤差指標有5個:mae(絕對誤差)、smape、mape、mase、mapee.
    2. 將誤差指標組合成一個map,其中key表示誤差指標,value表示誤差指標對應的n個誤差值
  2. 對於每項誤差指標,使用基於密度分佈的方式計算出靈敏度,將靈敏度作為該項誤差指標的閾值
    1. 從誤差指標map中獲取指定的誤差指標對應的n個誤差值
    2. 根據n個誤差值,使用基於密度分佈的方式計算出靈敏度(核心演算法)
      1. 把n個誤差值,按照從大到小進行排序
      2. 初始化一個簇,把第一個資料點移入初始化簇
      3. 計算出剩餘n-1個點的標準差*3作為簇間最大距離的閾值
      4. 判斷下個資料點與初始化簇的中心點距離是否小於簇間最大距離的閾值
      5. 若小於,則從剩餘資料點中移除下個資料點,加入到初始簇中,並重新計算初始化簇的中心點,重新計算剩餘資料點的簇間最大閾值,並返回到步驟4
      6. 若大於,則停止迭代,此時會把全部資料點劃分為兩個簇
      7. 如果初始化簇的資料點個數佔比其他簇的資料點個數,超過某個比例(0.05),那麼認為不能做異常檢測,返回正無窮大;否則把初始化簇和其他簇分割開的臨界點的值,作為靈敏度並返回
    3. 將誤差指標和靈敏度儲存到map,該map則儲存了各個誤差指標的閾值

ExtremeLowDensityModel模型檢測異常演算法的核心思想:

  1. 將各項誤差指標(5個)的閾值存入陣列
  2. 計算出每個時間點t對應的真實值與期望值的各項誤差指標值(5個)
  3. 若待檢測點處於檢測視窗,且待檢測點的任一誤差指標值超過了對應的閾值,則待檢測點為異常點

2.3 KSigmaModel 演算法核心思想

假設預測值與真實值的誤差值序列符合正態分佈,那麼可以使用KSigmaModel模型做異常檢測,其閾值計算規則為:均值 + 3*標準差。若某時刻t的資料點超過該閾值,則認為該時刻對應的資料點異常。

KSigmaModel模型輸入的資料結構:

  1. 觀察值序列,長度為n, 底層的資料結構是ArrayList
  2. 預測值序列,長度為n, 底層的資料結構是ArrayList

KSigmaModel模型調教閾值演算法的核心思想:

  1. 計算觀測值相比預測值全部的誤差指標
    1. 對於每個時間點t,計算出對應觀察值和預測值的所有誤差指標,誤差指標有5個:mae(絕對誤差)、smape、mape、mase、mapee.
    2. 將誤差指標組合成一個map,其中key表示誤差指標,value表示誤差指標對應的n個誤差值
  2. 對於每項誤差指標(共5項),使用簡單的KSigma規則計算出異常靈敏度,將靈敏度作為該項誤差指標的閾值
    1. 假設每項誤差指標值序列均符合正態分佈,計算出每項誤差指標值序列的平均值和標準差
    2. 對於每項誤差指標,其靈敏度(即閾值)為:均值 + 3*標準差
  3. 將誤差指標和靈敏度儲存到map,該map則儲存了各個誤差指標的閾值

KSigmaModel模型檢測異常的核心思想:

  1. 將各項誤差指標(5個)的閾值存入陣列
  2. 計算出每個時間點t對應的真實值與期望值的各項誤差指標值(5個)
  3. 若待檢測點處於檢測視窗,且待檢測點的任一誤差指標值超過了對應的閾值,則待檢測點為異常點

3. 總結

本文介紹了EGADS的TimeSeries模型和AnomalyDetection模型的處理流程和常用演算法的核心思想。其中TimeSeries模型主要包含:訓練和預測方法,AnomalyDetection模型主要包含:計算閾值引數和檢測異常的方法。

關於TimeSeries模型介紹了可以預測巢狀週期的OlympicModel的核心思想,關於AnomalyDetection模型介紹了基於聚類思想計算出閾值的ExtremeLowDensityModel和基於正態分佈資料的3Sigma法則計算出閾值的KSigmaModel的核心思想。

相關文章