1. 傳統方法
在信貸領域主要有兩種風險:
欺詐風險: 借款人的目的就是騙貸。
信用風險: 又稱違約風險,是借款人因各種原因,不願或無力履行合同條件而構成違約,致使平臺遭受損失。
針對信用風險,需要對借款人的財務狀況、還款意願、履約能力等各方面因素綜合量化評估,並根據風險等級制定不同的差異化定價(不同額度利率)和策略。
白話一點的解釋就是:
業務: 需要訓練一個模型,去預測借款人違約概率,並根據違約概率高低表示信用好壞,信用好的給予更高的額度和更低的貸款利率,針對信用較差的制定更嚴格的審覈,更高的利率。
模型: 傳統是使用評分卡,可解釋性比較好。但現在越來越多會使用機器學習(如XGBoost),快速出結果且效果更好。
特徵: 上圖針對各個維度設計,並保證可解釋性。
樣本: 歷史上是否違約的人羣作爲訓練樣本(都是錢啊)。
2. 複雜網絡
如何將借款人所處的系統抽象成複雜網絡?下面介紹基礎層次和業務層次的抽象,最終得到什麼樣的複雜網絡,以及爲什麼要這樣做。
2.1 基礎層次抽象
從原始數據中提取節點及關係抽象成複雜網絡:
節點:用戶、商戶、公司、設備、LBS、IP/WIFI
關係:社交、消費、就職、使用、位置、上網
2.2 業務層次抽象
物以類聚,人以羣分,一個人周圍鄰居的信用資質可以反應其自身信用資質。
基於上述業務假設對網絡進一步抽象:
節點:用戶
關係:社交、同位置、同設備、同公司、同商戶、同WIFI…
我們爲每個節點附上信用資質,最終可以得到一個複雜網絡。
爲什麼要這麼做?
-
基礎層次的抽象可以供多個不同的業務使用。
-
基於業務經驗對數據進一步精煉 garbage in garbage out。
-
適用同類型節點的算法較多,計算複雜度低。
-
壓縮圖,減少降低噪聲以及緩解數據稀疏性。
目標
我們可以從複雜網絡中抽取什麼信息呢?
鄰居屬性: 鄰居信用資質。
異構關係: 不同關係的鄰居的信息。
拓撲結構: 周圍鄰居的拓撲結構信息
實體交互: 節點資質和鄰居資質是如何交互的?
2.3 挖掘
如何提取以上的信息?
上面的模型都可以是解決方案,但是也存在着一定的侷限:
-
首先GNN是黑箱,解釋性不夠,對於和錢直接相關的業務,對解釋性的要求非常高。
-
穩定性:金融模型上線會運行很久,對穩定性要求較高。
-
性價比,雖然對圖經過了壓縮,但是也有億級別規模,落地成本比較大,包括訓練架構、算法優化等等。
如何解決這些侷限性呢?
拆解上面算法,提取關鍵模塊,用數理統計方法解題:
- 聚合直接相連鄰居特徵:參考單層卷積的aggregator操作,其實也就是對鄰居特徵不帶參數求mean、max、加權平均;
- 獲得k跳鄰居特徵及拓撲:可以嘗試多層遞歸卷積 / 社區發現;
- 與鄰居特徵做交互:拼接、比較、平均;
- 如何融合異構關係:每種關係網絡都通過上述方法衍生特徵,不同業務通過模型來學習權重。
2.4 工程落地
某場景:借款人提交完認證資料後,觸發信用評估並返回額度和利率,對時效性要求較高。
離線+實時 實現t跳鄰居特徵計算
離線:T+1計算好所有節點(t-1跳)特徵,存儲在HBASE上。
實時:借款人提交完資料後,實時查找其一跳鄰居(如mysql),調用HBASE查找每一個鄰居特徵,並聚合和交互生成特徵。(一跳計算實時可以滿足,如果誰說二跳計算實時也可以支持那就牛逼了)。
複雜網絡在風控中更多是“找黑的”,比如反欺詐規則關聯 N 個黑名單,N 箇中介,以及團伙挖掘等。
本文是從“找白的”角度下介紹複雜網絡在信用資質上的應用,方法具有普適性,在找黑的上驗證效果也不錯:)。
如果精力/資源有限,建議優先選擇某類關係和某些節點特徵進行實驗:
關係選擇: 優選覆蓋度較高、噪聲低、符合業務直覺的關係,如社交、支付,像LBS雖然覆蓋度高,但是噪聲也是比較大,在使用時需要謹慎。
節點特徵選擇:優先選擇已被驗證效果不錯的特徵,如收入、信用額度等。
另外值得注意的是,比較容易數據穿越,有多個時間需要考慮,如”申請時間“、“建立關係時間”、“特徵時間”等。
2.5 具體實踐
2.5.1 聚合一跳鄰居特徵
一跳鄰居即直接相連的鄰居,我們需要設計一個聚合函數,在考慮關係權重的基礎上,如何表示一跳鄰居特徵分佈。
如下圖所示,假設是關係爲親密度、節點特徵爲收入,如何聚合借款人不同親密度的鄰居收入特徵?
我們可以設計這樣的聚合函數來加工信息(不考慮未知):
簡單平均:
假設不同親密度的朋友對借款人信用風險的影響是相同的(假設收入一樣)。
加權平均:
假設親密好友收入高低對借款人信用風險影響較大。
最大值:
假設親密好友收入高低對借款人信用風險影響較大。
哪個聚合函數效果比較好?不同聚合函數的業務假設是不同的,建議都使用。特徵工程即把可能有用的特徵都加工出來,再通過 y 做特徵選擇。
特徵取值“未知”,怎麼處理?因爲未知其實也可能包含信息,建議聚合計算分考慮未知和不考慮未知進行計算。
鄰居特徵是離散的,怎麼聚合?轉換成one-hot編碼,計算在屬於某個類別鄰居比例。
2.5.2 聚合多跳鄰居特徵
問題:鄰居數量隨着“跳數”增加而指數增長,直接獲得借款人多跳鄰居比較困難。假設平均節點度爲100,那麼每個借款人一跳鄰居數量爲100,二跳鄰居1002,三跳鄰居1003。
下面介紹“多跳遞歸傳播”和”社區發現“這兩種方法
2.5.2.1 多跳遞歸傳播
以計算二跳鄰居特徵爲例,該方法大概的思路是:將當前節點的二跳鄰居特徵傳播到一跳鄰居上,然後將一跳鄰居新特徵再傳播到當前節點。
細節:
-
因爲每次傳播只會涉及直接相連的鄰居,故計算複雜度大爲降低。
-
原文前向傳播計算是帶參數W的,這裏簡化爲將所有參數相等(因爲是特徵工程,不是學習,故會損失一些信息)
-
對鄰居節點進行固定數量抽樣,而不是取全部(避免數據傾斜),採樣方法使用計算複雜度爲O(1)的Alias Method。
-
遞歸實現,每輪對所有節點聚合其鄰居(隱)特徵及交互,並更新節點特徵,作爲下一輪輸入。
-
第一輪得到所有節點一跳鄰居特徵,第二輪得到二跳鄰居特徵,以此類推。
2.5.2.2 社區發現
大致思路:通過社區發現算法將graph分成一個個社區,然後計算每個節點所屬社區的特徵,如社區中黑名單比例、社區中平均收入。
這種方法相當於對多跳鄰居根據拓撲結構進行了分類(社區),故額外提取了網絡中拓撲結構信息。
工業界graph規模比較大,一般會用Louvain,速度快,效果也不錯,下面是spark版本實現:
https://link.zhihu.com/?target=https%3A//github.com/Sotera/spark-distributed-louvain-modularity
2.5.3 實體間特徵交互
聚合鄰居特徵h1後,如何與自身特徵h2做交互?
拼接:直接將h1拼接作爲其一個新的特徵
比較:h1-h2 或者 h1/h2 。例如求鄰居平均收入與借款人自身收入差距較大,是否有異常?
平均:(h1+h2)/2。
最大值:max(h1,h2),金融是重召回的,若特徵表示風險程度,這樣即取最大風險。
2.5.4 處理不同異構關係
將異構關係拆成多個單一關係,每個關係都經過上述方法生成特徵,供下游不同場景使用。
這樣做的好處是:不同關係權重在不同場景是不同的,應該是通過這些場景的y去學習。
形式化描述:
有種類型關係,則可以拆解爲個graph:
將上面提取graph特徵方法記爲
對每個,都可以通過方法 提取特徵
將不同的作爲下游任務的輸入特徵,根據任務目標來賦予權重。
借鑑螞蟻處理異構網絡的思路:
https://zhuanlan.zhihu.com/p/59666737
3. 附錄
3.1 不同社區發現算法比較
在實際小規模graph上對比了主流的社區發現算法,Louvain在劃分社區質量和劃分穩定性上均表現不錯的,且能分佈式實現。
3.1.1 社區發現算法
-
Walktrap:基於隨機遊走的社區發現算法 《Computing communities in large networks using random walks》
-
Leading Eigenvector:基於特徵矩陣求模塊度,自底而上定層次聚類《Finding community structure in networks using the eigenvectors of matrices》
-
Fast-Greedy:自底而上的層次聚類《Finding community structure in very large networks》
-
Louvain:基於模塊度最大化的算法《Fast unfolding of communities in large networks》
-
LPA:基於標籤傳播多社區發現算法 《Near linear time algorithm to detect community structures in large-scale networks.》
3.1.2 實驗graph
下面是脫敏後的實驗網絡的規模:
3.1.3 劃分質量:模塊度指標
3.1.4 劃分數量合理性
3.1.5 可視化
這是louvain劃分的某個graph的可視化效果(繪製工具:gephi)
感謝
參考原文:https://zhuanlan.zhihu.com/p/90813791