天天看點

實際風控工作中的五大挑戰!

作者:桔了個仔,南洋理工大學,Datawhale成員

前言

在​​上一篇文章​​中,我們用kaggle的資料集來做了一篇評分卡教程。

當然,實際風控中如果有這麼簡單,那我就得失業了。這一篇來講講實際風控産品化的路上,我們還會遇到哪些挑戰,作為資料科學家(也有的公司叫算法工程師),我們是如何解決這些問題的。

雖然本文篇幅6000多字,依然未能詳盡的講述在實際風控産品中的挑戰。那本文就當抛磚引玉吧。本文僅講到“資料科學”部分的挑戰,至于”資料工程“方面的挑戰,例如建資料倉庫,ETL,上雲等等的這些,本文就先展示不講了。也歡迎各位搞風控的大大在評論區講講你們在風控過程中遇到的挑戰。文章有點長,如果在手機看到,可以先點贊收藏标記着,回頭再讀。

0.挑戰在于算法之外

每次别人問我算法工程師的工作内容是什麼,是不是天天寫模型,調參數,我都喜歡發這個圖過去。圖來自論文Hidden Technical Debt in Machine Learning Systems

實際風控工作中的五大挑戰!

當然,這裡面有一部分并不需要我來做,例如Serving Infrastruture,運維會幫我弄好。作為一個風控領域的資料科學家,說實話,寫機器學習代碼的時間占用我日常工作時間不到十分之一吧。我的工作需要面對算法之外的挑戰。如果你是風控領域有一段時間工作經驗的人,你一定會覺得我下面要說的内容已經熟悉了。如果你是小白,想面試風控算法崗位,那如果你能參透本文,了解這些挑戰,并且講給面試官聽,他一定會對你刮目相看的。

1.定義目标變量(good/bad)

如果你不熟悉風控,你也許不會想到,雖然目标變量隻有good和bad兩種,但定義目标變量的過程竟然如此複雜,以至于這個問題我需要花一兩千字來講解。

在上一篇文章裡用到的資料裡,兩年内逾期超過90天定義為bad,否則都為good。但你有沒想過,這個目标是如何定出來的呢?雖然Kaggle的資料集和實際生産環境的不一樣,但也不是随便給的。如果你認真觀察,這個label的定義是由兩個因素決定的:

  • 逾期天數(超過90天)
  • 觀察期(兩年内)

你也許會想,那麼這兩個數字是如何決定的呢?為啥還要這麼麻煩,直接逾期第一天就去催收不行嗎?在實際業務中,既要保證壞賬最小化,也要保證催收的體驗,你總不能人家到期第一天忘了還10塊錢的賬單就派人上門催收吧?客戶都給你趕跑了。

實際風控工作中的五大挑戰!

1.1 逾期天數-遷徙率(Flow Rate)分析

在Reference[1]有個部落客寫的不錯,但他的做法是先設定觀察期,再看表現。而我的做法不一樣,我的做法是隻看每個月的的賬戶在下個月的表現。

我們這裡先定義兩個概念:

  • 時間視窗。每個時間視窗由一個月和下一個月的資料構成。例如我拿一年的資料,例如2019年,就有11個觀察視窗(1-2月,2-3月....11-12月)。
  • 逾期期數。每個期數由30天組成(有的銀行或者金融機構由自然月組成,會更加友善計算)。較多的金融機構會用Mn來形容逾期情況,例如
  • M0:目前未逾期
  • M1:逾期1-30日
  • M2:逾期31-60日
  • M3:逾期61-90日
  • M4:逾期91-120日
  • 以此類推......

在下面的表裡,縱坐标是前月的逾期期數情況(時間視窗左邊界),橫坐标是次月的逾期期數情況(時間視窗右邊界)。裡面的數字是怎麼計算的呢?例如我們隻有兩個時間視窗。在時間視窗【1月-2月】裡有50個客戶保持未逾期,【2月-3月】有100個客戶保持未逾期,那麼坐标[1,1]的總數會是150。

假設經過分析2019年11個時間視窗後,我們得到以下一個統計表:

實際風控工作中的五大挑戰!

所有時間視窗的遷徙情況總和

轉換成百分比,并根據值的大小,用顔色标出來。

實際風控工作中的五大挑戰!

所有時間視窗的遷徙情況百分比

