歡迎光臨
每天分享高質量文章

一個神奇的改良信用風險評分和驗證的R包(creditR 的基於實踐的導論)

作者:Ayhan Dis 翻譯:張睿毅 校對:丁楠雅

 

本文約3200字,建議閱讀10+分鐘。

本文介紹了關於creditR包的相關基礎知識,並通過使用creditR深入研究一個全面的例子進行實際操作。

 

背景介紹

機器學習正在擾亂多個不同的行業。受影響最大的行業之一就是:金融業

機器學習的主要標的是欺詐檢測、客戶細分、員工或客戶保留等。我們將在本文中介紹信用風險評分。

信用評分是放款人和金融機構為獲得一個人的信用度而進行的統計分析。出借人通過信用評分決定是否延長或拒絕信用。”

–投資銀行

機器學習演算法通常被開發成挑戰者模型,因為這是一個需要滿足法規要求的領域。這讓我思考——我如何才能讓從事該領域工作的專業人員更容易理解這些模型?

creditR 包就應運而生了!它允許你在機器學習應用程式之前輕鬆創建信用風險評分的基本模型。此外它還含有一些可用於驗證這些行程的函式。

該包旨在促進變數分析、變數選擇、模型開發、模型校準、評級尺度開發和模型驗證方法的應用。通過定義的函式,這些方法可以快速應用於所有建模資料或特定變數。

在本文中,我們將首先瞭解creditR包的基本知識。然後,我們將通過使用creditR深入研究一個全面的例子進行實際操作。

註:該方案是為信貸風險專業人士提供的。使用該軟體包需要具備信貸風險評分方法的基本知識。

 

目錄

一、為什麼要用creditR?

二、開始使用creditR

三、creditR內部的一系列函式

四、creditR包的應用

 

一、為什麼要用creditR

隨著對該領域機器學習模型的需求增加,對信貸風險模型的認識正在迅速轉變。然而,許多監管者對機器學習技術仍然非常謹慎。可以推測:在這個轉換階段,機器學習演算法將與傳統方法一起進行。

一旦機器學習演算法在挑戰領域慣例的同時產生了比傳統方法更強大的結果,監管者就可以信任。此外,解釋機器學習演算法的新方法可能有助於創建一個更透明的過程。

creditR軟體包既可以自動使用傳統方法,也可以驗證傳統和機器學習模型。

二、開始使用creditR

為了安裝creditR包,你應該安裝devtools包。可以通過運行以下代碼安裝devtools包:

install.packages(“devtools”, dependencies = TRUE)


可以使用devtools包中的“install_github”功能安裝creditr包:

library(devtools)
devtools::install_github(“ayhandis/creditR”)
library(creditR)


三、creditR內的一系列函式

包下麵列出了可用的功能:

ls("package:creditR")

輸出:

 

 

四、creditR包的一項應用

我們已經熟悉了理論方面的內容。現在我們開始實踐吧!

下麵分享了creditR的一個示例應用程式,研究如何使用包中提供的功能執行信貸風險評分中的一些常見步驟。

在編寫本例時,考慮了實際的做法。

一般應用程式的結構分為兩個主題,即建模和模型驗證,在註釋行中可以看到有關相應代碼所做操作的詳細信息。

本文中只共享了重要的輸出。

這個R腳本旨在使creditR包更容易理解。獲得高精度模型不在本研究範圍內。

# Attaching the library
library(creditR)


#Model data and data structure
data(“germancredit”)
str(germancredit)

#Preparing a sample data set
sample_data
#Converting the ‘Creditability’ (default flag) variable into numeric type
sample_data$creditability
#Calculating the missing ratios
missing_ratio(sample_data)


輸出:

#Splitting the data into train and test sets
traintest train test


WOE變換是一種結合變數與標的變數的關係將變數轉化為分類變數的方法。下麵的“WoeRules”物件包含WOE的規則。

在woe.binning.deploy 函式的幫助下,規則得以在資料集上運行。我們需要的變數通過woe.get.clear.data函式分配給“train-woe”物件。

#Applying WOE transformation on the variables
woerules train_woe
#Creating a dataset with the transformed variables and default flag
train_woe
#Applying the WOE rules used on the train data to the test data
test_woe test_woe


