手把手教你用R語言建立信用評分模型(一)

轉自公眾號:Frank和風險模型們

回復「朝陽35處」可查看「說人話的大數據」系列合輯

How to master a skill


Jump into the middle of things,  get your hands dirty,  fall flat on your face,  and then reach for the stars.

                                                                                     —— Ben Stein


語言選擇

一般而言, 咨詢公司為商業銀行搭建統計評分卡模型,採用的語言大多是SAS,這是因為SAS語言背後,有SAS公司 (SAS Institute)提供很完備的產品方案和售後服務。對於程序安全性和穩定性要求較高的銀行, 自然會將SAS作為第首選方案。

而對於個人用戶, 要想搭建一個評分卡模型,會更多考慮搭建開發環境的容易度、統計包或庫的獲取的容易程度(accessablity)、代碼風格等。開源易懂的R語言自然會成為個人用戶小試牛刀的首選。

數據準備

我們將會使用在信用評級建模中非常常用的德國信貸數據(German credit dataset)作為建模的數據集,具體的數據下載源請見文末的引用。

德國信貸數據共有1000條數據,每條數據20個特徵。這些特徵包括AccountBalance(Checking帳戶餘額)、Duration (Duration of Credit in month 借款期限)、Paymentstatus(還款記錄)等。 其中比較難以理解的指標是Instalmentpercent,其代表著 Installment rate in percentage of disposable income (分期付款占可支配收入的百分比)。

手把手教你用R語言建立信用評分模型(一)

模型指標匯總


而數據集中需要預測的指標是(response variable)其中的Creditability變量, 其中 1代表好客戶(會還本付息),0則是代表壞客戶。

以下是載入數據及訓練集劃分部分的R代碼:

library(caret)
train1 <-createDataPartition(y=german_credit$Creditability,p=0.75,list=FALSE)
train <- german_credit[train1, ]
test <- german_credit[-train1, ]
建模過程

通常來講,建構一個信用評分卡,要如下幾個步驟:

手把手教你用R語言建立信用評分模型(一)
在本文,因我們使用的數據是現有的數據集,所以不必進行指標選取和一些數據清洗的過程(如缺失值插補)。接下來,我們會根據以上步驟,一步步構建自己的評分卡模型。

探索性數據分析

在建立模型之前,我們一般會對現有的數據進行 探索性數據分析(Exploratory Data Analysis) 。 EDA是指對已有的數據(特別是調查或觀察得來的原始數據)在盡量少的先驗假定下進行探索。常用的探索性數據分析方法有:直方圖、散點圖和箱線圖等。

首先讓我們用直方圖看一下Duration的分布情況:

require(caret)

data(GermanCredit)

ggplot(GermanCredit, aes(x = duration,y = ..count..,)) + geom_histogram(fill = “blue”, colour = “grey60”, size = 0.2, alpha = 0.2,binwidth = 5)

手把手教你用R語言建立信用評分模型(一)

從上面的頻率分布直方圖中, 可以看出German Credit Data中的貸款期限,大都在40個月以內。 而申請人數最多的期限,則是6-10個月的短期貸款。

讓我們再看一下CreditAmount的分布情況

ggplot(GermanCredit, aes(x = Amount,y = ..count..,)) + geom_histogram(fill = “blue”, colour = “grey60”, size = 0.2, alpha = 0.2,binwidth = 1000)


手把手教你用R語言建立信用評分模型(一)

就貸款金額而言,大多數申請人將其控制在5000馬克之內。其中以申請1000-3000馬克的小額貸款最多。

最後再來看一下違約人數在總人數的占比,也就是Creditability這部分的數據。

ggplot(GermanCredit, aes(x =Creditability,y = ..count..,)) + geom_histogram(fill = “blue”, colour = “grey60″ , alpha = 0.2,stat=”count”)

手把手教你用R語言建立信用評分模型(一)

從圖中可以看出,數據集中30%的申請人被劃分為違約的壞用戶。而剩下70%的人則是會還本付息的好用戶。 

變量分箱


在評分卡建模中,變量分箱(binning)是對連續變量離散化(discretization)的一種稱呼。要將logistic模型轉換為標準評分卡的形式,這一環節是必須完成的。信用評分卡開發中一般有常用的等距分段、等深分段、最優分段


其中等距分段(Equval length intervals)是指分段的區間是一致的,比如年齡以十年作為一個分段;等深分段(Equal frequency intervals)是先確定分段數量,然後令每個分段中數據數量大致相等;最優分段(Optimal Binning)又叫監督離散化(supervised discretizaion),使用遞歸劃分(Recursive Partitioning)將連續變量分為分段,背後是一種基於條件推斷查找最佳分組的算法(Conditional Inference Tree)。


我們將使用最優分段對於數據集中的Duration、age和CreditAmount進行分類。首先,需要在R中安裝smbinning包。

對三者進行最優分箱:

library(smbinning)
Durationresult=smbinning(df=train,y=”Creditability”,x=”Duration”,p=0.05)
CreditAmountresult=smbinning(df=train2,y=”Creditability”,x=”CreditAmount”,p=0.05) 
Ageresult=smbinning(df=train2,y=”Creditability”,x=”Age”,p=0.05) 

查看分箱後變量各箱的WoE變化:

smbinning.plot(CreditAmountresult,option=”WoE”,sub=”CreditAmount”) 

手把手教你用R語言建立信用評分模型(一)

smbinning.plot(Durationresult,option=”WoE”,sub=”Duration”)

手把手教你用R語言建立信用評分模型(一)



smbinning.plot(Ageresult,option=”WoE”,sub=”Age”)

手把手教你用R語言建立信用評分模型(一)

通過最優分段, 我們將CreditAmount貸款數額這一連續變量分為了[0,6742]和(6742, +∞]兩段。Duration借款期限變量被分為了[0,11]、(11,30] 和 (30, +∞]三段。而Age申請人年齡被分為[0, 25]和(25, +∞]兩段。變量的分段都對應差異較大WoE值,說明分段區分效果較好,且無違背Business Sense的現象出現,可以接受最優分段提供的分箱結果。

                  未完待續,歡迎分享                

                  未完待續,歡迎分享               

Reference:

德國信貸數據(German credit dataset), https://onlinecourses.science.psu.edu/stat857/sites/onlinecourses.science.psu.edu.stat857/files/german_credit.csv 

                  未完待續,歡迎分享                

手把手教你用R語言建立信用評分模型(一)

手把手教你用R語言建立信用評分模型(一)

如果您覺得我們的推薦內容對您還有點兒用,可以嘗試長按上圖二維碼打賞我們!^_^

1月原創好文回顧,請點擊閱讀:

前海徵信七扇門|6個風控的血淚教訓

零道書院 | 區塊鏈夢想之「天下無賊」

朝陽35處|大數據揭秘:跟你一樣搶不到票的都有誰?

7扇門|人臉識別技術有漏洞?快來看看如何升級