在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → 基于R语言 信用风险评级模型的开发及实现

基于R语言 信用风险评级模型的开发及实现

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:1.26M
  • 下载次数:13
  • 浏览次数:164
  • 发布时间:2020-07-12
  • 实例类别:一般编程问题
  • 发 布 人:robot666
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
给予R语言实例开发 互联网金融风控模型
标准评分卡模型开发 by Erin 数据获取 EDA与数据述 数据预处理 变量选择 模型评估 模型丌发 监洲与报告 主标尺与模型验证 模型实施 图2.1评级模型开发流程 、基于 Logistic回归的标准评分卡模型开发实现 3.1明确要解决的问题 在开发信用风险评级模型〔包括个人和机构)之前,首先要明确我们需要解 决的问题。因为,个人信用风险评级模型包括中请者评级、行为评级、催收评级 欺诈评缴等儿类,廾发每一类评级模型所需要的数据也是不同的,例如开发个人 申请者评级模型需要的是个人客户申请融资类业务时提交的数据,开发个人行为 评级模型需要的是存量个人客户的历史行为数据,这两部分数据及需要解决的问 题,也存在较大的差异。因此,在开发信用风险评级模型之前,我们需要明确开 发模型的类型。此处以开发个人客户的申请者评级模型为例,来详细讲述此类模 型的开发过程 开发申请者评分模型所需要的数据是个人客户申请融资类业务时所需的数 据,包括反映个人还款意愿的定性数据,应用中请者评分模型的目的是预测该中 请客户在未来一段时间发生违约的概率 我们做预测模型的一个基本原理是用历史数据来预测木来,申请者评分模型 需要解决的问题是未来一段时间(如12个月)融资人出现违约(如至少一次90 3/60 标准评分卡模型开发 by Erin 天或90天以上逾期)的概率。在这个需求中,“未来一段时间”为表现时间窗口 ( performance window),“融资人出现至少一次90天或90天以上逾期”为观察时 间窗口( sample window)个人主体的违约跟个人行为习惯有很大的相关性,因此 我们可以通过分析个人样木总休中客户的历史违约频率来确定表现时间窗凵和 观察吋闬窗凵。这两个窗凵的确定对于我们要解决的问题,有着非常重要的影响 我们将放在第二步中结合具体的数据来分析,并讲述具体的确定方法。 3.2数据描述和探索性数据分析 数据准备和数据预处理是整个信用风险模型开发过程中最重要也是最耗时 的工作了。通常情况下,数据准备和数据预处理阶段消耗的时间占整个模型开发 时间的80%以上,该阶段主要的工作包括数据获取、探索性数据分析、缺失值处 理、数据校准、数据抽样、数据转换,还包括离散变量的降维、连续变量的优先 分段等工作。 明确了要解决的问题后,接下来我们就要搜集相关的数据了。此处,我们以 互联网上经常被用来研究信用风险评级模型的加州大学机器学习数据库中的 german credit data为例,来详细讲述个人客户信用风险评级模型的开发方法。 German credit data的数据来自kaR"包 Insta11. packages(“klaR”) 1 ibrary(“k1aR”) data(germancredi t View(Germancredit) #查看该数据集 该数据集包含了1000个样本,每个样本包括了21个变量(属性),其中包 括1个违约状态变量“ credit risk”,剩余20个变量包括了所有的定量和定性指 标,分别如表31所小 表3.1 German Credit数据集的定量和定性指标 定量指标 定性指标 duration(续存期 status(状态) amount(借款额) credit history信用历史) installment rate(分期利率) purpose(资金用途) present residence(现居住时间) savings(储蓄情况) age(年龄) employment duration(工作年限) number credits(信用卡数量) personal status_sex(婚姻状况) people liab|e(法定贲任人数量) other debtors(担保情况) property(财产状况 标准评分卡模型开发 by Erin other installment_ plants(其他分期计划) housing(住房状況) job(工作状况) elephone(是否有电话) 违约状况指标 foreign worker(是否外籍工作者 credit risk(是否发生了违约) 接下来,我们需要检査数据的质量,主要包括缺失值情况、异常值情况及其 他处理方法。缺失值和异常值处理的基本原则是处理前后的分布总体保持一致。 在我们搜集样本时,许多样本中一般都含有缺失值,这种情况在现实问题中 非常普遍,这会导致一些不能处理缺失值的分析方法无法应用,因此,在信用风 险评级模型开发的第一步我们就要进行缺失值处理。缺失值处理的方法,包括如 下几种 (1)直接删除含有缺失值的样本 (2)根据样本之间的相似性填补缺失值。 (3)根变量之间的相关关系填补缺失值。 直接删除含有缺失值的样本时最简单的方法,尤其是这些样本所占的比例非 常小时,用这种方法就比较合理,但当缺失值样本比例较大时,这种缺失值处理 方法误差就比较大了。在采用删除法剔除缺失值样本时,我们通常首先检査样本 总体中缺失值的个数,在R中使用 complete. cases()函数来统计缺失值的个 数 >Germancredit[! complete cases(Germancredit),] >nrow(GermanGredit! complete cases (Germancredi t),] > Germancredit<-na.omit( GermanCredit)#删除包含缺失值的样本 >view(Germancredit) #查看结果 根据样本之间的相似性填补缺失值是指用这些缺失值最可能的值来填补它 们,通常使用能代表变量中心趋势的值进行填补,因为代表变量中心趋势的值反 映」变量分布的最常见值。代表变量中心趋势的指标包括平均值、中位数、众数 等,那么我们采用哪些指标来填补缺失值呢?最佳选择是由变量的分布来确定 例如,对于接近正态分布的变量来说,由于所有观测值都较好地聚集在平均值周 围,因此平均值就就是瑱补该类变量缺失值的最佳选择。然而,对于偏态分布或 者离群值来说,平均值就不是最佳选择。因为偏态分布的大部分值都聚集在交量 标准评分卡模型开发 by Erin 分布的一侧,平均值不能作为最常见值的代表。对于偏态分布或者有离群值的分 布而言,中位数是更好地代表数据中心趋势的指标。对于名义变量(表3.1中的 定性指标),通常采用众数填补缺失值。 我们将上述分析放在一个统一的函数 centra1 Imputation(中,对于数 值型变量,我们用中位数填补,对于名义变量,我们用众薮填补,函数代码如下 centralImputation<-function (data) for(i in seq(ncol(data)) if(any (idx<-is na(datal, i]))) datalidx, i]<-centralvalue(datal, i]) datap centralvalue<-function (X, WS=NULL) if〔is. numeric(x) if(is null(ws)) median(, na rm= T) else if((s<sum ws))>0) sum(*(WS/s)) else na else x<-as factor(x) if〔is.nu11(ws)) levels(x) which, max(table(x)] else levels(x)[which. max (aggregate (ws, list(x), sum)[, 2]) 6/60 标准评分卡模型开发 by Erin 调用上述函数对缺失值进行填补,代码如下: X<-centralImputation(Germancredit) Vlew (x #查看填补结果 上述按照中心趋势进行缺失值填补的方法,考虑的是数据每列的数值或字符 属性,在进行缺失值填补时,我们也可以考虑每行的属性,即为我们要讲述的第 三种处理缺失值的方法,根据变量之间的相关关系填补缺失值。 当我们采用数据集每行的属性进行缺失值填补时,通常有两种方法,第一种 方法是计算k个(本文k=10)最相近样本的中位数并用这个中位数来填补缺失 值。如果缺失值是名义变量,则使用这k个最近相似数据的加权平均值进行填补, 权重大小随着距离待填补缺失值样本的距离増大而减小,本文我们釆用高斯核函 数从距离获得权重,即如果相邻样本距离待填补缺失值的样本的距离为d,则它 的值在加权平均中的权重为: d 在寻找跟包含缺失值的样本最近的k个邻居样本时,最常用的绎典算法是 knn( k-nearest-neighbor)算法,它通过计算样本间的欧氏距离,来寻找距离包含 缺失值样本最近的k个邻居,样本ⅹ和y之间欢式距离的计算公式如下: d(x, y) Ei,yi 式中:62()是变量i的两个值之间的距离,即 当i是名义变量且v1≠v2时 62(v1,v2)={0 当i是名义变量且 (n1-v2)2当i是数值变量时 在计算欧式距离时,为了消除变量间不同尺度的影响,通常要先对数值变量 进行标准化,即 xi 标准评分卡模型开发 by Erin 我们将上述根据数据集每行的属性进行缺失值填补的方法,封裝到 knnImputation)函数中,代码如下: knnImputation<-function (data, k=10, scale=T, meth="wei ghAvg", distDat a=NULL) n<-nrow (data if(!is null(distData)) distInit<-n+1 data<rbind(data, distData) else disinit<-1 N<-nrow (data) nco 1<-ncol(data) nomAttrs<-rep(f, ncoD) for (i in seq (ncol)) nomAttrs [i]<-is factor (datal 1]) nomAttrs<-which (nomAttrs) hasNom<-length (nomAttrs) contAttrs<-setdiff (seg (nco l), nomAttrs) dm<-data if(scale) dm[, contAttrs]<-scale(dm[, contAttrsD i fchasNom) for(i in nomAttrs) dm[, i]<-as integer(dml, i]) dm<as matrix(dm nas<-which(! complete cases(dm) if(!is null(distData)) tgt. nas<-nas [nas<=n] e i se 标准评分卡模型开发 by Erin tat. nas<-nas if(length(tgt. nas)==0) warning No case has missing values. Stopping as there is nothing to do.") xcomp lete<-dmlsetdiff(disinit: N, nas) if(nrow(complete)<k) stop( Not sufficient complete cases for computing nei ghbors") for (i in tgt. nas) tgtAS<-which(is na(dm [i, ]) dist<-scale(complete, dm[i, ], FALSE) xnom<-setdiff(nomAttrs, tgtAs if(length(xnom)) distI, xnom]<-ifelse(dist[, xnom]>0, 1, dist[, xnom]) dist<-distl,-tgtAS] dist<-sgrt(drop(distA2%*%rep(l, ncol(dist)))) kS<-order(dist)[seq(k)] for( in tgtAs)if(meth=="medi an") data[i, j]<-centralvalue(datalsetdiff(distInit: N, nas), j]tks]) else datai, j]<-centralvalue(data[setdiff(distInit:N, nas), j kks], exp(-dist[ks])) datall: n, 调用 knnImputation函数,用kn方法填补缺失值,代码如下: d<-knnImputation(Germancredit) View(d) 查看填补结果 标准评分卡模型开发 by Erin 如果使用k近邻的中位数来填补缺失值,可使用如下代码: d<-knnImputation(Germancredit, k=10, meth="median") View( 综上,我们共讲述了三种缺失值的处理方法,当我们决定采用哪种方法来填 补缺失值时,通常需要根据所分析领域的具体情况来确定, 缺失值处理完毕后,我们还需要进行异常值处理。异常值是指明显偏离人多 数抽样数据的数值,比如个人客户的年龄大于100时,通常认为该值为异常值。 找出样本总体中的异常值,通常采用离群值检测的方法。 离群值检测的方沄有单变量离群值检测、局部离群值因子检测、基于聚类方 法的离群值检测等方法。由于本文采用的样本总体 German Credit已经进行了数 据预处理,即已经做了缺失值和异常值处理,因此,我们以随机产生的样木为例 来说明离群值检测的方法。 第一种方法是单变量离群值检测,该方法的原理是通过求解单变量数值的第 1个和第3个四分位数的值,将数值小于第1个四分位数和大于第3个四分位数 的值定义为离群值。该方法可通过R包 grDevices中的 boxplot. stats 函数实现。 我们用随机数来演示获取异常值的方法,代码如下: >library (grDevices) >set.seed(1100)#设置获取随机数的种子 >x<- rnorm(100)#生成100个随机数,并检测异常值 >summary(x) Min. 1st Qu. Median mean 3rd Qu Max -2.2951-0.42880.19810.12430.66932.3804 > boxplot, stats(x)$out#检测并输出异常值 [1]2.380427-2.295102 boxplot(x) #用箱线图表示异常值,如图3.1所示 10/60 【实例截图】
【核心代码】

标签:

实例下载地址

基于R语言 信用风险评级模型的开发及实现

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警