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

資料派THU發表於2019-04-18

背景介紹

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

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

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

--投資銀行

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

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

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的基於實踐的導論:一個神奇的改良信用風險評分和驗證的R包(附程式碼)

四、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 <- germancredit[,c("duration.in.month","credit.amount","installment.rate.in.percentage.of.disposable.income", "age.in.years","creditability")] #Converting the ‘Creditability’ (default flag) variable into numeric type sample_data$creditability <- ifelse(sample_data$creditability == "bad",1,0) #Calculating the missing ratios missing_ratio(sample_data)

輸出:

#Splitting the data into train and test sets traintest <- train_test_split(sample_data,123,0.70) train <- traintest$train test <- traintest$test

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

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

#Applying WOE transformation on the variables woerules <- woe.binning(df = train,target.var = "creditability",pred.var = train,event.class = 1) train_woe <- woe.binning.deploy(train, woerules, add.woe.or.dum.var='woe') #Creating a dataset with the transformed variables and default flag train_woe <- woe.get.clear.data(train_woe,default_flag = "creditability",prefix = "woe") #Applying the WOE rules used on the train data to the test data test_woe <- woe.binning.deploy(test, woerules, add.woe.or.dum.var='woe') test_woe <- woe.get.clear.data(test_woe,default_flag = "creditability",prefix = "woe")

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

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

輸出:

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

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

輸出:

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

#Creating a new dataset by Gini elimination. IV elimination is also possible eliminated_data <- Gini_elimination(train_woe,"creditability",0.10) str(eliminated_data)

輸出:

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

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

#A demonstration of the functions useful in performing Clustering clustering_data <- variable.clustering(eliminated_data,"creditability", 2) clustering_data

輸出:

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

# Returns the data for variables that have the maximum gini value in the dataset selected_data <- variable.clustering.gini(eliminated_data,"creditability", 2)

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

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

輸出:

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

包含在資料集中的變數形成了一個模型。當模型摘要檢查變數時,這些變數似乎是有意義的。然後,藉助於“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)

輸出:

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

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

輸出:

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

#Generating the PD values for the train and test data ms_train_data <- cbind(eliminated_data,model$fitted.values) ms_test_data <- cbind(test_woe[,colnames(eliminated_data)], predict(model,type = "response", newdata = test_woe)) colnames(ms_train_data) <- c("woe.duration.in.month.binned","woe.age.in.years.binned","woe.installment.rate.in.percentage.of.disposable.income.binned","creditability","PD") colnames(ms_test_data) <- c("woe.duration.in.month.binned","woe.age.in.years.binned","woe.installment.rate.in.percentage.of.disposable.income.binned","creditability","PD")

在現實生活中,機構使用評級尺度而不是連續的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(model,test_woe,"creditability") regression_calibration$calibration_data regression_calibration$calibration_model regression_calibration$calibration_formula

輸出:

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

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

摘要將新增到輸出中。執行R指令碼可以看到詳細資訊。此外,本例的目的僅僅是在本研究範圍內引入函式,因此PD值不會單調增加。

#Creating a master scale master_scale <- master.scale(ms_train_data,"creditability","PD") master_scale

輸出:

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

為了應用貝葉斯校正,在資料集中建立了分數變數。然後將評分表校準到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 <- bayesian.calibration(data = master_scale,average_score ="Score",total_observations = "Total.Observations",PD = "PD",central_tendency = 0.05,calibration_data = ms_train_data,calibration_data_score ="Score") #After calibration, the information and data related to the calibration process can be obtained as follows bayesian_method$Calibration.model bayesian_method$Calibration.formula

輸出:

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

在實際應用中,對於不熟悉風險管理的員工來說,很難理解概率的概念。因此,需要建立縮放分數。這可以通過使用“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)

輸出:

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

一般來說,基尼係數的可接受下限為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)

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

輸出:

#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")

輸出:

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

由於主量表的主要目的是區分風險,所以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)

輸出:

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

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

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

輸出:

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

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

#The Binomial test is applied on the master scale master_scale$DR <- master_scale$Bad.Count/master_scale$Total.Observations Binomial.test(master_scale,"Total.Observations","PD","DR",0.90,"one")

輸出:

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

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

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

最後幾點

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

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

修復Bug以及有關作者的資訊

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

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

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

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

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

  • https://github.com/ayhandis

  • https://www.linkedin.com/in/ayhandis/

  • disayhan@gmail.com

原文標題:

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/

相關文章