其中我們隻關注黑色框框的部分,也就是彩色的部分。為什麼呢?很簡單,那些已經好轉了的賬戶我們不管了,因為不是我們的催收對象,我們需要看的是逾期情況沒有好轉甚至惡化的客戶。一個時間視窗内你的逾期情況最多往前一格(遇到天數為31天的有可能小機率逾期兩格,但較少發生,統計時可忽略)。用直白的語言說,就是你現在逾期10天,給你一個月,你怎麼也不可能逾期超過60天吧?

好,回到正題,遷徙情況百分比能說明什麼呢?說明了某個逾期期數的風險情況。我們這裡用“從良”這個不太恰當但好了解的詞來形容賬戶逾期期數變少。例如在上表裡,當逾期<30天時,54.69%的客戶都會在下個月還上款(因為大機率是忘了還款日而不是沒錢還);而這個月逾期在[90-119]天的有42.02%的客戶的逾期期數會繼續增加(确實手頭缺錢還不上),25.21%的客戶逾期期數會保持不變(手頭緊,僅還得上一期的欠款以確定賬戶不會被清算)。也就說是,當逾期天數超過90天,客戶“從良”的機率隻有(100-25.21-42.02)% = 32.77%。也就說,很大機率這個客戶的情況會一直惡化下去,是以我們需要在他惡化前,就挑出來催收,以減少損失。

至于“從良”的百分比低于多少就不能接受,則需要和商業部門溝通。但從良的少于1/3确實挺少了。

不過這裡需要澄清下,這裡并不是指逾期真的超過90天才催收,而是說,我預測這個人将來會逾期超過90天,是以我在他達到那個逾期時間前就去催收,避免嚴重逾期的發生。

1.2 觀察期分析 ——elbow method(手肘法則)

剛才我們通過分析,确定了目标裡的逾期天數是90天以上。那麼目标裡的觀察期是如何做的呢?

一個客戶開始逾期後(超過一天),要達到90天以上的逾期少則需要3個月,多則可以無限多個月。如果觀察期短了,我們會漏抓了很多客戶,如果觀察期太長,例如無限長,你确實能抓住100%的逾期在90天以上客戶,但觀察期太長了,逾期的客戶一直沒人理就會一直惡化。是以一個合理的觀察期很重要。

為了找到一個合理的觀察期,我們需要分析逾期月數與逾期客戶總數的情況,例如再某個銀行,通過分析,我得到一個逾期月數與逾期客戶數的情況表:

實際風控工作中的五大挑戰!

可以看到,逾期90天以上的客戶,95%的都發生在6個月内。但你也許會說,9個月能檢測到97%,不是更好嗎?但記得經濟學裡的“邊際效用”這個詞嗎?意思是再增加投入,新增的産出會變少。用一個知乎上熱門的詞語來形容,就是“内卷”。我們分析時也是。再追加一個月觀察期,對效用的提升不明顯,反而引入更多風險。當“内卷”發生時,就不再增加觀察期了。

是以我的經驗是用elbow method,也就是尋找曲線的“轉折點”,就像手肘一樣。(如果你熟悉k-means,那麼你可能記得,在k-means裡,我們決定怎麼選擇k值的一個算法是elbow method。這裡就不展開講k-means了,如果真的不熟悉,也不影響本文閱讀)

把上表plot出來,得到下面一個圖,其中轉折點(或者說‘手肘)用紅圈劃出來了:

實際風控工作中的五大挑戰!

可以看到,但觀察期為6個月時,我們能抓到的逾期客戶已經很多了。再加一個月,能抓到的增量也很少了,邊際效用明顯降低了很多。是以我們就可以把觀察期設定為6個月。

對于普通的信貸産品,一般情況下這個轉折點還是很好觀察到的。但看到這裡你也許想問,如果沒有明顯的轉折點(elbow),該怎麼抉擇呢?這就複雜了。但如果你的信貸産品真的找不到一個明顯的elbow point,你畫出來的曲線比上面的曲線平滑得多,怎麼辦呢?

這确實是一個難題,且沒有一個标準的答案。但你可以和商業部分探讨下面幾個問題:

  • 當逾期超過90天的客戶比例是多少時,我們的資産會出現虧損?然後你可以以這個比例作為嘈參照,選擇響應的觀察期。
  • 逾期90天是不是一個好的選擇?能不收緊标準,把逾期天數檢測縮短到60天,這樣做對客戶體驗造成什麼影響?

