天天看點

異常檢測算法分類總結(含常用開源資料集)

作者:雲智慧算法工程師 Chris Hu

異常檢測是識别與正常資料不同的資料,與預期行為差異大的資料。本文詳細介紹了異常檢測的應用領域以及總結梳理了異常檢測的算法模型分類。文章最後更是介紹了常用的異常算法資料集。

異常的概念與類型

目前異常檢測主要是基于Hawkins對異常的定義:(Hawkins defines an outlier as an observation that deviates so significantly from other observations as to arouse suspicion that it was generated by a different mechanism.)。異常(anomaly/outlier)指的是遠離其他觀測資料而疑為不同機制産生的觀測資料。根據機率理論對異常的形式化定義如下:

異常檢測算法分類總結(含常用開源資料集)

異常主要分為以下三種類型:

  • point anomalies(點異常) 點異常是單個異常資料點 ,将資料集中每個資料映射到高維空間中,其中孤立的點被稱為點異常。這種異常點與其他資料點具有明顯差異,這種異常分類是異常資料中最為簡單的一種,也是異常檢測研究中最常研究的異常類型。
  • conditional anomalies/contextual anomalies(條件異常/上下文異常) 一個資料本身來看屬于正常點,但在特定的條件下又與一般情況有差異,這類資料稱為條件異常或上下文異常。其中上下文指資料集間的結構和關系,每個資料均由上下文特征( contextual attributes) 及行為特征( behavioral attributes) 來定義,即條件異常需要考慮的不僅僅是資料的取值,還需考慮資料出現的環境,也就是說某一資料在特定資料環境下被判斷為異常,而在其他資料集中則可能是正常的。
  • collective anomalies/group anomalies(群體異常/序列異常) 資料屬性在正常範圍内,且從上下文環境角度判斷也屬于正常的資料仍有可能是異常資料。如圖3所示,在腦電圖中虛線圓圈部分與腦電圖整體圖形不一緻模式稱之為聚集異常( 或稱集合異常)。異常資料集中單個點可能并不異常,但這些互相關聯的資料點聚集在一起時變為異常的情況。聚集異常不僅需要考慮資料的取值、上下文環境,還考慮資料集是否符合整體模式。聚集異常檢測常用于時間序列、空 間資料以及圖形式的資料中。

在實際的運維場景中,以上三種異常都會出現,比如資源使用率突然上升造成Point Anomalies,又如CPU使用過程中的突然卡頓形成Contextual anomaly,再如某名額使用率連續一段時間處于“滿格”狀态而呈現出Collective or group anomalies。後兩者異常通常需要和業務緊密結合,單純從資料本身出發具有一定的辨識難度,再加上運維領域中大比例情況下出現的是Point Anomalies,客戶多關注于此,因而通常情況下我們更關注Point Anomalies。

異常檢測的應用領域

  • 入侵檢測(Intrusion detection):通過從計算機網絡或計算機系統中的若幹關鍵點收集資訊并對其進行分析,從中發覺網絡或系統中有沒有違反安全政策的行為和遭到襲擊的迹象,并對此做出适當反應的流程。最普遍的兩種入侵檢測系統包括基于主機的入侵檢測系統(HIDS)、網絡入侵檢測系統(NIDS)。
  • 欺詐檢測(Fraud detection):主要是不同領域的非法活動檢測,主要應用領域包括銀行欺詐、移動蜂窩網絡故障、保險欺詐、醫療欺詐。
  • 惡意軟體檢測(Malware Detection):主要分為靜态分析檢測技術與動态分析與檢測技術。
  • 醫療異常檢測(Medical Anomaly Detection):通過X光片、核磁共振、CT等醫學圖像檢測疾病或量化異常,也可以通過EEG、ECG等時序信号進行疾病檢測或異常預警。
  • 深度學習用于社交網絡中的異常檢測(Deep learning for Anomaly detection in Social Networks): 社交網絡中的異常通常是指個人的不正常甚至違法的行為,如垃圾郵件發送者、性侵者、線上欺詐者、虛假使用者或謠言散布者等。
  • 日志異常檢測(Log Anomaly Detection):日志異常檢測是指找到異常日志,進而判斷系統故障原因與性質,通常将日志資料模組化為自然語言序列進行異常檢測。
  • 物聯網大資料異常檢測(Internet of things (IoT) Big Data Anomaly Detection):通過監控資料流資訊檢測異常裝置和系統行為。
  • 工業異常檢測(Industrial Anomalies Detection): 檢測風力渦輪機、發電廠、高溫能源系統、儲存設備和旋轉機械部件組成的工業系統中裝置的損壞情況, 該領域中異常檢測的挑戰是資料量與資料的動态特性,因為故障通常是由多種因素引起的。
  • 時間序列中的異常檢測(Anomaly Detection in TimeSeries):包括單變量時間序列異常檢測與多變量時間序列異常檢測。
  • 視訊監控(Video Surveillance):檢測視訊中的異常場景。

