Louvain算法在反作弊上的应用
作者 | ANTI
一、概述
隨著互聯網技術的發展,人們享受互聯網帶來的紅利的同時,也面臨著黑產對整個互聯網健康發展帶來的危害,例如薅羊毛、刷單、刷流量/粉絲、品控、詐騙、快排等等,反作弊作為打擊黑產的中堅力量,持續跟黑產對抗著,保證搜索/feed效果的客觀公正,保證廣告主的合法權益。近年來反作弊算法能力持續提升,黑產很難通過大規模機刷方式獲利,已從大規模機刷轉向更加隱蔽的小團伙作弊,因此,反作弊進行了團伙作弊挖掘的探索,Louvain就是比較經典的一個算法,下面詳細介紹下。
二、Louvain簡介
2.1 模塊度定義
模塊度是對社區劃分好壞程度的一種度量,當社區內部的點之間連邊越多,社區之間的點連邊越少時,模塊度越大,表示當前的社區劃分情況越好,公式定義如下:
模塊度是對社區劃分好壞程度的一種度量,當社區內部的點之間連邊越多,社區之間的點連邊越少時,模塊度越大,表示當前的社區劃分情況越好,公式定義如下:
其中表示所有邊權和,表示節點 i 和 j 之間的權重,表示與 i 相連的所有邊的權重和,表示節點 i所在的社區,表示 x 和 y 是否相同,是的話為 1,否則為 0。
公式并不好直接理解,進行一定的變換可得
其中 c 表示社團,表示社區 c 中所有節點的之間的邊權和,表示社區 c 中所有節點與其他節點的邊權和。
模塊度前一項描述的是社團內節點之間的邊權,該值越大,模塊度越大。第二項描述每個社團中所有節點的邊權和平方,分母為常量,當所有節點(嚴格來說是節點的度,即邊權)在不同社區中分布越均勻,第二項越小,模塊度越大。(第二項重要程度與社團實際的分布情況有關,比如風控場景社團大小分布極不均勻,就會導致第二項結果偏大,模塊度偏小,導致模塊度的優化目標與實際場景沖突。)
2.2 算法
louvain 以最大化模塊度為優化目標,根據模塊度公式,整個社區的模塊度可以以各個社區為單位計算后求和得到,louvain算法的流程如下:
初始化
將社團中每個節點都看做一個單獨的社區。
階段1:節點合并
遍歷所有節點,計算當前節點脫離當前社區,且加入到鄰居節點所在社區時,帶來的模塊度增益,把當前節點移動到增益最大的鄰居節點社區中。
每次計算節點 i 從社團 D 移動到社團 C 中時,根據模塊度計算公式可知,此時產生的模塊度變化只與當前C、D社區相關,不與其他社區相關,因此計算成本較低,將節點 i 從社區 D 轉移到 C 中帶來的模塊度增益為:
ΔQ=ΔQ(D→i)+ΔQ(i→C)
直至節點移動不再產生增益,階段1停止。
階段2:社區聚合
將同一個社區的多個節點,融合為一個新的節點,社區內節點之前的權重后續不再使用,當前社區與其他社區之間的權重為兩個社區所有節點的權重和,從而構建出新的圖結構。
回到階段1不斷迭代,直至圖結構不再產生改變。
louvain基于貪心算法實現,實際數據中的平均復雜度為 O(nlog(n)),當每一輪迭代中節點數量降低一半時,能達到平均復雜度。
整體流程如下:
三、在反作弊應用
因黑產作弊的收益較大,作弊者就算冒著違法被抓的風險,也有充足的時間和動力與風控團隊對抗,在實際業務場景中,過去作弊者最常使用的方式是低成本批量機器作弊被我們嚴格打擊殆盡,目前也只能逐步遷移成了高成本小批量團伙人為作弊,這是黑產攻擊方式的演化趨勢,也是風控團隊技術發展的必要趨勢。
我們看一個電商風控的業務場景。少數店鋪為了構造虛假的用戶體驗評分、更優的算法推薦,鋌而走險組建團隊做起了刷單套利、刷評分等非法操作。而商家獲得的非法收益最終卻由用戶買單。為了還原真實的互聯網、給用戶帶來最優質的體驗 ,我們對作弊團伙進行了持續挖掘對抗。
我們基于經典的Louvain算法實現關系網絡模型,將作弊數據中錯綜復雜的關系抽象成數學表達,我們得到層次化的社區發現結果,如下圖所示。其中第一張圖描述了風險賬戶的社區發現結果,第二張圖描述了交易訂單的社區發現結果,精準定位了作弊團伙,攔截作弊訂單/交易,增強了風險防控能力,聯合公司法務部對多個作弊黑產團伙也進行了數次抓捕。
社區發現示例圖一
社區發現示例圖二
四、優化
4.1優缺點
優點
1. 平均時間復雜度較低,計算速度相對較快;
2. 支持定義邊權 ;
3. 包含層次結構的社團,可以依據社團大小、社團特殊屬性來限制最后形成的社團。類似決策樹中根據增益、葉子節點數量來限制節點分裂 。
缺點
1. 多輪迭代,不支持流式系統 ;
2. 最差時間復雜度較大,小概率遇到邊界數據時,耗時較長;
3. 實際情況中數據分布不均勻時,模塊度定義的第二項會產生一定負干擾。
4.2優化思路
模塊度的最優求解本身是個 NP 問題,即時間復雜度為 O(M!),常規數據中無法在短時間內求到最優解。louvain就是利用貪心算法對求解過程做了一定優化,但在 louvain 的基礎上,還可以做以下優化:
1. 利用邊屬性對社團中的邊進行關于合并優先級的排序,能取消louvain的多輪迭代,適配流式計算系統。比如邊介數:社團中任意兩個點的最短路徑通過該邊的次數;
2. 實際數據中社團分布不均勻時,建議降低模塊度中第二項的權重。
---------- END ----------
參考:
[1]原始paper:https://arxiv.org/abs/0803.0476 [2]stanford keynote:http://web.stanford.edu/class/cs224w/slides/14-communities.pdf [3]louvain:https://towardsdatascience.com/louvain-algorithm-93fde589f58c
推薦閱讀【技術加油站】系列:
百度用戶產品流批一體的實時數倉實踐
ffplay視頻播放原理分析
百度工程師眼中的云原生可觀測性追蹤技術
使用百度開發者工具 4.0 搭建專屬的小程序 IDE
百度工程師教你玩轉設計模式(觀察者模式)
揭秘百度智能測試在測試自動執行領域實踐
總結
以上是生活随笔為你收集整理的Louvain算法在反作弊上的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jmeter之BeanShell
- 下一篇: 合肥特殊教育中专学校计算机,安徽省特殊教