MIDAS: Microcluster-Based Detector of Anomalies in Edge Streams
- paper
- official github (C++ version)
- dataset
0 前言
基於動態圖譜 dynamic graph 來做異常偵測 anomaly detection,像是財務詐欺、網路入侵或是社群垃圾郵件。至2020年止,現有的方法大多專注於 individually surprising edges,但是這種方式將可能錯失大量可疑活動。因此,在本篇中提出MIDAS,主要專注於microcluster anomalies(後續將詳細解說何為microcluster),像是DNS attack, lockstep behavior。而本篇的三大貢獻在於:
- 提出False Positive probability的理論上限與下限
- 在合理的記憶體與時間內,較 sota(state-of-the-art)快上108 - 505倍
- 能夠提升比 sota 高出 46 ~ 52% 的準確度(AUC)
以下將由問題定義出發,解說MIDAS演算法,最後講解實驗與結論。
1 問題
1.1 三大目標
相較於上圖中的前兩篇論文,除了先前研究就已經能達到在洽當的記憶體使用量與運算時間達成異常偵測,更多了microcluster detection 和 False positive probability,以下有詳細定義。
- Microcluster Detection: 這裡的 microcluster 定義為短時間內爆量的活動,含有重複的 edge / node。
- Guarantees on False Positive Probability(提出偽陽性的範圍): 給予任何一個使用者定義的probability level ϵ {ϵ} ϵ (e.g. 1%)。
- Constant Memory and Update Time: 記憶體的使用量和計算時間,不可隨拓樸的node 或 edge 漸多而增加。
1.2 符號定義
首先,會有一個隨時間演進的 graph 記作 G \mathcal{G} G, 所有 node 的集合記作 ν {\nu} ν ,至於 stream edges 記作 ξ = { e 1 , e 2 , e 3 , . . . } {\xi =\{e_1, e_2, e_3, ...\}} ξ={ e1,e2,e3,...} ,而每個 edge 記作 e i = ( u i , v i , t i ) {e_i = (u_i, v_i, t_i)} ei=(ui,vi,ti) , u ∈ ν {u \in {\nu}} u∈ν 表示source node, v ∈ ν {v \in {\nu}} v∈ν 表示destination node, t {t} t 則表示這個 edge 加入的時間。因此這個 ν {\nu} ν 並非事先就定義好的,有可能因為後續有新的 node 或是 edge 加入而擴增。
若是要實作的話,可以實作於 directed graph,undirected graph 以及 multigraph。只是套用在undirected graph 必須先自行將一條 edge 生成雙向的資料,而這裡的 multigraph 指的是 edge可以被同一個 pair 的 sourceIp 和 destinationIp 多次生成。另外,在不同時間點的 edge 是可以同時給予的,因為在很多應用中時間都是以離散方式處理的。
2 MIDAS演算法
2.0 三大前提
- 假設使用的都是 streaming 資料且是 hypothesis testing based
- 事先定義好什麼樣算是 anomalous,並且設定 probability level ϵ {ϵ} ϵ
- 除了上述兩點,額外考量Incorporating Relations 像是:時序關係 (temporally) 與空間關係(spatially) 在此稱作:MIDAS-R。其中空間關係指的是相鄰的nodes
基於 MIDAS: Streaming Hypothesis Testing Approach,以下舉例一個microcluster的例子
上圖中觀察單一的 edge,可以看到在 t = 10 {t=10} t=10 出現一個較大型短時間內暴增的活動量。以上圖為例子,當時間到達 t = 10 {t=10} t=10 時,以 S u v {S_{uv}} Suv 來表示 t < = 10 t<=10 t<=10 之前所累積的 edge 內容,另外以 a u v {a_{uv}} auv 紀錄每一個單一時刻的 edge,像是 t = 10 t=10 t=10 這一時間點的 edge內容,並且在下一個時間點重置 a u v {a_{uv}}