異常檢測思路與方法總結

現如今,異常檢測主要面臨以下困難與挑戰:

  • 未知性:異常與許多未知因素有關,例如,具有未知的突發行為、資料結構和分布的執行個體。它們直到真正發生時才為人所知,比如恐怖襲擊、詐騙和網絡入侵等應用;
  • 異常類的異構性: 異常是不規則的,一類異常可能表現出與另一類異常完全不同的異常特征。例如,在視訊監控中,搶劫、交通事故和盜竊等異常事件在視覺上有很大差異;
  • 類别不均衡:異常通常是罕見的資料執行個體,而正常執行個體通常占資料的絕大部分。是以,收集大量标了标簽的異常執行個體是困難的,甚至是不可能的。這導緻在大多數應用程式中無法獲得大規模的标記資料。

基于标簽的異常檢測算法分類

  • 有監督異常檢測算法

有監督異常檢測算法是指在訓練集中的正常執行個體和異常執行個體都有标簽,訓練二類或多類分類器。有監督異常檢測方法主要面臨兩個問題,一方面是在訓練資料中,相對于正常時間序列來講,異常的資料量太小,會對檢測效果産生影響;另一方面是在實際操作中很難精确地标注資料是正常或異常,而且異常的情況也難以全部覆寫。基于以上原因,在實際異常檢測中,有監督異常檢測算法在實際應用中較少。

  • 半監督異常檢測算法

半監督異常檢測算法是指在訓練集中隻有單一類别(正常執行個體)的執行個體,沒有異常執行個體參與訓練。半監督異常檢測技術的一種典型方法是基于訓練資料集為正常時間序列資料建立模型,然後利用該模型識别待檢測資料中的異常。半監督異常檢測學習正常資料的判别邊界,不屬于正常類的資料被判斷為異常。由于訓練中不需标注異常序列,是以半監督式異常檢測方法的應用相對更加廣泛。

  • 無監督異常檢測算法

無監督異常檢測算法在訓練集中既有正常執行個體也可能存在異常執行個體,但假設資料的比例是正常執行個體遠大于異常執行個體,模型訓練過程中沒有标簽進行校正。此類技術的核心思想在于異常的情況相對于正常的情況而言是很少的,且其與正常情況存在較大的差異,這種差異可以展現在資料之間的距離遠近、分布密度、偏離程度等方面。無監督異常檢測算法僅根據資料的内在屬性(如距離、密度等)檢測資料的異常值,自編碼器是所有無監督深度異常檢測模型的核心。

基于模型的異常檢測算法分類

基于模型的異常算法分類基于傳統方法的異常檢測模型和基于深度學習的異常檢測模型兩大類。

異常檢測算法分類總結(含常用開源資料集)

基于傳統方法的異常檢測模型

  • 基于統計的方法

使用這類方法基于的基本假設是正常的資料是遵循特定分布形式的,并且占了很大比例,而異常點的位置和正常點相比存在比較大的偏移。比如高斯分布,在平均值加減3倍标準差以外的部分僅占了0.2%左右的比例,一般我們把這部分資料就标記為異常資料。

基于統計的異常檢測一般需要充分的資料基礎和相應的先驗知識,此時檢測效果可能是非常有效的。然而,此類檢測方法一般是針對單個屬性或低維資料的,而對于高緯度的時間序列資料就難以估計其真實的分布。

異常檢測算法分類總結(含常用開源資料集)
  • 基于重構的方法

假設異常點是不可被壓縮的或不能從低維映射空間有效地被重構的。常見的方法有PCA、Robust PCA、random projection等降維方法。 PCA提取了資料的主要特征,如果一個資料樣本不容易被重構出來,表示這個資料樣本的特征跟整體資料樣本的特征不一緻,那麼它顯然就是一個異常的樣本。

對于資料樣本X_i, 假設其基于 k 維特征向量重構的樣本為X_ik^' , 則該資料樣本的異常得分可以用如下的公式計算:

異常檢測算法分類總結(含常用開源資料集)
  • 聚類分析方法

此類方法利用聚類算法(如K-means、_x0008_DBSCAN等)對待檢測資料進行聚類,通過聚類的結果來分辨正常與異常的資料,是一種典型的非監督式異常檢測技術。通常來講,基于聚類的異常檢測可基于三種假設來分辨異常資料:

  1. 不屬于任何簇(Cluster)的資料即為異常;
  1. 距離簇中心很遠的資料即為異常;
  1. 歸屬于資料點少或稀疏簇的資料即為異常。