信息值和單變數基尼繫數可以作為變數選擇方法。一般來說,IV的閾值為0.30,單變數基尼的閾值為0.10。

#Performing the IV and Gini calculations for the whole data set
IV.calc.data(train_woe,”creditability”)


輸出:

Gini.univariate.data(train_woe,”creditability”)


輸出:

 

#Creating a new dataset by Gini elimination. IV elimination is also possible
eliminated_data str(eliminated_data)


輸出:

 

現實生活中有太多的變數無法用相關矩陣來管理,因此常使用聚類以確定具有相似特征的變數。由於變數的數量很少,這種特殊的聚類示例沒有意義,但通常情況下,該方法在具有大量變數的資料集中非常有用。

#A demonstration of the functions useful in performing Clustering
clustering_data clustering_data


輸出:

# Returns the data for variables that have the maximum gini value in the dataset
selected_data


在某些情況下,集群的平均相關性很重要,因為集群的數量可能設置不正確。因此,如果集群具有較高的平均相關性,則應該對其進行詳細檢查。相關性值(在集群1中的唯一變數)是NaN。

correlation.cluster(eliminated_data,clustering_data,variables = “variable”,clusters = “Group”)


輸出:

 

包含在資料集中的變數形成了一個模型。當模型摘要檢查變數時,這些變數似乎是有意義的。然後,借助於“woe.glm.feature.importance”函式,變數的權重得以計算。實際上,權重是根據單個單位變化對概率的影響來計算的。

#Creating a logistic regression model of the data
model= glm(formula = creditability ~ ., family = binomial(link = “logit”),  data = eliminated_data)
summary(model)


輸出:

#Calculating variable weights
woe.glm.feature.importance(eliminated_data,model,”creditability”)


輸出:

#Generating the PD values for the train and test data
ms_train_data ms_test_data colnames(ms_train_data) colnames(ms_test_data)


在現實生活中,機構使用評級尺度而不是連續的PD值。由於一些監管問題或為了適應不斷變化的市場/投資組合條件,模型會根據不同的中心趨勢進行校準。

包中含有回歸和貝葉斯校正方法。利用“calibration object$calibration_formula”代碼,可以得到嵌入企業系統中進行校準的數值函式作為輸出。

#An example application of the Regression calibration method. The model is calibrated to the test_woe data
regression_calibration regression_calibration$calibration_data
regression_calibration$calibration_model
regression_calibration$calibration_formula


輸出:

在評定量表上採用貝葉斯校正方法。借助“master.scale”函式,我們可以輕鬆創建評分量表。然而,在現實生活中,評級尺度只能在多次嘗試之後創建。

摘要將添加到輸出中。運行R腳本可以看到詳細信息。此外,本例的目的僅僅是在本研究範圍內引入函式,因此PD值不會單調增加。

#Creating a master scale
master_scale master_scale


輸出:

為了應用貝葉斯校正,在資料集中創建了分數變數。然後將評分表校準到5%的中心趨勢。

#Calibrating the master scale and the modeling data to the default rate of 5% using the bayesian calibration method
ms_train_data$Score = log(ms_train_data$PD/(1-ms_train_data$PD))
ms_test_data$Score = log(ms_test_data$PD/(1-ms_test_data$PD))
bayesian_method
#After calibration, the information and data related to the calibration process can be obtained as follows
bayesian_method$Calibration.model
bayesian_method$Calibration.formula


輸出:

 

在實際應用中,對於不熟悉風險管理的員工來說,很難理解概率的概念。因此,需要創建縮放分數。這可以通過使用“scalled.score”函式來實現。

#The Scaled score can be created using the following function
scaled.score(bayesian_method$calibration_data, “calibrated_pd”, 3000, 15)


在建模階段之後,進行模型驗證,以驗證不同的期望,如模型的準確性和穩定性。在現實生活中,定性驗證過程也被應用。

註:模型校準僅用於說明。模型驗證測試按如下所示通過原始主尺度進行。

在邏輯回歸模型中,應考慮多重共線性問題。雖然使用了不同的閾值,但大於5的vif值表示存在此問題。

#Calculating the Vif values of the variables.
vif.calc(model)


輸出:

一般來說,基尼繫數的可接受下限為0.40。但是,這可能會因模型型別而異。

#Calculating the Gini for the model
Gini(model$fitted.values,ms_train_data$creditability)


