Ayhan Dis作者丁楠雅校对张睿毅翻译

creditR的基于实践的导论:一个神奇的改良信用风险评分和验证的R包(附代码)

本文介绍了关于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 <- 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")

输出:

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

输出:

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

输出:

现实生活中有太多的变量无法用相关矩阵来管理,因此常使用聚类以确定具有相似特征的变量。由于变量的数量很少,这种特殊的聚类示例没有意义,但通常情况下,该方法在具有大量变量的数据集中非常有用。

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

输出:

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

输出:

包含在数据集中的变量形成了一个模型。当模型摘要检查变量时,这些变量似乎是有意义的。然后,借助于“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 <- 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

输出:

在评定量表上采用贝叶斯校正方法。借助“master.scale”函数,我们可以轻松创建评分量表。然而,在现实生活中,评级尺度只能在多次尝试之后创建。

摘要将添加到输出中。运行R脚本可以看到详细信息。此外,本例的目的仅仅是在本研究范围内引入函数,因此PD值不会单调增加。

#Creating a master scale master_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 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

输出:

在实际应用中,对于不熟悉风险管理的员工来说,很难理解概率的概念。因此,需要创建缩放分数。这可以通过使用“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 <- master_scale$Bad.Count/master_scale$Total.Observations 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、天气、信用风险、电时价格、股票价格的数据和客户数据,为银行、能源、保险、金融和制药行业的客户提供解决方案。

作为一个数据科学爱好者,他认为,建立一个人的技术能力并不是数据科学真正的刺激,而是将数据科学大数据融合在一起,通过人工智能揭示与商业过程相结合的洞察力。

请通过下面共享的电子邮件地址通知作者你在使用包时遇到的错误。

  • 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/

THU数据派
THU数据派

THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。

工程creditR机器学习
相关数据
逻辑回归技术

逻辑回归(英语:Logistic regression 或logit regression),即逻辑模型(英语:Logit model,也译作“评定模型”、“分类评定模型”)是离散选择法模型之一,属于多重变量分析范畴,是社会学、生物统计学、临床、数量心理学、计量经济学、市场营销等统计实证分析的常用方法。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

卡方检验技术

卡方检验(Chi-Squared Test)是一种统计量的分布在零假设成立时近似服从卡方分布(X ^2 分布)的假设检验。在没有其他的限定条件或说明时,卡方检验一般指代的是皮尔森卡方检验。在卡方检验的一般运用中,研究人员将观察量的值划分成若干互斥的分类,并且使用一套理论(或零假设)尝试去说明观察量的值落入不同分类的概率分布的模型。而卡方检验的目的就在于去衡量这个假设对观察结果所反映的程度。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

大数据技术技术

大数据,又称为巨量资料,指的是传统数据处理应用软件不足以处理它们的大或复杂的数据集的术语。

卡方技术

卡方常常与卡方分布和卡方检验联系在一起: 卡方分布(chi-square distribution)是常用于概率论和统计检验中的一种概率分布;卡方检验是(chi-square test)是一种基于卡方分布的常用的统计检验,其统计量在原假设(null hypothesis)成立时服从卡方分布。

聚类技术

将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于分类学,但是聚类不等于分类。聚类与分类的不同在于,聚类所要求划分的类是未知的。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。

数据融合技术

数据融合技术将来自多个传感器(信息源)的数据和相关数据的信息相结合,以实现比单独使用单个传感器(信息源)所能实现的更高的准确性和更具体的推论。

暂无评论
暂无评论~