作者: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 librarylibrary(creditR)#Model data and data structuredata(\公众germancredit\"大众)str(germancredit)#Preparing a sample data setsample_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 typesample_data$creditability <- ifelse(sample_data$creditability == \"大众bad\公众,1,0)#Calculating the missing ratiosmissing_ratio(sample_data)
输出:
#Splitting the data into train and test setstraintest <- train_test_split(sample_data,123,0.70)train <- traintest$traintest <- traintest$test
WOE变换是一种结合变量与目标变量的关系将变量转化为分类变量的方法。下面的“WoeRules”工具包含WOE的规则。
在woe.binning.deploy 函数的帮助下,规则得以在数据集上运行。我们须要的变量通过woe.get.clear.data函数分配给“train-woe”工具。
#Applying WOE transformation on the variableswoerules <- 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 flagtrain_woe <- woe.get.clear.data(train_woe,default_flag = \"大众creditability\公众,prefix = \"大众woe\公众)#Applying the WOE rules used on the train data to the test datatest_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 setIV.calc.data(train_woe,\"大众creditability\"大众)
输出:
Gini.univariate.data(train_woe,\"大众creditability\公众)
输出:
#Creating a new dataset by Gini elimination. IV elimination is also possibleeliminated_data <- Gini_elimination(train_woe,\"大众creditability\"大众,0.10)str(eliminated_data)
输出:
现实生活中有太多的变量无法用干系矩阵来管理,因此常利用聚类以确定具有相似特色的变量。由于变量的数量很少,这种分外的聚类示例没故意义,但常日情形下,该方法在具有大量变量的数据集中非常有用。
#A demonstration of the functions useful in performing Clusteringclustering_data <- variable.clustering(eliminated_data,\"大众creditability\公众, 2)clustering_data
输出:
# Returns the data for variables that have the maximum gini value in the datasetselected_data <- variable.clustering.gini(eliminated_data,\"大众creditability\"大众, 2)
在某些情形下,集群的均匀干系性很主要,由于集群的数量可能设置禁绝确。因此,如果集群具有较高的均匀干系性,则该当对其进行详细检讨。干系性值(在集群1中的唯一变量)是NaN。
correlation.cluster(eliminated_data,clustering_data,variables = \公众variable\公众,clusters = \公众Group\"大众)
输出:
包含在数据集中的变量形成了一个模型。当模型择要检讨变量时,这些变量彷佛是故意义的。然后,借助于“woe.glm.feature.importance”函数,变量的权重得以打算。实际上,权重是根据单个单位变革对概率的影响来打算的。
#Creating a logistic regression model of the datamodel= glm(formula = creditability ~ ., family = binomial(link = \公众logit\公众), data = eliminated_data)summary(model)
输出:
#Calculating variable weightswoe.glm.feature.importance(eliminated_data,model,\"大众creditability\公众)
输出:
#Generating the PD values for the train and test datams_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 dataregression_calibration <- regression.calibration(model,test_woe,\"大众creditability\"大众)regression_calibration$calibration_dataregression_calibration$calibration_modelregression_calibration$calibration_formula
输出:
在评定量表上采取贝叶斯校正方法。借助“master.scale”函数,我们可以轻松创建评分量表。然而,在现实生活中,评级尺度只能在多次考试测验之后创建。
择要将添加到输出中。运行R脚本可以看到详细信息。此外,本例的目的仅仅是在本研究范围内引入函数,因此PD值不会单调增加。
#Creating a master scalemaster_scale <- master.scale(ms_train_data,\公众creditability\公众,\"大众PD\"大众)master_scale
输出:
为了运用贝叶斯校正,在数据集中创建了分数变量。然后将评分表校准到5%的中央趋势。
#Calibrating the master scale and the modeling data to the default rate of 5% using the bayesian calibration methodms_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 followsbayesian_method$Calibration.modelbayesian_method$Calibration.formula
输出:
在实际运用中,对付不熟习风险管理的员工来说,很难明得概率的观点。因此,须要创建缩放分数。这可以通过利用“scalled.score”函数来实现。
#The Scaled score can be created using the following functionscaled.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 modelGini(model$fitted.values,ms_train_data$creditability)
输出:
0.3577422
#Performing the 5 Fold cross validationk.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 observationsKolmogorov.Smirnov(ms_train_data,\"大众creditability\"大众,\"大众PD\公众)Kolmogorov.Smirnov(ms_test_data,\公众creditability\"大众,\"大众PD\公众)
评分卡常日在长期根本上进行修订,由于这一过程会产生主要的运营本钱。因此,模型的稳定性会降落修正的必要性。此外,机构希望模型稳定,由于这些模型被用作许多打算的输入,如减值、成本、风险加权资产等。
系统稳定性指标是用来衡量模型和变量稳定性的一种测试。大于0.25的SSI值表明变量稳定性受到危害。
#Variable stabilities are measuredSSI.calc.data(train_woe,test_woe,\"大众creditability\"大众)
输出:
由于主量表的紧张目的是区分风险,以是HHI测试丈量主量表的浓度。超过0.30 HHI值表示浓度高。这可能是由于建模阶段或主比例的创建禁绝确。
#The HHI test is performed to measure the concentration of the master scaleHerfindahl.Hirschman.Index(master_scale,\"大众Total.Observations\公众)
输出:
0.1463665
在“anchor.point”函数的帮助下,测试默认速率是否与预期水平的均匀PD兼容。
#Performing the Anchor point testAnchor.point(master_scale,\"大众PD\"大众,\"大众Total.Observations\"大众,0.30)
输出:
卡方考验也可用作校准试验。“chisquare.test”函数可用于在指定的置信水平下实行测试。
#The Chi-square test is applied on the master scalechisquare.test(master_scale,\"大众PD\"大众,\"大众Bad.Count\"大众,\"大众Total.Observations\"大众,0.90)
输出:
二项考验也可以作为一种校准考验。单尾二项考验常日用于IRB模型,而双尾考验则用于IFRS 9模型。但除IRB外,双尾考验更方便通用。
#The Binomial test is applied on the master scalemaster_scale$DR <- master_scale$Bad.Count/master_scale$Total.ObservationsBinomial.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、景象、信用风险、电时价格、股票价格的数据和客户数据,为银行、能源、保险、金融和制药行业的客户供应办理方案。
作为一个数据科学爱好者,他认为,建立一个人的技能能力并不是数据科学真正的刺激,而是将数据科学与大数据领悟在一起,通过人工智能揭示与商业过程相结合的洞察力。
请通过下面共享的电子邮件地址关照作者你在利用包时碰着的缺点。
https://github.com/ayhandishttps://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/译者简介
张睿毅,北京邮电大学大二物联网在读。我是一个爱自由的人。在邮电大学读第一年书我就四处跑去蹭课,折腾整一年惊觉,与其在当下焦虑,不如在前辈中沉淀。于是在大二以来,坚持读书,不敢稍歇。成本主义国家的科学不雅观不断刷新我的认知框架,同时由于出国考试很早出分,也更早地感想熏染到自己才是那个一贯被束缚着的人。太多真英雄在社会上各自闪耀着光芒。这才开始,立志终生向碰着的每一个人学习。做一个纯粹的打算机科学里面的小学生。
— 完 —
关注清华-青岛数据科学研究院官方微信"大众平台“THU数据派”及姊妹号“数据派THU”获取更多讲座福利及优质内容。