AI智能風控(二)風控評分卡全流程建模

歡迎各位同學學習python信用評分卡建模視頻系列教程(附代碼, 博主錄製) :

騰訊課堂報名入口

網易雲課堂報名入口

 

 

本文摘要

在上一篇裏,我們講述了銀行風控的意義,那銀行風控是如何做的呢?知乎上有很多優秀的答主都回答得很好,但要麼是主要講方法論,輔以代碼片段,要麼是一上來就講代碼。

本文將帶領讀者一起進行完整的建模全流程,並提供kaggle代碼。首先講述評分卡的分類、優缺點。接下來,結合完整的可以馬上運行的代碼,中間穿插理論,來講解評分卡的開發流程。最後,把方法論再梳理一次,讓讀者在瞭解全流程後,在概念上理解再加深。本文還提供了完整的全流程代碼,讀者打開,結合代碼來讀本文,會理解更深。

評分卡的分類

在金融風控領域,無人不曉的應該是評分卡(scorecard), 在上一篇文章中,我提到無論信用卡還是貸款,都有”前中後“三個階段。根據風控時間點的”前中後”,一般風評分卡可以分爲下面三類:

  • A卡(Application score card)。目的在於預測申請時(申請信用卡、申請貸款)對申請人進行量化評估。
  • B卡(Behavior score card)。目的在於預測使用時點(獲得貸款、信用卡的使用期間)未來一定時間內逾期的概率。
  • C卡(Collection score card)。目的在於預測已經逾期並進入催收階段後未來一定時間內還款的概率。

 

風控評分卡種類

美國fico公司算是評分卡的始祖,始於 20世紀六十年代。Fico的評分卡的示例如下(這是個貸前評分卡,也就是A卡):

fico的評分卡示例

可以看到,這裏有三個因素,第一個是年齡AGE,第二個是收入段INCOME,第三個是住宅HOME是租的還是買的。當總分超過600分,就給與授信額度。這種評分卡,操作簡單,就算是個小學生都能算出風險值。

評分卡優缺點

評分卡的好處還是很明顯的:

  • 易於使用。業務人員在操作時,只需要按照評分卡每樣打分然後算個總分就能操作,不需要接受太多專業訓練
  • 直觀透明。客戶和審覈人員都能知道看到結果,以及結果是如何產生的。
  • 應用範圍廣。我們最熟悉的,莫過於支付寶的芝麻信用分,又或者知乎鹽值(雖然知乎鹽值不是評估金融風險的,但也算是評分卡的應用之一)

但是,隨着信貸業務規模不斷擴大,對風控工作準確率的要求也逐漸提升。這時候靜態評分卡的弱點就暴露了:

  • 利潤的信息維度不高。簡單是優點,但在日益增長的數據前,就變成缺點。有着大量數據資源卻使用有限,造成數據資源的浪費。
  • 當信息維度高時,評分卡建模會變得非常困難。(你看,本文的評分卡只涉及十個特徵,就這麼長一篇了)
  • 某些不重要的特徵,在另一些時刻會變得重要。例如在疫情期間,和收入相關的特徵重要度會上升。

當然,以上的缺點主要限於靜態評分卡,就算拿紙打勾計算分數那種,例如上面那個FICO的評分卡。有些積分,由於背後支撐的模型可以動態調整相關參數的權重,這時候就生成一個動態評分卡。但這種情況可以看成對機器學習模型做的可解釋性解析。

評分卡構建

那麼評分卡是如何構建的呢?一般包含下面六個步驟

0.數據探究。研究數據都包含哪些信息,

1.樣本選取。選取一定時間週期內該平臺上的信貸樣本數據,劃分訓練集和測試集。

2.變量選取。也就是特徵篩選。需要一定的業務理解。一般這部分費時較久

3.邏輯迴歸。根據篩選後的特徵,構建邏輯迴歸模型。

4.評分卡轉換。根據一定的公式轉換。

5.驗證並上線。驗證評分卡效果,並上線持續監測

評分卡建模步驟

是不是看起來有點抽象呢?真正的乾貨馬上來,趕緊去上個廁所,衝好咖啡,因爲下面的乾貨太滿了!

