鬥魚大佬分享!基於圖的團伙挖掘算法實踐

2019-09-23 11:08:11

來自公眾號:極驗


AI-Talking

嘉賓:王璐

編輯整理:蘿蔔兔

嘉賓簡介

本期我們邀請到的分享嘉賓是來自鬥魚的算法工程師王璐,曾先後在阿里、鬥魚從事推薦、風控等方向的算法工作,目前致力於圖算法在風控業務中的應用落地。


本次分享的主題是《基於圖的團伙挖掘算法實踐》,主要包括三個方面:

  • 團伙定義和特點

  • 團伙挖掘流程和方法

  • 經驗與總結


團伙的定義和特點


我們這裏所指的團伙是網絡中的黑產團伙,這些團伙主要從事網絡上的薅羊毛,刷單等非法活動,和金融場景中的團伙定義還是有一些差別。主要特點表現為:

1、 團伙賬號規模較大;

2、腳本或者軟件操控;

3、每個賬號一次惡意行為獲利較少;

4、短時間行為頻次高,賬號之間具有同步性和聚集性。

如上圖所示,橫軸是時間軸,縱軸是賬户 ID,可以看到,有風險的賬户在時間上面的聚集性是非常明顯的,而正常賬號的行為是比較分散的。


團伙挖掘流程和方法


建立關聯關係

主要就是需要從業務實際出發,去建立一個有業務含義的圖。這裏的關聯關係,可以是有向圖,也可以是無向圖,根據業務而定。不過,我們期望的圖一般是有權重的,因為沒有權重的圖在後面做社區檢測的時候,可能會不太好用。


如何建立關聯關係呢?

建立關聯關係的方法還是有很多的,這裏我們簡單的介紹幾種。


使用資源的關聯做圖的構建

原理就是賬號之間有一些資源會重複的使用,比如設備、IP、手機號碼、身份證號碼等。關聯的方法很簡單,比如説在某個時間窗口,某個賬號使用了某一設備,我們就可以把兩者關聯起來。這時候可以構建一個二部圖,節點就是賬號和設備,邊就是兩者之間的關係。當然,也可以不構建二部圖,比如兩個賬號使用了同一個設備,那麼兩個賬號之間就有關聯。


這種構圖方法的缺陷是,黑產會偽造設備ID 以及使用 IP代理,這時候設備和 IP 的重用就變得很低了。還有一點是這個關聯可能是有誤的,比如一些網吧、機房等,這種有誤的關聯可能最終反應在誤差上面。


採用行為同步性

黑產的特點是在短時間內有高頻的行為,所以在非常短的時間間隔內,如果兩個賬號的行為非常趨同,那麼可以在兩個賬號之間建立關聯。構建的方法可以參考 Facebook 的論文《Uncovering Large Groups of Active Malicious Accounts in Online Social Networks》[1]

U是指賬號,T是指行為發生的時間戳,C就是限制資源(兩個賬號有相同的行為,使用同一個 IP,或作用對象一致都可以作為限制資源),如果兩個賬號的行為的時間間隔小於 Tsim ,那麼可以認為這兩個行為是一致的。


我們可以通過上述的方式對賬號與賬號之間的相似行為的次數做統計,統計之後可以根據次數或者距離做關聯。


這種方式建立關聯需要注意的就是區分事件和時間段。


採用相似度

原理就是團伙賬號之間他們在屬性和行為上有很高的相似性。構建的方法就是構建賬號之間的相似度,如果兩個賬號之間的相似度高於某閾值,則賬號之間會形成一條邊。這裏最主要的問題就是計算相似度,有兩種方法:


採用自定義的距離公式和權重,自己定義每個維度的計算公式和權重。

距離和權重過於依賴人工,難以確定,只有在計算維度較少時可以這樣做。


另一種就是對賬號進行Embedding,可以基於序列,也可以基於圖結構,採用餘弦距離計算相似度,這種方法更具有通用性。


若干弱的特徵組合

原理就是團伙賬號在一些弱信息上面具有一定的共性。構建的第一步需要抽取一些具有業務含義的屬性或者指標,如果多個賬號都滿足這個指標,就把這些賬號看成一個團體,然後採取一些社區分析的方法對團隊進行分割成個個子簇,最後將子簇看成一個節點。這個圖的節點就不是一個賬號了,而是一個賬號集合。然後再通過相似度等方法再來生成節點之間的關聯關係。