2.特征建構方式

不像kaggle比賽裡那麼簡單,在實際業務中,很多時候特征是需要自己建構和挖掘的。建構特征的思想有幾點:

RFM-V架構

哈哈哈,别去google這個詞,這是我編的名詞,純粹是為了讓大家友善記憶哈哈哈,是我從RFM模型上得到的啟發。RFM模型在的客戶關系管理(CRM)的分析中常常用到。RFM其實不是一個模型,隻是常用的建構特征思想。

RFM分别代表:

  • 最近情況 (Recency):近期的情況對風險影響大于遠期的。
  • 頻率 (Frequency):使用頻率,聯系頻率。
  • 金額 (Monetary):刷卡金額,貸款金額。

不難了解上面三種情況都和客戶風險有直接關系吧?而V代表Velocity,既速度。例如我過去1個月刷卡次數為10次,而過去六個月平均每個月刷卡次數5次,那麼這個Velocity = 10/5=2。當速度大于1時,表示某個特征的值在加速增加,小于1時,表示速度在減少。

V和R類似,但又不同,V是近期情況和遠期情況的比較,R僅為近期情況。

V還可以跟F,M自由組合。例如V和F的組合可以得到例如“最近刷卡頻率增加,風險有可能上升”的資訊,V月M的組合可以得到例如“最近消費激增,可能風險上升”的資訊。

WOE變換

這個技巧在上一篇裡面也用過了。本質就是把非線性的特征轉換成線性的特征, 這對于邏輯回歸等泛線性模型是非常必要的。

實際風控工作中的五大挑戰!

WOE可以把非線性特征轉換成線性的