評分卡構建實戰演練

看上面抽象的表述看累了?實際操作馬上來了。我們用的數據是每個搞風控的人都熟悉的“Give Me Some Credit"數據集。本節會按照列出的六個步驟帶你領略評分卡實際構建過程。最終示例代碼在

0. 數據探究

我們加載kaggle提供的數據集,先看看dataframe長啥樣:

太長了,不容易看,我們看看摘要好了。

可以看到有些column裏面是有null value的。我們看看有多少null value:

可以看到MonthlyIncome和NumberOfDependents有一些空值。在建模前我們需要對其進行處理。

對null值處理有很多策略,例如填中位數,填平均數,甚至拿個模型去預測都行。由於收入差距可能很大,MonthlyIncome填中位數相對合理。NumberOfDependents也可以填中位數,或者平均數,但平均數會變成小數,所以還是取中位數。

可以看到,fillna後就沒問題了。

其中,變量SeriousDlqin2yrs是我們模型的label。我們可以說1爲壞,0爲好。這個變量是意思是Serious Delinquent in 2 year,也就是2年內發生嚴重逾期,其中”嚴重“定義爲逾期超過90天。也就是說。例如你2018年1月1號開卡,每個月1號是還款日。例如你2019年4月1號是你的還款日,然後你在7月1號前都沒還錢,那這時候逾期就超過90天了,你的數據標籤就爲1。

可以看到bad rate是0.06684。意味着我們在建模前,也許需要對數據做一個平衡(balancing)。

除此之外,其他列的定義如下(定義來自原數據集的Data Dictionary.xls)

爲了方便閱讀,關於其他變量我就不在本文一一探索了,感興趣的讀者可以到裏慢慢看,這裏有詳細的EDA。

1.樣本選取。

對於金融機構內部,我們需要將連續的數據分爲訓練集和測試集。例如我目前有2017-01-01到2019-12-31的數據,我可以把2017年1月,2月和2019年11月,12月作爲測試集,2017-03-01到2019-10-31作爲訓練集。這麼做的話,可以檢測模型跨時間的穩健性。

(藍色爲訓練集,紅色爲測試集)

上面僅爲個人經驗,不構成本節實操的一部分。由於cs-test.csv並不包含標籤,所以沒法拿來當驗證,我們從cs-training中將提取70%作爲訓練集,另外30%作爲驗證集。這個分割會在第四步——邏輯迴歸前進行。

2.變量選取

評分卡里叫變量,在建模時,我們叫特徵。但在評分卡里,我們需要對變量進行分箱(binning),效果如圖二的fico評分卡。分箱怎麼做的呢?我有空會做一個專題。這裏先簡單搞個分箱策略,值比較多的用pandas.qcut,值比較少的用pandas.cut。qcut和cut的區別是,qcut是根據這些值的頻率來選擇箱子的間隔,以實現儘量每個分箱裏的樣本一樣多。而cut是手動給定分箱閾值。

我們定義需要 qcut的變量:

  • RevolvingUtilizationOfUnsecuredLines
  • DebtRatio
  • MonthlyIncome
  • NumberOfOpenCreditLinesAndLoans
  • NumberRealEstateLoansOrLines

需要cut的變量,至於cut 的閾值,我就隨便給好了:

  • age
  • NumberOfDependents
  • NumberOfTime30-59DaysPastDueNotWorse
  • NumberOfTimes90DaysLate
  • NumberOfTime60-89DaysPastDueNotWorse

qcut和cut的方法及閾值如下:

在做特徵篩選時,我們怎麼判斷哪些特徵有用,哪些特徵沒啥用呢?特徵篩選有多種方法,其中一種是,我們可以計算IV(Information Value)來判斷特徵對結果的重要度。計算公式如下:

其中WOE(Weight of Evidence) 定義爲:

爲啥要用WOE?詳見我上一篇文章這裏記住這個WOE的概念,後面還會用到。

我們寫一個計算IV值的函數

在業界實踐中,我們把IV<0.02的看作無效特徵,0.02<0.1的爲弱效果特徵,>0.5爲強特徵,如下表所示。