使用聚類算法進行異常檢測,可利用大量已有的聚類研究成果。但是,聚類與異常檢測還是有較大差異的,異常檢測的目标在于尋找不正常的資料,而聚類的目的在于确定資料歸屬的類别。而且,很多聚類算法并未針對時間序列資料做優化,算法執行效率往往不高。

  • one-class 分類方法

對正常資料建立區分性邊界,異常點被劃分到邊界外。常見的方法有OC-SVM、SVDD等。

異常檢測算法分類總結(含常用開源資料集)

基于深度學習的異常檢測模型

  • Deep one class

該類的典型方法為:Deep SVDD [11] 、OC-NN [20]。

異常檢測算法分類總結(含常用開源資料集)
異常檢測算法分類總結(含常用開源資料集)
  • Deep clustering

采用深度學習的聚類方法一般是用神經網絡對輸入資料進行編碼,然後認為最後的編碼序列可以代表神經網絡的很多特征,然後我們對編碼序列進行聚類就可以達成聚類的目的。該類方法被用于異常檢測的包括:CAE-l2 cluster 、DAE-DBC。

CAE-l2 cluster:在autoencoder中間加入了L2标準化以及k-means。

異常檢測算法分類總結(含常用開源資料集)

DAE-DBC:先利用autoencoder降維,然後通過聚類方法判别異常值。

異常檢測算法分類總結(含常用開源資料集)
  • Autoencoder

一個通用的自動編碼器由編碼器和解碼器組成,編碼器将原始資料映射到低維特征空間,而解碼器試圖從投影的低維空間恢複資料。這兩種網絡的參數通過重構損失函數來學習。為了使整體重構誤差最小化,保留的資訊必須盡可能與輸入執行個體(如正常執行個體)相關。

典型案例有稀疏自動編碼器(sparse AE)、去噪自動編碼器(denoising AE)、收縮自動編碼器(contractive AE)、魯邦自動編碼器(Robust Deep AE)等,基本原理都較為簡單。

該類方法的優點是能夠通過非線性方法捕捉複雜特征,試圖找到正常執行個體的一種通用模式,缺點是如何選擇正确的壓縮程度,以及如何解決“過拟合”的問題(網絡拟合的太好以至于異常執行個體也“潛伏”在低維特征空間中)。為了解決這個缺點,有研究者使用正則化或者記憶矩陣等等方法。

異常檢測算法分類總結(含常用開源資料集)
異常檢測算法分類總結(含常用開源資料集)
  • Generative models

這種方法通常旨在學習生成網絡G的潛在特征空間,使潛在空間能夠很好地捕捉到給定資料背後的常态。将生成模型用于異常檢測是基于在生成網絡的潛在特征空間中正常執行個體比異常執行個體能夠更準确地被産生這一假設。 實際執行個體和生成執行個體之間的殘差被定義為異常分數。

典型案例有AnoGAN、GANomaly、Wasserstein GAN、 Cycle GAN、VAE等。該類方法的關鍵問題是如何設計合适的生成器和目标函數。

異常檢測資料集

異常檢測資料類型

用于異常檢測的資料通常可分為兩類:

序列資料:如voice, text, music, time series, protein sequences;

非序列資料:如images, other data。

異常檢測算法分類總結(含常用開源資料集)

異常檢測開源資料集

下方連結為常用的異常檢測資料集,該git倉庫中維護了多種通用的異常檢測資料集。

https://github.com/GuansongPang/ADRepository-Anomaly-detection-datasets

異常檢測算法分類總結(含常用開源資料集)

下方連結為時間序列異常檢測資料集,該git倉庫中維護了時間序列異常檢測算法相關的軟體、包、資料集等。

https://github.com/rob-med/awesome-TS-anomaly-detection

異常檢測算法分類總結(含常用開源資料集)

開源項目推薦

雲智慧已開源資料可視化編排平台 FlyFish 。通過配置資料模型為使用者提供上百種可視化圖形元件,零編碼即可實作符合自己業務需求的炫酷可視化大屏。 同時,飛魚也提供了靈活的拓展能力,支援元件開發、自定義函數與全局事件等配置, 面向複雜需求場景能夠保證高效開發與傳遞。

如果喜歡我們的項目,請不要忘記點選下方代碼倉庫位址,在 GitHub / Gitee 倉庫上點個 Star,我們需要您的鼓勵與支援。此外,即刻參與 FlyFish 項目貢獻成為 FlyFish Contributor 的同時更有萬元現金等你來拿。

GitHub 位址: https://github.com/CloudWise-OpenSource/FlyFish

Gitee 位址: https://gitee.com/CloudWise/fly-fish

繼續閱讀