基於圖的異常檢測(三):GraphRAD
論文: 《GraphRAD: A Graph-based Risky Account Detection System》
作者:Jun Ma(Amazon),Danqing Zhang(Berkeley)
來源:MLG ' 18
本文介紹Amazon基於圖的欺詐交易賬戶檢測系統,相比LOCKINFER 和 OddBall,本文是面向實際業務設計的檢測系統,並使用了標簽數據。
早期做過十分類似的項目,在可視化關聯分析的基礎上,為案件調查人員提供智能風險團伙分析服務。所以個人還是比較認可的,在整個系統設計及社區發現模塊比較有借鑒價值。
1.背景
應用場景:黑產通過竊取支付信息在Amazon的在線零售商戶購買商品獲利。
假設:在“欺詐社區”中欺詐賬戶間連接緊密,而與社區外的賬戶連接稀疏。
檢測系統目標:給予賬戶之間關系圖和一批黑種子,系統檢測出有潛在風險的社區及賬戶供專家調查。並滿足以下特性:
- 檢測需要做到准實時,以及時止損。
- 返回的可疑社區不能太大和重疊,減少專家工作量。
- 每個賬戶需要有風險評分,專家根據評分決定優先級。
- 目標是對已有規則引擎的補充,額外發現未識別的欺詐賬戶。
2.系統框架
大概思路是:通過最近交易事件提取一批黑種子賬戶,構建賬戶之間關系網絡,然后識別和過濾社區,然后為社區中節點打分,然后返回結果。

流程介紹:
- Transaction Record:交易事件數據查詢接口模塊,交易事件字段包括交易時間、賬戶id、收貨地址、決策引擎結果(Trusted、Fraud、Risky),提供一段時間查詢交易事件的接口。
- Graph Generator:構建賬戶之間關系圖“big-graph”模塊,通過某些共享屬性(如收貨地址等)建立連邊。
- Seeding:篩選黑種子模塊,決策引擎中標記為Fraud 以及 部分Risky的賬戶(根據啟發式規則)。
- Community Detection:局部社區發現模塊,以黑種子賬戶為輸入,識別出圍繞種子的一個個局部社區。算法是Personal PageRank變種ACL,線性復雜度。
- Screen + Merge:過濾及合並:根據風險大小過濾一些局部社區,然后合並成這些局部社區成“big-comm”(局部社區之間會部分重疊,合並減少冗余)。
- Community Extractor:最終社區抽取,基於上面ACL算法得到的基於PPR向量,通過層次聚類得到最終的社區
- Feature Extractor:提取“big-comm”中節點特征,基於交易數據,特征使用決策引擎規則
- Scoring:基於圖的懲罰項,訓練半監督模型,為每個節點評分
最后給專家提供社區結構和節點評分以供調查使用。
3.核心模塊
3.1 構建網絡(Graph Generator)
數據來源:最近的交易事件
例如 有兩個交易事件:
- 交易事件1:賬戶A,收貨地址為:杭州市西湖區蔣村花園23幢
- 交易事件2:賬戶B,收貨地址為:杭州市西湖區蔣村花園23幢
因為賬戶A和賬戶B共享同一個收貨地址,故他們會有一條邊,以此來建立賬戶與賬戶之間關系網絡。
實踐中如共享同一個設備、同一個IP都可以作為連邊條件。
3.2 社區發現及過濾
該模塊是本文的比較有意思的地方,不是對網絡進行全局的划分,而是先以欺詐賬戶為種子節點,找到每一個種子節點所在的局部社區,然后對這一個個局部社區進行過濾和合並成一個大社區,最后對這大社區進行划分,得到一個個不重疊的社區。
這樣做的優勢是:
- 計算復雜度非常低,局部社區發現計算復雜度僅跟輸出的結果線性相關。
- 個人認為還有個優勢是降噪和考慮用戶需求,通過加入黑種子、社區過濾等人為干預方式,降低數據噪聲,控制社區規模和冗余,方便專家進行案件審查。
下圖比較是直觀的一個全局和局部社區發現的對比:

3.2.1 局部社區發現(Community Detection)
以黑種子節點為輸入,使用基於Personal Pagerank局部社區算法ACL,該算法比較經典, 復雜度僅取決於輸出結果。
算法使用電阻率(conductance)作為評價指標(模塊度是全局的):

后面會補上對ACL的解讀。
3.2.2 過濾和合並(Screen + Merge)
因為局部社區發現返回的結果是一個個圍繞着黑種子的局部社區,必然會有冗余
另外局部社區規模非常小,可能是不存在是個體風險,而不是群體風險。
故需要對局部社區進行過濾,本文是先過濾掉規模較小的局部社區,然后對每個局部社區建一個風險評分模型,再過濾掉風險較低局部社區(y怎么定義用什么特征沒仔細說)。
(個人覺得過濾環節不用做太多的操作,簡單原則。另外對社區評分模型不好做的,考驗泛化能力,還不如用規則)
過濾完后再對這一個個局部社區進行合並,組成一個“大社區“(其實就是將所有節點和邊都放在一起)。
3.2.3 社區提取(Community Extractor)
因為局部社區發現用的是基於personal pagerank 的方法,可以得到每個節點的一個pagerank 向量,表示節點與其他節點的相似度。將該一個個向量轉換成矩陣,並用層次聚類的方法得到最終的社區。 社區數量k的設置控制社區規模,方便專家分析。
3.3 節點評分(Scoring)
在“大社區”上為每個節點打上一個分數,方便專家分析時確定優先級及過濾低評分的節點。
本文對比了Node2vec、GCN和在基於圖懲罰項的模型給節點評分,發現基於圖懲罰項的模型效果是最好的(也許是樣本量有限?按理說應該是GCN好)。
基於圖懲罰項的模型即在有監督損失如交叉熵中加入圖的懲罰項(相鄰節點的預測結果是相近的),這樣在訓練時不僅考慮了有標簽節點,也考慮了無標簽的相鄰節點,故稱為半監督學習。
特征是用了決策引擎中的規則,標簽y定義即是否欺詐。
3.4 例子
“大社區“

最終返回的一個個社區


4. 效果評估
該檢測系統目標是 發現更多規則引擎沒有發現的欺詐賬戶,而不是去跟規則引擎去PK,故評價標准是“missed bad” ——檢測到的未發現的欺詐賬戶占比 (通過專家標注,用比例的原因是對於准確率的考量)
首先與隨機抽樣對比,系統每一個模塊的missed bad情況,證明好的系統每一個模塊檢測比例應該是遞增的:
- 隨機抽樣:0.017%
- 經過局部社區發現和過濾合並得到的大社區上:0.054%
- 經過社區提取后:1.51%
- 根據節點評分排序和過濾: 2.77%
上述模塊中的missed bad 沒有考慮,被決策引擎判為正常的欺詐賬戶,故真實結果應該會更高。
另外對比簡單規則——欺詐節點直接相連的鄰居認為是欺詐的對比,GraphRAD檢測還是有比較大的增益的。