那我們只選擇IV值大於0.1的變量吧。計算每個變量的IV值:

不同分箱會導致IV值不同,但本文是一個baseline模型,所以未對分箱策略做優化。

我們只選擇忽略week predictor和unless for prediction的特徵,只選擇IV值0.1以上的,最後這五個入選

'bin_RevolvingUtilizationOfUnsecuredLines'
'bin_NumberOfTime30-59DaysPastDueNotWorse'
'bin_age'
'bin_NumberOfTimes90DaysLate'
'bin_NumberOfTime60-89DaysPastDueNotWorse' 

 

3.邏輯迴歸

雖然用神經網絡或者xgboost等模型效果更好,但多數情況下,銀行做評分卡時還是喜歡用邏輯迴歸,因爲:

  1. 模型直觀,可解釋性強,易於理解,變量係數可以與業內知識做交叉驗證,更容易讓人信服。
  2. 易於發現問題。當模型效果衰減的時候,logistic模型能更好的查找原因。

在建模前,我們需要把原始的值轉化成WOE值才能使得模型效果好。爲啥不用原始值而用WOE值?原因見這篇文章。

桔了個仔:WOE編碼爲啥有效zhuanlan.zhihu.com圖標

我們定義一個函數cal_WOE,用以把分箱轉成WOE值。

建議打開原圖

看起來數據應該是可以用了。那現在我們開始用邏輯迴歸建模吧。

由於數據集的測試樣本是沒有標籤的,所以我們需要從訓練集裏分一些驗證集出來。用train_test_split函數把數據分成70/30兩部分

然後跑模型。模型訓練非常快,一下子就完了。

我們來看模型的AUC。業內的經驗是,0.80以上就算是可以投入產品線使用的模型。

模型的AUC達到還不錯的0.82。由於這裏使用數據集的sanity比較好,所以也容易出效果。這裏插個題外話來講講我的工作經驗。根據我的開發經驗,在客戶真實數據上要取得這個AUC還是要花很長時間的,尤其是數據清洗與特徵提取就要花90%的時間。

邏輯迴歸模型這步很簡單吧。下面就要講到評分卡轉換了,這一步標誌着你的模型要從實驗室走向產品線了。

4.評分卡轉換

這一節的內容是知乎很多文章都沒講清楚的,我首先先講理論,理論講完後,我就開始結合案例來講。

模型訓練好後,我們需要把對每個變量的每個分箱(也就是數值段)轉換成具體的分值。在講計算過程前,先來講點前置知識。

評分卡中不直接用客戶違約率p,而是用違約概率與正常概率的比值,稱爲Odds,即

[公式]

[公式]

評分卡會把odds映射成score。爲啥不用p直接映射,而用odds?聽我道來。

根據邏輯迴歸原理:

[公式]

把上述公式變化一下,有

[公式]

咦,是不是有點思路了?這不就是我們剛纔提到的odds嗎?現在你懂了吧,因爲計算odds可以和邏輯迴歸無縫結合。所以上面還可以變成

[公式]

評分卡的背後邏輯是Odds的變動與評分變動的映射(把Odds映射爲評分)。我們可以設計這個一個公式

[公式]

其中A與B是常數,B前面取負號的原因,是讓違約概率越低,得分越高。因爲實際業務裏,分數也高風險越低,當然你也可以設計個風險越低分數越低的評分卡,但風控裏還是默認高分高信用低風險。

計算出A、B的方法如下,首先設定兩個假設:

  1. 基準分。基準分 [公式] 爲某個比率時的得分 [公式] 。業界某些風控策略基準分都設置爲500/600/650。基準分爲 [公式]
  2. PDO(point of double),比率翻番時分數的變動值。假設我們設置爲當odds翻倍時,分值減少30。

設置好 [公式] 後,就能算出A和B。怎麼算?首先把 [公式] 代入公式,有

[公式]

根據PDO的定義,我們有下面等式:

[公式]

