模型开发的前三步主要讲的是数据处理的方法,从第四步开始我们将逐步讲述模型开发的方法。在进行模型开发时,并非我们收集的每个指标都会用作模型开发,而是需要从收集的所有指标中筛选出对违约状态影响最大的指标,作为入模指标来开发模型。接下来,我们将分别介绍定量指标和定性指标的筛选方法。

library(InformationValue)
library(klaR)
data(GermanCredit)
train_kfold<-sample(nrow(GermanCredit),800,replace=F)
train_kfolddata<-GermanCredit[train_kfold,]
test_kfolddata<-GermanCredit[-train_kfold,]#将违约样本用“1”表示,正常样本用“0”表示。
credit_risk<-ifelse(train_kfolddata[,"credit_risk"]=="good",0,1)
tmp<-train_kfolddata[,-21]
data<-cbind(tmp,credit_risk)
#获取定量指标
quant_vars<-c("duration","amount","installment_rate","present_residence","age","number_credits","people_liable","credit_risk")
quant_GermanCredit<-data[,quant_vars]   #提取定量指标

(1)第一种定量指标的筛选方法:用随机森林法寻找自变量中对违约状态影响最显著的指标,代码如下:

#第一种方法:随机森林法
library(party)
cf1<-cforest(credit_risk~.,data = quant_GermanCredit,controls = cforest_unbiased(mtry=2,ntree=50))
varimp(cf1)
#基于变量均值的精度下降,获取自变量的重要性
#mtry代表在每一棵树的每个节点处随机抽取mtry 个特征,通过计算每个特征蕴含的信息量,特征中选择一个最具有分类能力的特征进行节点分裂。
#varimp代表重要性函数。

varimp(cf1,conditional = TRUE)
#经过变量间的相关系数调整后,获取自变量的重要性

varimpAUC(cf1)
#经过变量间的不平衡性调整后,获取自变量的重要性

(2)第二种定量指标的筛选方法:计算变量间的相对重要性,并通过相对重要性的排序,获取自变量中对违约状态影响最显著的指标,代码如下:

#第二种方法:计算变量间的相对重要性,回归法
library(relaimpo)
lmMod<-lm(credit_risk~.,data = quant_GermanCredit)  #线性回归
relImportance<-calc.relimp(lmMod,type = "lmg",rela = TRUE)#计算自变量间的相对重要性
sort(relImportance$lmg,decreasing = TRUE)
#排序并输出自变量间的相对重要性

(3)第三种定量指标的筛选方法:通过自变量间的广义交叉验证法,获取自变量中对违约状态影响最显著的指标,代码如下:

#第三种方法:自变量间的广义交叉验证法
library(earth)
marsModel<-earth(credit_risk~.,data = quant_GermanCredit)
ev<-evimp(marsModel)
ev
#经过自变量间的广义交叉验证后,获取自变量的重要性

(4)第四种定量指标的筛选方法:通过自变量的逐步回归法,获取自变量中对违约状态影响最显著的指标,代码如下:

#第四种方法:自变量的逐步回归法
base.mod<-lm(credit_risk~1,data = quant_GermanCredit)#获取线性回归模型的截距
all.mod<-lm(credit_risk~.,data = quant_GermanCredit)#获取完整的线性回归模型
stepMod<-step(base.mod,scope = list(lower=base.mod,upper=all.mod),direction = "both",trace = 0,steps = 1000)#采用双向逐步回归法,筛选变量
shortlistedVars<-names(unlist(stepMod[[1]]))#获取逐步回归得到的变量列表
shortlistedVars<-shortlistedVars[!shortlistedVars %in%"(Intercept)"]#删除逐步回归的截距
print(shortlistedVars)
#输出逐步回归后得到的变量

(5)第五种定量指标的筛选方法:采用“Boruta”法,获取自变量中对违约状态影响最显著的指标,代码如下:

#第五种方法:"Boruta"法
library(Boruta)
boruta_output<-Boruta(credit_risk~.,data = na.omit(quant_GermanCredit),doTrace=2)
boruta_signif<-names(boruta_output$finalDecision[boruta_output$finalDecision %in%c("Confirmed","Tentative")])
#获取自变量中确定的和实验性的指标
print(boruta_signif)
#Levels: Tentative Confirmed Rejected
#Confirmed坚定的;Tentative踌躇的;Rejected拒绝的

