R 多变量数据预处理_R语言:基于逻辑回归的信用评分模型设计

本文介绍了使用R语言对信用评分数据进行预处理,包括缺失值处理、异常值处理和相关性分析,然后利用逻辑回归模型进行建模,并通过10-折交叉验证得到平均AUC为0.8010,证明模型具有较好的预测效果。
摘要由CSDN通过智能技术生成

摘要

信用评分卡模型在国外是一种成熟的预测方法,尤其在信用风险评估以及金融风险控制领域更是得到了比较广泛的使用,其原理是将模型变量WOE编码方式离散化之后运用logistic回归模型进行的一种二分类变量的广义线性模型。本文首先对数据进行预处理,即解决缺失值、异常值问题,同时分析了数据的相关性,之后采用K-折交叉验证将数据划分为训练集和测试集,通过建立逻辑回归模型对数据进行训练,得出10-折交叉验证的平均AUC为0.8010,实验表明模型检测效果较好。

背景

客户申请评分卡由一系列特征项组成,每个特征项相当于申请表上的一个问题(例如,年龄、银行流水、收入等)。每一个特征项都有一系列可能的属性,相当于每一个问题的一系列可能答案(例如,对于年龄这个问题,答案可能就有30岁以下、30到45等)。在开发评分卡系统模型中,先确定属性与申请人未来信用表现之间的相互关系,然后给属性分配适当的分数权重,分配的分数权重要反映这种相互关系。分数权重越大,说明该属性表示的信用表现越好。一个申请的得分是其属性分值的简单求和。如果申请人的信用评分大于等于金融放款机构所设定的界限分数,此申请处于可接受的风险水平并将被批准;低于界限分数的申请人将被拒绝或给予标示以便进一步审查。

逻辑回归模型是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。逻辑回归从本质来说属于二分类问题。

数据集

数据来源:

kaggle的数据集:https://www.kaggle.com/c/GiveMeSomeCredit,通过对消费者的人口特征、信用历史记录、交易记录等大量数据进行系统的分析、挖掘数据蕴含的行为模式、信用特征,发展出预测行的模式,结合信用卡评分的构建原理,采用R语言完成数据的清洗,主要包括缺失数据的填充、异常的删除和数据的分箱;调用Logistic回归模型建立信用卡评分的基础模型,借助自变量的证据权重转换(WOE)创建信用卡评分卡,并开发一个简单的信用评分系统。

数据说明

Give Me Some Credit项目中的训练集在cs-training.csv文件中,有150000条数据,12个变量,测试集在cs-test.csv文件中,有101503条数据,12个变量,训练集和测试集中的数据结构类型如图1所示:

37609ebce447506742dc8ba2510ea88d.png

图1 训练集数据结构类型

每个变量的含义如下所示:

  1. SeriousDlqin2yrs:超过90天(包括90天)的逾期拖欠
  2. RevolvingUtilization Of UnsecuredLines:无担保放款的循环利用:除了不动产和像车贷那样除以信用额度总和的无分期付款债务的信用卡和个人信用额度总额
  3. Age:借款人年龄
  4. NumberOfTime30-59DaysPastDueNotWorse:30-59天逾期次数
  5. DebtRatio:负债比例
  6. MonthlyIncome:月收入
  7. Number Of OpenCreditLinesAndLoans:贷款数量
  8. NumberOfTimes90DaysLate:90天逾期次数:借款者有90天或更高逾期的次数
  9. NumberReal Estate Loans Or Lines:不动产贷款或额度数量:抵押贷款和不动产放款包括房屋净值信贷额度
  10. Number Of Time 60-89Days PastDue Not Worse:60-89天逾期次数
  11. NumberOfDependents:家属数量,不包括本人在内的家属数量

数据预处理

在通常情况下,原始数据集中会存在缺失值、异常值、分布不均衡等问题,它会影响后期的程序处理及模型预测的结果,而且对于原始数据中的不同变量需要进行相关性研究,以此来确定要选用那些数据进行模型拟合,所以需要进行数据预处理,在保证数据集的数据分布和数据类型不变的情况下,来优化数据集,提高数据集的有效性。通过R语言中的以下函数读取并显示数据,数据显示结果如图1所示:

credit_data <- read.csv('cs-training.csv',stringsAsFactors = FALSE)

str(credit_data) #显示数据结构

为了方便以后的程序计算将数据中的变量进行重命名,故将SeriousDlqin2yrs作为因变量重命名为y,其余列作为自变量以此设置为x1, x2, …, x10。而SeriousDlqin2yrs变量中原本1表示违约,0表示没有违约,但是这样分析后得出的分数会与这个值呈负相关,所以为了方便后续分析,使一个人的信用程度与其分数大小正相关,将y作变换,令0表示违约,1表示没有违约。

缺失值处理

图像预处理操作首先要识别出缺失数据,可以通过R语言中的mice包中分pattern函数来生成矩形框,用颜色深浅来表示缺失值的多少,通过一下代码显示通过图3所示缺失值信息:

> library(mice)

> md.pattern(cr_data)

c79636e77c1e214f62c693007bd793dd.png

图3 数据集中的缺失值信息

图3中红色表示缺失值,颜色越深表示缺失值越多,从图中可以看到x5变量(月收入)缺失值为29731个,x10(家属数量)缺失值为3924个。因为x10的缺失值数量所占比列较小,故直接将缺失值删除,但是x5的缺失值较多,直接删除缺失值会影响整个数据的分布,影响真实数据情况,所以通过采用中位数/均值/众数等方式填充缺失数据,如图4所示是x5的数据分布情况,由图4可知,x5服从正太分布情况,故此采用中位数的方式进行缺失值的填充。

c528b7a57421972146b165ecd05fc89b.png

图4 x5变量(月收入)数据分布情况

异常值处理

异常值(outlier)指样本中的个别值的数值明显偏离它(或它们)所属样本的其余观测值,也称异常数据或离群值。剔除异常值更有利于对数据的分析和观察,也可以提高模型拟合的稳定性,防止模型过拟合。R语言中常用的异常值检测方法如下:

  1. 单变量异常值检测:调用R语言中的boxplot.stats()函数可以实现单变量异常值的检测,该函数基于数据生成的箱型图进行异常值的检测。在函数的返回结果中,参数out是由异常值组成的列表。
  2. 局部异常因子(local outlier factor,LOF)异常值检测:用于识别基于密度的局部异常值的算法。使用LOF,一个点的局部密度会与它的邻居进行比较。如果前者明显低于后者(有一个大于1的LOF值),该点位于一个稀疏区域,对于它的邻居而言表明,该点是一个异常值。LOF的缺点是它只对数值数据有效
  3. 聚类异常值检测:通过把数据聚成类,将那些不属于任务一类的数据作为异常值。比如,使用k-means算法来检测异常。即将数据被分成k组,通过把它们分配到最近的聚类中心。然后,我们能够计算每个对象到聚类中心的距离(或相似性),并且选择最大的距离作为异常值。

本文通过单变量异常值检测方法对异常值进行检测,首先对x2(Age)进行异常值检测,如图5所示是基于Age数据生成的箱型图&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值