具體變換過程這裡就不再贅述了。如果對WOE不熟悉的朋友可以看看我之前的文章。上面那張圖就是我那篇文章的裡的。文章連結[桔了個仔:WOE編碼為啥有效(https://zhuanlan.zhihu.com/p/146476834)

Vintage分析

除此之外,Vintage分析也是幫助建構特征的方法。本來想自己寫一篇的,但Reference[1]裡的兄弟寫得太好了,我就不再寫多一遍了,可以點開看他文章的part2.

3.穩健性

這裡就和機器學習模型有點關系了,也就是我在文章前面說到的“用時不到10%"的部分。雖然耗時少,但對于模型的效用來說,确實至關重要。

3.0 增強穩健性的通用方法

首先講講通用的增強穩健性的方法。即使你是做其他領域的資料科學或者深度學習,也會有所接觸。

  • 加擾動。就像訓練CNN識别圖檔時,我們會做”資料增強“,也就是選擇、拉伸、增加白噪聲等方法增加資料,在風控裡,我們也可以對訓練資料進行”資料增強“。但我的做法比較保守,剛好由于資料一般都是标簽不平衡的(一般5%左右的bad rate),我隻SMOTE方法來對bad的部分進行upsample。SMOTE方法通過對bad的部分加擾動,産生新的資料,這樣就能平衡訓練集中的各标簽比例。
  • 使用統計特征。舉個例子,例如逾期5000塊在2000年是很嚴重的逾期,意味着高風險,但在2020年,這是低風險的。如果隻用金額,那麼模型的預測會失效。我們可以用統計特征來代表實際值。例如使用Z-Score,z的絕對值值越高,代表他和其他客戶的差異越大。

風控領域由于對解釋性有一定要求,是以很難使用神經網絡等複雜模型或者深度學習模型。一般來說,是泛線性模型(例如邏輯回歸)和基于樹的模型(Decision Tree, RandomForest, XGBoost)等。對這裡兩種模型,也有不同的增強模型穩定性的方法。

3.1 對于泛線性模型(例如邏輯回歸)

對于邏輯回歸模型,單個變量的變動會影響模型的輸出,而且這種影響是線性的。這會造成兩個因素影響穩定性:

  1. 例如我的模型其中一個特征是逾期金額,逾期十塊和逾期二十塊對于銀行來說都是小事,但在模型的某一項裡,影響是雙倍的。
  2. 對outlier值處理複雜

解決方法:

  1. 為了模型的穩定性,我們可以對某些連續變量進行分箱,使其變成離散變量。這也是前面WOE的思想之一。這時候小于100塊的都分到一個組,那麼你欠銀行一塊錢和99塊錢都是一樣低風險。
  2. 分箱後,outlier會自動轉換成變成分箱的最左或者最右的那一類。例如我們的客戶裡年齡最大的不到100歲,那麼我們可以每十歲設定一個分箱,那麼可以有[-∞,10],[11,20],....[90,+∞]等十個分箱。這時候有個客戶不小心年齡20歲輸成200歲,那麼這麼年齡也不會無法處理。

3.2 基于樹的模型

由于樹的split是基于門檻值的,使用基于樹的好處就是相當于模型給你自動分了箱。對于決策樹,資料的準備往往是簡單的甚至是不必要的。數的另一個好處是對波動不敏感。資料分布發生微小偏移時,仍能表現穩定。

但使用單棵決策樹容易過拟合。為了防止過拟合我們一般會:

  1. 修剪枝葉。但是需要大量的分析與嘗試,是以我極少使用單科決策樹作為模型。我一般用下一種方法。
  2. 使用RandomForest。RandomForest是用訓練資料随機的計算出許多決策樹,形成了一個森林。這種方法背後的原理可以用“三個臭皮匠定一個諸葛亮”這句諺語來概括。随機森林在解決回歸問題時,并沒有像它在分類中表現的那麼好,這是因為它并不能給出一個連續的輸出。但在訓練資料足夠大的情況下,由于

除此之外,我還會用到XGBoost。XGBoost也是基于樹的模型,是以決策樹在穩健性方面的好處它也有。XGBoost具有非常好的非線性拟合能力,以及對超參數的魯棒性,是以在Kaggle比賽中大家都在瘋狂用。但依賴統計特征,特征的準備需要積累一定周期才有足夠置信度,不過在信貸風控場景下,我的項目都有超過一年的資料,使用效果還是很好的。

但無論如何,穩定性無論做得多好,模型總有效用遞減的時候。關于如何監控模型,第六章會講。

4.評價名額

模型來說,大家都用AUC。對于二進制分類,這個方法是很常用的。但是對于不平衡資料且bad rate會有變化的資料,AUC的效果容易失真,是以僅僅看AUC,對模型的性能了解是失真的。除了模型性能,還有其他名額也是需要參考的

KS(Kolmogorov-Smirnov)值

KS值評估模型的區分度(discrimination)是在模型中用于區分預測正負樣本分隔程度的評價名額。KS的計算方法直覺解釋例如下圖,綠色為預期bad rate累積函數(因為是累積的,是以最高點為1),藍色為good rate的累積函數。他們之間最大的內插補點為KS值。用公式來講,就是KS=max(TPR-FPR),也就是召回率-誤診率的最大值。

實際風控工作中的五大挑戰!

那麼KS怎麼看呢?怎麼知道模型的差別能力好不好呢?這裡有個标準,僅供參考,實際應用時可以稍微改改,但一般來說KS越大越好。

實際風控工作中的五大挑戰!

效用提升(LIFT)

效用提升的計算等于模型捕捉到的bad rate 除以随機捕捉到的bad rate。例如下表,按照預測的風險排序分成1-5箱,其中1位最高風險,5為最低風險。如果随機把客戶分成5箱,那麼每箱裡面的bad rate應該都是5%。但是通過模型來預測,我第一箱抓到的bad客戶應該是最多的。例如我看第一箱的LIFT,計算方法為模型抓到的12.5%的bad,那麼效用提升就是250%。也就是說,你之前要催收125個客戶才能達到的回款效果,通過我的模型,現在隻需要催收50個,節省了你60%的催收成本。

實際風控工作中的五大挑戰!

你可以把第一箱定位高風險,也可以把第一二箱都看為高風險。當你通過這個新的政策,催收前兩箱,也就是40%的客戶時,你能抓到(25+10)=35個壞客戶,也就是70%的壞客戶,那麼LIFT就是70/40=175%。

當LIFT=100%時,說明模型沒啥用,等于瞎猜。

群體穩定性名額(Population Stability Index,PSI)

PSI是評價樣本穩定性的名額,不僅可以評價樣本的總體穩定性,也可以評價某個特征的穩定性。需要注意的是,PSI并不是直接評價模型性能的名額。

PSI的計算很簡單,公式為:

PSI = SUM( (實際占比 - 預期占比)* ln(實際占比 / 預期占比) )。

Reference[6]裡的文章很好的解釋了PSI的概念與計算,還有代碼實作,我這裡就不再贅述了。

在産品運作過程中,如果看到模型的AUC下降了,但你又發現PSI上升了,說明你需要用新的資料集來訓練新的模型了。

5.解釋性

由于銀行監管要求,風控模型需要滿足解釋性要求才能準許上線使用(不知道網際網路金融公司有沒這個要求),是以模型不是能預測就行的,我們需要對兩個方面進行解釋:

特征層面

做特征組合時,你需要讓特征有意義。假如你通過各種組合,發明了一個特征,發現用他的月收入除以他家房子的面積數,得到的特征與風險有較強關聯,那也是不可用的。月收入金額除以房子的面積數這種組合是不好了解的。但如果你真的發現這種奇怪的組合特征很有用,你需要換個思路,用有意義的特征再進行組合。例如剛才發現月收入除以他家房子的面積數這個特征很有用,那麼你可以想想。他家房子的面積數和什麼相關聯?是不是房貸金額?那麼我們可以重新組織一下,組合出一個有意義的特征:DTI(debt to income),定義是負債除以收入。事實上客戶的DTI指數也是很常用的特征。

模型決策層面

如果你用邏輯回歸和單棵決策樹,那麼模型就具有自解釋性。

對于随機森林和XGBoost,解釋起來稍微麻煩點。如果想強行解釋随機森林,那麼會有點麻煩,可能需要UI的幫助。例如你随機森林用了100課數,那麼你要把這100課數的預測結果先展示一次,然後再把這些結果得到最後結果的計算過程又展示一次。比起深度模型那種黑箱子,XGBoost和RandomForest的工作原理确實能講出來,但那複雜度别人能懂嗎?

是以我們需要直覺的解釋,雖然了解沒那麼完全,但難度大大降低。一般會用兩種方法:

1. plot importance。例如XGBoost模型,你隻需要調用plot_importance函數便能得到特征重要度排序

實際風控工作中的五大挑戰!

2. LIME。LIME( Local Interpretable Model-Agnostic Explanations)的主要思想是利用可解釋性模型(如線性模型,決策樹)局部近似目标黑盒模型的預測,此方法不深入模型内部,通過對輸入進行輕微的擾動,探測黑盒模型的輸出發生何種變化,根據這種變化在興趣點(原始輸入)訓練一個可解釋性模型。具體的工作原理可以看Reference[4]

當然解釋性并不是那麼簡單,這是個大課題,更多相關的技巧可以參考Reference[2-5]

6.上線,監控,模型更新

這一點的經驗未必和其他風控算法工程師一樣。知乎上也有很大風控大牛,他們要麼在網際網路金融做風控,要麼在支付系統做風控,而像我這種在創業公司給銀行做風控的人應該不多。

上線

如果你開發的這套風控系統是第一套,那麼直接上線就完事了。但在商業應用中,直接切換風控系統是高風險的事情。例如你是技術提供商,銀行覺得你開發的風控系統不錯,但他也不會馬上用你的。一般來說,銀行需要先把一部分(例如20%)的賬戶分到你的系統來評分,剩餘80%還是用原來的系統來評分。持續線上上觀察半年,确定你的系統效果要更好,才會逐漸增加更多比例讓你的系統評分。

監控

模型上線後,需要持續觀測第四節裡提到的評價名額,包括特征穩定性,效用,模型AUC等。根據實際情況可以定義。監控周期一般是每個月一次。

模型更新

  • 基于門檻值更新。例如當AUC低于0.75,或者KS低于40時。
  • 基于時間間隔更新。例如下圖這樣,每兩個月重新整理一次模型,假設原模型是1,新模型是2,那麼選擇表現較好的那個作為接下來兩個月呆線上上的那個模型。
實際風控工作中的五大挑戰!

模型更新示例

總結

可以看到,算法雖然是核心,但是僅有核心是不夠的,一個完整的風控系統,即使除開軟體工程部分,還是有很多的工作需要做,很多的分析需要搞。我們常說的人工智能AI,主要指機器智能,但要支援一個平穩的風控系統,需要的是真正的“人工”智能,也就是人本身的智能,機器智能在這裡,也就是輔助。