plot(boruta_output,cex.axis=.7,las=2,xlab="",main="Variable Importance")
#绘制变量显著性表示的箱图

图3.9 箱图表示变量重要性(Boruta法)

综上,我们共计详细使用了五种定量指标入模的方法,在实际的模型开发过程中,我们可以只选择其中一种方法,也可以结合多种方法,来筛选出定量数据的入模指标。综合这五种方法,我们筛选出了对违约状态影响最显著的四个入模指标,如表3.11所示。

定性指标筛选见下篇: http://blog.csdn.net/lll1528238733/article/details/76600147

这里补充一下随机森林特征重要性计算:

现实情况下,一个数据集中往往有成百上前个特征,如何在其中选择比结果影响最大的那几个特征,以此来缩减建立模型时的特征数是我们比较关心的问题。这样的方法其实很多,比如主成分分析,lasso等等。不过,这里我们要介绍的是用随机森林来对进行特征筛选。
用随机森林进行特征重要性评估的思想其实很简单,说白了就是看看每个特征在随机森林中的每颗树上做了多大的贡献,然后取个平均值,最后比一比特征之间的贡献大小。
好了,那么这个贡献是怎么一个说法呢?通常可以用基尼指数(Gini index)或者袋外数据(OOB)错误率作为评价指标来衡量。我们这里只介绍用基尼指数来评价的方法。
我们将变量重要性评分(variable importance measures)用VIM来表示,将Gini指数用GI来表示,假设有m个特征X1,X2,X3,...,Xc,现在要计算出每个特征Xj的Gini指数评分,亦即第j个特征在RF所有决策树中节点分裂不纯度的平均改变量。
Gini指数的计算公式为

其中,K表示有K个类别,pmk表示节点m中类别k所占的比例。
直观地说,就是随便从节点m中随机抽取两个样本,其类别标记不一致的概率。
特征Xj在节点m的重要性,即节点m分枝前后的Gini指数变化量为

其中,GIl和GIr分别表示分枝后两个新节点的Gini指数。
如果,特征Xj在决策树i中出现的节点在集合M中,那么Xj在第i颗树的重要性为

假设RF中共有n颗树,那么

最后,把所有求得的重要性评分做一个归一化处理即可。

IV补充:

IV的全称是Information Value,中文意思是信息价值,或者信息量。

我们在用逻辑回归、决策树等模型方法构建分类模型时,经常需要对自变量进行筛选。比如我们有200个候选自变量,通常情况下,不会直接把200个变量直接放到模型中去进行拟合训练,而是会用一些方法,从这200个自变量中挑选一些出来,放进模型,形成入模变量列表。那么我们怎么去挑选入模变量呢?

挑选入模变量过程是个比较复杂的过程,需要考虑的因素很多,比如:变量的预测能力,变量之间的相关性,变量的简单性(容易生成和使用),变量的强壮性(不容易被绕过),变量在业务上的可解释性(被挑战时可以解释的通)等等。但是,其中最主要和最直接的衡量标准是变量的预测能力。

“变量的预测能力”这个说法很笼统,很主观,非量化,在筛选变量的时候我们总不能说:“我觉得这个变量预测能力很强,所以他要进入模型”吧?我们需要一些具体的量化指标来衡量每自变量的预测能力,并根据这些量化指标的大小,来确定哪些变量进入模型。IV就是这样一种指标,他可以用来衡量自变量的预测能力。类似的指标还有信息增益、基尼系数等等。

实际上,在评分卡系统中,变量筛选用IV,为什么呢,因为逻辑回归的评分卡模型中,最终要对输入变量做woe编码,而IV的计算是以woe为基础的。相比而言,上面提到的这些通用的变量筛选方案,要吗回归思路,不断选用特征去评估,要吗像随机森林一样计算,但是随机森林有个前提是,训练了一个随机森林的模型,但我们的模型并不是随机森林模型而是逻辑回归,当然,就特征选择而言,没有毛病,但在贴合场景的评分卡系统中,选择最适合场景的特征,应该保证数据、模型、特征统一,结果才更好。