這種方法需要有一個篩選的過程,特徵的選取最好有一定的業務意義,並且具有一定的區分性。


上述四種就是常見的構圖方法,完成了構圖之後,就要進行團伙發現。


團伙發現

團伙發現我在這裏主要講兩種方法,一是連通子圖或強連通子圖,二是 Graph Partition 。


連通子圖

這種方法的優勢是,在當前連接下可以得到的最大規模團伙。當建立的關係非常可靠(邊相連的兩個頂點是一個團伙的概率非常大)時,使用連通圖查找就可以到達不錯的效果


主要的問題是:

存在度數很高的節點,使得劃分後某些社區規模很大,沒有起到團伙挖掘的作用;

噪音數據會帶來誤殺,為了保證準確率會犧牲較多的覆蓋。


解決上述問題的一些方法,可以參考論文[2]


Graph Partition 

Graph Partition 的主要思想就是怎麼樣把圖上的頂點進行切分。既然要切分就需要一個度量的準則,一般我們是希望切分之後,社區內部的節點之間關係比較緊密,社區內部與社區外部的節點之間聯繫比較稀疏。所以解決這個問題的一般方法就是定義一個優化目標。


兩種處理方式,一種是圖分割:

這兩種是局部切分的度量準則,圖分割劃分的社區數量是要事先設定的,不太靈活,所以平時用的並不多。


第二種就是基於模塊度(pModularity-based)的方法,主要思想就是定義一個全局的優化目標,採用啟發式算法尋優。我們在這裏講兩種:

參考論文[3][4]


我們可以根據自己的業務特點去定義合適的全局優化指標和社區合併條件。


團伙驗證

我們發現團伙之後,需要去驗證一下,看是否是真正的團伙。需要一個評價方法去評價團伙。評判的標準主要分為兩個方面,一是嫌疑度,二是聚集性。


嫌疑度一般就是基於一些已有的經驗,規則,看一下團伙中被識別為黑產的團伙佔比有多少。團伙的規模也是一個很重要的指標,規模很大的化,是黑產的可能性就大。還有就是從圖的基本統計指標入手,比如社區內部的 density,還有特殊形狀的統計(三角形狀,環狀)等。


聚集性分析,一是看團體成員是否在某些屬性或者行為上表現出了一致性,二是看團體整體的Profile 是否與團伙中已知黑賬號的 Profile 類似。


經驗與總結


  1. 對團伙要有業務上的認識,不是臆想出來的;通過具體的case分析,瞭解模式並制定相應的算法。

  2. 構建關聯是團伙挖掘最核心的內容,節點和邊的定義非常重要,抽象成圖依賴於業務的理解。

  3. 團伙發現算法出來的結果可能不能直接使用,需要對團伙進行精修(合併、細分和剪枝)。

  4. 通過圖算法挖掘出來的團伙,需要引入業務經驗進行驗證和定性。


互動問答


1. fraudar 和直接用社區發現找社區有什麼區別?

回答:基於模塊度的方法都是去直接定義一個最優化的指標,區別有兩點,第一是定義的指標不一樣,第二是尋優算法有差異,不過大體上的套路是長不多的。


2. 對於Fraudar算法,算法大體上採用貪心的算法串行的刪節點並記錄當前的密度指標,這種算法對於大數據集下有效嗎?

回答:對於大數據來説,這種尋優的算法效率肯定是不高的,可以改成一些並行的算法。


3. 對於存在節點度長尾分佈的場景,這些基於社區發現如何避免自然密集的簇導致的誤判?

回答:這就是講的團伙驗證的內容,通過團伙驗證可以對團伙的屬性做一個評估,主要還是嫌疑性和聚集性兩個方面。也可能會有單個節點的誤判,這個就採取一些方法,把明顯不同模式的節點剔除掉。


更多資源

[1] https://www.eecis.udel.edu/~ruizhang/CISC859/S17/Paper/p19.pdf

[2] https://www.usenix.org/legacy/events/nsdi09/tech/full_papers/zhao/zhao.pdf

[3] https://arxiv.org/pdf/0803.0476.pdf

[4] kdd.org/kdd2016/papers/files/rfp0191-wangAemb.pdf

回看鏈接戳原文閲讀




●編號889,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

開源最前線

已同步到看一看
在看



熱點新聞