輸出:

0.3577422

#Performing the 5 Fold cross validation
k.fold.cross.validation.glm(ms_train_data,”creditability”,5,1)


輸出:

#The KS test is performed on the distributions of the estimates for good and bad observations
Kolmogorov.Smirnov(ms_train_data,”creditability”,”PD”)
Kolmogorov.Smirnov(ms_test_data,”creditability”,”PD”)


評分卡通常在長期基礎上進行修訂,因為這一過程會產生重要的運營成本。因此,模型的穩定性會降低修改的必要性。此外,機構希望模型穩定,因為這些模型被用作許多計算的輸入,如減值、資本、風險加權資產等。

系統穩定性指標是用來衡量模型和變數穩定性的一種測試。大於0.25的SSI值表明變數穩定性受到損害。

#Variable stabilities are measured
SSI.calc.data(train_woe,test_woe,”creditability”)


輸出:

由於主量表的主要目的是區分風險,所以HHI測試測量主量表的濃度。超過0.30 HHI值表示濃度高。這可能是由於建模階段或主比例的創建不正確。

#The HHI test is performed to measure the concentration of the master scale
Herfindahl.Hirschman.Index(master_scale,”Total.Observations”)


輸出:

0.1463665

在“anchor.point”函式的幫助下,測試預設速率是否與預期水平的平均PD兼容。

#Performing the Anchor point test
Anchor.point(master_scale,”PD”,”Total.Observations”,0.30)


輸出:

卡方檢驗也可用作校準試驗。“chisquare.test”函式可用於在指定的置信水平下執行測試。

#The Chi-square test is applied on the master scale
chisquare.test(master_scale,”PD”,”Bad.Count”,”Total.Observations”,0.90)


輸出:

二項檢驗也可以作為一種校準檢驗。單尾二項檢驗通常用於IRB模型,而雙尾檢驗則用於IFRS 9模型。但除IRB外,雙尾檢驗更方便通用。

#The Binomial test is applied on the master scale
master_scale$DR Binomial.test(master_scale,”Total.Observations”,”PD”,”DR”,0.90,”one”)


輸出:

需要管理建模和模型驗證,以確保連續性。當R環境被正確管理時,這個可管理的建模和驗證環境可以很容易地由機構提供。

機構正在使用開放原始碼環境(如具有大資料技術的R或Python)設計更高效的業務流程。從這個角度來看,creditR為建模和驗證方法的應用提供了組織上的便利。

 

最後幾點

creditR軟體包為用戶提供了許多執行傳統信用風險評分的方法,以及一些用於測試模型有效性的方法,這些方法也可應用於ML演算法。此外,由於該包在傳統方法的應用中提供了自動化,因此可以降低這些過程的操作成本。

此外,可以將這些模型與機器學習模型進行比較,以證明ML模型也滿足監管要求,滿足這些要求是ML模型應用的前提。

修複Bug以及有關作者的信息

Ayhan Dis是一名高級風險顧問。他負責咨詢專案,如國際財務報告準則9/IRB模型開發和驗證,以及高級分析解決方案,包括欺詐分析、客戶分析和風險分析等領域的ML/DL,熟練使用Python、R、Base SAS和SQL。

在他的工作歷程中,他使用過各領域如Twitter、天氣、信用風險、電時價格、股票價格的資料和客戶資料,為銀行、能源、保險、金融和製藥行業的客戶提供解決方案。

作為一個資料科學愛好者,他認為,建立一個人的技術能力並不是資料科學真正的刺激,而是將資料科學與大資料融合在一起,通過人工智慧揭示與商業過程相結合的洞察力。

請通過下麵共享的電子郵件地址通知作者你在使用包時遇到的錯誤。

原文標題:

Hands-On Introduction to creditR: An Amazing R Package to Enhance Credit Risk Scoring and Validation

原文鏈接:

https://www.analyticsvidhya.com/blog/2019/03/introduction-creditr-r-package-enhance-credit-risk-scoring-validation-r-codes/

 

譯者:張睿毅,北京郵電大學大二物聯網在讀。

轉自:資料派THU 公眾號;

版權宣告:本號內容部分來自互聯網,轉載請註明原文鏈接和作者,如有侵權或出處有誤請和我們聯繫。

    已同步到看一看
    赞(0)

    分享創造快樂