评分卡模型开发(四)--定量指标筛选相关推荐

  1. 信用评分卡模型开发及评估指标

    版权声明:本文为博主原创文章,未经博主允许不得转载. 一.信用风险评级模型的类型 信用风险计量体系包括主体评级模型和债项评级两部分.主体评级和债项评级均有一系列评级模型组成,其中主体评级模型可用&qu ...

  2. 评分卡模型开发(十)--总体流程

    转自: https://blog.csdn.net/lll1528238733/article/details/76602006 一.信用风险评级模型的类型 信用风险计量体系包括主体评级模型和债项评级 ...

  3. 信用标准评分卡模型开发及实现

    一.信用风险评级模型的类型 信用风险计量体系包括主体评级模型和债项评级两部分.主体评级和债项评级均有一系列评级模型组成,其中主体评级模型可用"四张卡"来表示,分别是A卡.B卡.C卡 ...

  4. 信用评分卡模型开发中双峰分布原因及解决方案

    信用评分卡模型开发中双峰分布原因及解决方案   文: 郑旻圻 邹钰 刘巧莉 转自:  数信互融 在信用评分卡模型开发过程中,正态性是检验模型信用评分分布是否有效的一个重要指标.正常情况下,标准的正态分 ...

  5. 评分卡模型开发(五)--定性指标筛选

    转自:https://cloud.tencent.com/developer/article/1016327 定量指标是数值型的,我们还可以用回归的方法来筛选,那么定性的指标怎么办呢? R里面给我们提 ...

  6. 评分卡模型开发-定性指标筛选

    定量指标是数值型的,我们还可以用回归的方法来筛选,那么定性的指标怎么办呢? R里面给我们提供了非常强大的IV值计算算法,通过引用R里面的informationvalue包,来计算各指标的IV值,即可得 ...

  7. 评分卡模型开发(六)--WOE值计算

    转自:https://cloud.tencent.com/developer/article/1016331 对入模的定量和定性指标,分别进行连续变量分段(对定量指标进行分段),以便于计算定量指标的W ...

  8. 评分卡模型开发(七)--基于逻辑回归的标准评分卡实现

    由逻辑回归的基本原理,我们将客户违约的概率表示为p,则正常的概率为1-p.因此,可以得到几率,也叫对数比率: 此时,客户违约的概率p可表示为: 评分卡设定的分值刻度可以通过将分值表示为比率对数的线性表 ...

  9. 评分卡模型开发-基于逻辑回归的标准评分卡实现

    由逻辑回归的基本原理,我们将客户违约的概率表示为p,则正常的概率为1-p.因此,可以得到: 此时,客户违约的概率p可表示为: 评分卡设定的分值刻度可以通过将分值表示为比率对数的线性表达式来定义,即可表 ...

最新文章

  1. EXCHANGE证书
  2. 012_logback中的DBAppender
  3. 如何查找SAP Fiori launchpad Designer的准确路径即url地址
  4. 房租抵扣个税不用再填房东信息 房东这下放心了吗?
  5. Vim新手必看:Vim 命令图解
  6. ZendFramework多模块配置
  7. Asp.net 2.0 自定义控件开发[实现自动计算功能(AutoComputeControl)][示例代码下载][续]...
  8. 【UVA202】Repeating Decimals(模拟除法)
  9. 营收与预测:线性回归建立预测收入水平的线性回归模型。
  10. Linux下的Ruby2.7.0下载
  11. C2872 “detail”: 不明确的符号
  12. 淘宝奇门接口的签名方法
  13. VS2008 断点不起作用 失效
  14. 【Java学习笔记】常用API(String、ArrayList)
  15. 解决No backends or directors found in VCL program, at least one is necessary. Runn
  16. 使用python批量下载ensembl数据库指定类型的文件
  17. 培训班出身的程序员为什么遭人嫌弃
  18. Poseidon Foundation:利物浦努力至2020年底成为首个“气候友好型”城市
  19. 【机器学习算法面试题】四.深度神经网络中激活函数有哪些?
  20. 香港个人银行开户会问什么问题,怎么回答?

热门文章

  1. 添加native和java系统服务
  2. Android系统信息获取 之十二:获取屏幕分辨率及密度
  3. 把复杂变简单,能产生颠覆的力量
  4. UE4之读取图片并纹理贴图显示
  5. 去中心化究竟是什么意思?
  6. easyBCD多系统引导软件
  7. 写python代码案例_keras topN显示,自编写代码案例
  8. wordpress入门基本操作,网站安全防护及常用插件(建站必看教程)
  9. 什么是阿里云服务器系统盘和数据盘?
  10. pclint如何不检查头文件_如何不拆轮胎,就能检查刹车片是否要换了