上面兩個式子組成了我們小學就能解的二元一次方程組,把公式(7)的右邊替換掉公式(8)左邊,可以算出B,從而可以算得A的解。最後A、B的解分別爲:

[公式]

[公式]

記住這兩個公式,等下實例開始時就會用到。迫不及待想進入實例訓練了?稍安勿躁,還有最後一步,就是把分箱映射爲分數。

還記得前面舉的評分卡例子嗎?評分卡里每一個變量的每一個分箱有一個對應分值。前面的 [公式] 是一個矩陣計算,展開後我們有:

[公式]

其中變量 [公式] 等等是出現在最終模型的入模變量。由於所有的入模變量都進行了WOE編碼,可以將這些自變量中的每一個都寫 [公式] 的形式,其中 [公式] 爲第 i 個特徵的第j 個分箱的WOE值, [公式] 是0,1邏輯變量,當 [公式] 時,代表自特徵i 取第 j 個分箱,當 [公式] 時代表特徵i不取第j 個分箱。最終得到評分卡模型:

[公式]

公式有點抽象?換成圖片表示

好了,評分卡轉換的理論講完了,現在要開始令人振奮的實例了。

我們定義 [公式] 爲1:1(你也可以試試其他值),基準分 [公式] 爲650,PDO爲50,代入公式(9)和(10),有

[公式]

記住這兩個值,我會把這兩個值代入實例裏計算。

然後評分卡就輕輕鬆鬆得到了:

可以看到,總體來說評分符合預期,例如RevolvingUtilizationOfUnsecuredLines越高,給的分數越低。

不過也有的評分並不是完全符合預期,例如NumberOfTime60-89DaysPastDueNotWorse在(8.0, 9.0]段的分數竟然是0,這完全沒道理啊!這個問題的出現,和訓練集在這個分數段的樣本量有關,可能是這個段的數據太少了。解決方法是重新設計分箱策略,不過本文的目的是解釋整個流程,做個baseline,這裏就不優化了,讀者有興趣的話可以自己研究下如何優化。

驗證並上線

我們寫個函數把原始特徵的值轉換成評分卡里的值。函數名是calculate_score_with_card,也就是下圖裏的最後一個函數,其他三個函數是輔助函數。

我們隨機選取五個好的樣本和五個壞的樣本,來驗證下他們的效果。

可以看到,好的樣本分數評分都比壞樣本分數低,說明了評分卡的有效性。例如上面的例子,好的樣本分數都是500以上,壞的樣本都在500以下。雖然換些樣本會發現未必完全準確,但總體來說能識別較多的壞客戶。

最後上線後,我們要需要設計個策略,告訴審覈員,哪些分數的客戶直接拒絕,那些分數的客戶可以直接接受,哪些分數的客戶需要人工審覈。策略大概如下表所示。(下圖的分值只是大概寫些數字舉例,實際還需要計算得出最佳決策方案)

至此,一個效果還不錯的評分卡就產出了。

總結

本文首先講述了評分卡的分類、優缺點。接下來,結合了完整的可以馬上運行的代碼,中間穿插理論,講解了評分卡的開發流程。完整的代碼在

最後,把方法論再梳理一次,加深大家理解,大家可以把下面這段複製到自己的筆記上,以後工作時隨時用到。

 

0. 數據探究
觀測有沒null值
觀察數據分佈
1. 樣本選取
可以用前後各取樣的方法來選擇驗證集
或者隨機抽樣30%作爲驗證集
2. 變量選取
分箱
通過IV值選取有效特徵
把特徵變成WOE表現形式
3. 邏輯迴歸
觀測驗證集的AUC
4. 評分卡轉換
根據邏輯迴歸的公式轉換
設置PDO,基準分等
5. 驗證並上線
驗證結果
設計策略

這一篇文章很長吧?但比起實際風控產品中遇到的困難,這篇的難度只能算是弟弟。下一篇將會帶大家看看在實際風控產品中挑戰。

轉https://zhuanlan.zhihu.com/p/148102950

 

歡迎各位學員報名系列課,學習更多金融建模知識

python金融風控模型模型和數據分析微專業課

騰訊課堂報名入口

網易雲課堂報名入口

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章