如何利用汽车贷款违约数据进行信用风险建模

       

图片发自简书App

今天老师带着我们花了整整一天时间针对一份汽车贷款违约数据进行了一次信用风险建模。整个建模过程是在R语言上做的。现在我把今天学到的东西整体罗列一下。

       首先,向R中导入数据,通过setwd()创造导入途径,然后用read.csv()对数据进行读取。这里需要读取两份文件:一份是接受客户贷款的的数据A,另一份是在客户申请时被拒绝的客户数据B。这样做的目的是后期合并成一张数据,以保证最后的建模合理性。

      接下来需要把数据集A中的解释变量(自变量)和被解释变量(因变量y)分开,目的为了做拒绝推断。做法是由于自变量众多,一般选取客户近期的交易数据作为解释变量,比如客户的五年内信用不良事件数量,FICO打分,可循环贷款账户数量等。解释变量就是是否违约。可通过筛选子集的方式,对数据集A和B建立解释变量数据集Ax和Bx。

2.对数据集Ax和Bx进行数据清洗和数据标准化。

       首先对数据中的缺失值进行处理。第一步,下载dfexplore安装包,通过dfplot()来检查两个数据集缺失值情况。图中红线即为缺失值。

然后创建一个函数用来求解缺失比例和缺失个数。函数如下:

NA-detect=function(data){

      res=cbind(sapply(data,function(x) sum(is.na(x)))),sapply(data,function(x) sum(is.na(x))/length(x))

colnames(res)=c(‘NA-number’,‘NA-proportion’)

return(res)}

通过NA-detect()查看缺失比例和缺失个数。

由于x变量均为连续变量,可用均值和中位数对数据进行填充。代码如下:

     Ax[is.na(Ax$tot_derog),‘tot_derog’]=meadian(Ax$tot_derog,na.rm=T)

其它解释变量填充一样。当填充完毕后,需重新运行NA_detect(),检查缺失值是否填充完毕。

其次,对数据集异常值也要进行处理。处理思想是把每个解释变量按照从大到小进行排列然后把变量的最小和最大的1%的数据赋予新值(新值即是临界点值)。方法是先建立一个函数:

outlier=function(var){

var[var<quantile(var,0.01)]=quantile(var,0.01)

var[var>quantile(var,0.99)]=quantile(var,0.99)

print(‘ok’)

return(var)}

然后应用for循环对Ax和Bx进行赋值。

最后对数据进行标准化,可以采用中心标准化和极差标准化两种方式。

极差标准化算法较简单易理解一点。代码如下:

normalize=function(x){

   return((x-min(x))/(max(x)-min(x)))}

Ax=as.data.frame(sapply(Ax,normalize))

Bx=as.data.frame(sapply(Bx,normalize))

3.开始建模并预测。

第一步,合并解释变量Ax与被解释变量Y可通过cbind.data.frame()实现

orgin=cbind.data.frame(Ax,bad_ind)

通过Y变量与数据进行排序。

第二步,对数据集orgin进行数据分区,可采用随机抽样和分层抽样两种方式,这里介绍分层抽样。需要先下载一个包sampling,然后调用strata分层抽样函数对数据集orgin进行抽样。抽样的目的是得到训练集合测试集。

分层抽样代码:

select=strata(orgin,stratanames=‘bad_ind’,size=table(orgin$bad_ind)*0.6),method=‘srswor’)$ID_unit

然后选子集得到训练集被解释变量train_y和解释变量train,以及测试被解释变量test_y和解释变量test。

第三步,调优

调优的目的是让预测模型尽可能准确。主要思想是通过KNN算法通过训练集对测试集进行预测,然后拿测试数据预测得到的被解释变量和测试数据真实被解释变量做列联表,有由于本次测试是风险评估,所以看各k值下不同的覆盖率,得到最大覆盖率所对应的k值等于1。

然后通过得到的k值,再次通过KNN算法对Bx数据进行预测。得到B预测值并合并到B表中。然后通过A数据集中bad_ind内数据求比值(得到比例为3.88,表示不违约客户是违约客户的3.88倍)。对B数据通过分层抽样获得相同比例的抽取。所获得的数据集为C,然后删除C数据集中和A不同的变量,对A和C进行合并。就得到一个既包括被接受样本又包括被拒绝样本的是否违约的数据集data了。


以上过程只是先找到合适的数据集进行建模。

接下来便开始进行建模。

第一步,违约推断

将数据集data中分类变量转换成因子。先找到data中分类变量,然后通过factor()转换。

第二步,对数据集自变量进行粗略筛选。由于原始变量太多,因此在前期需要将不重要的变量进行踢出。

这里可先下载一个party的安装包,调用随机森林算法进行粗筛。方法是先调用cforest函数对原始数据进行随机森林运算。然后通过varimp()计算各变量的差异重要性,并进行排序,可用过画图barplot观察各个变量的差异重要性。最后根据业务经验筛选出前()%的变量。我这里是60%。当然也可以通过IV算法,确定变量个数。

第三步,对变量进行细筛。所用方法是IV算法。大概意思是对每一个变量算出违约与不违约人数占样本总数概率p1和p2,然后(p2-p1)*ln(p2/p1)求出每个变量的差异值。并根据差异值大小进行排序,差异值越大,对预测目标变量越有显著意义。(哦,忘了,还需要对缺失值和异常值处理,这里就不多说了)


第四步,对数据data进行分区。即抽样获得训练样本和测试样本。可通过sample()或者strata()获得比例还是6:4最好。

第五步,对剩下的变量中连续变量进行分箱处理。可用woe分箱转换。此算法主要为后期的打分做准备。可调用woe.replace()对训练集进行分箱转换。得到两个新的转换后数据集train_woe和test_woe.

第六步,建模。通过逻辑回归进行建模。可调用用lm()函数。

模型评估有以下几种可供参考:ROC模型,洛伦兹模型,累积提升度,K-S统计量等方法。

好了,先这样,如有错误,请大家多多指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容