R语言信用评分卡建模

关键词:R语言 ;信用评分;数据挖掘;机器学习

本身是数学,统计出生,不想当码农,于是觉得风控是一个是挺适合我的职业。但是对相关知识,专业术语还是很缺乏,希望通过学习,对这个领域有一个全面的了解。

变量筛选

特征工程(对变量进行初筛,可用随机森林,xgboost)

  • 过滤法:通过指标,设定阈值筛选变量。比如方差选择,相关系数,卡方值,信息值
  • 封装法:建立模型,通过模型性能评估特征。递归特征消除法(recursive feature elimination)逐步回归
  • 基于惩罚项,L1-lasso回归,L2-岭回归(L1主要用于特征选择,L2多用于解决共线性)
  • 基于树的特征选择法(熵,信息增益)
  • 深度学习

缺失值处理与分析

缺失值处理步骤

  1. 数据情况:str,summary查看数据结构。sapply(data,function(x) sum(is.na(x)))

  2. 计算数据缺失率::
    miss<-sapply(data,function(x(sum(is.na(x))/length(x)*100))
    对数据的缺失比例进行统计,超过一定比例就舍弃。 相关的命令还有:complecase;any.na;

  3. 查看各个列的数据类型:sapply(names(data),function(x)class(data[,x))

  4. 对于integer类型的数据,是否需要转化为factor

  5. 判断各个离散特征的分类数,分类不能小于5.
    sapply(data,function(x)length(unique(x)))

  6. 查看各个特征是否存在空值

  7. 实用VIM对缺失值进行可视化:

library(VIM)
aggr_plot<-aggr()
  1. 缺失值填充:
    手动填充:数值填充为中位数,因子填充为众数。
#把空白的填充为NA
dataset[dataset==""]<-NA

# 删除全部是NA的列
dataset<- dataset[,which(apply(dataset,2,function(x)all(is.na(x))))

# 缺失值填充,连续填充为中位数,离散填充为众数
for(i in 1:ncol(dataset)){
    if(class(dataset[1,i)%in%c('integer','numeric'))
              dataset[,i][is.na(dataset[,i)]<- median(dataset[,i),na.rm=T
    if(class(dataset[1,i)=='factor')
              dataset[,i][is.na(dataset[,i)]<- as.factor(names(which.max(table(dataset[,i))))

# 查看缺失值
anyNA(dataset)

还可以用mice,caret包进行缺失值处理。

另外还有预测差值

  • caret的preProcess
  • mice包蒙特卡洛模拟
  • DMwR包众的knnImputation
  • missForest包

异常值分析以及处理(评分卡一般采用IV值来筛选变量)

http://youhaolin.blog.163.com/blog/static/224494120201422110628586/

  • 单变量异常值检测:boxplot.stats
  • 使用LOF(局部异常因子)检测异常值:DMwR和dprep包众的lofactor
  • 聚类分析检测异常值:DBSCAN,k-means
  • lsolationForest
    install.packages("devtools") devtools::install_github("Zelazny7/isofor")

数据集合的切分

caret包

  • 生成训练测试集合createDataPArtition
  • 有放回的抽样(BoostStrap) createResample
  • 基于交叉验证的样本抽样 createFolds

woe转换

分箱算法(optimal binning)

  • smbinning包
    使用smbinning对连续变量进行分箱,不能小于5个类别,对factor没有限制。
  1. 预处理,连续值as.numeric,离散值 as.factor
  2. 要求y为数值型
  • 手动分箱
    按分位数

  • 变量筛选

  1. 计算woe值:
    klaR包;
    information包

  2. IV值 klaR包

  3. 逐步回归筛选:glmnet,bestglm,leaps,step
    推荐使用glmnet或者bestglm
    变量小于20可用bestglm,大于20时用glmnet,lasso较好

  4. 共线性
    相关系数:caret的findCorrelation;cor();

  5. 方差膨胀因子VIF

library(car)
vif(lm1,digits=3)

当VIF小于10,不存在共线性。大于100存在高度共线性。

评分卡的创建与实施

  • 使用logistic回归:
glm_model=glm(y~.,data=data,family=binomial(link="logit"))
pred=predict(glm_model,newdata=data,type="respinse)
  • 生成评分卡
评分卡生成.png

模型评估

  • ROC
    x为FPR,y为TPR
  • k-s指标
    x为RPP,y为TPR-FPR
    RPP=(TP+FP)/(FP+TP+FN+TN)
  • 洛伦兹图
    x为RPP,y为TPR
  • lift图:
    lift=PV/K ;
    K=(TP+FN)/(FP+TP+FN+TN)
    PV=TP/(TP+FP)
    x轴为RPP,y轴为Lift
  • gini系数
    x为TNR,y为FNR
    GINI=2*AUC-1
  • 群体稳定性
    PSI计算公式为:
    sum(实际占比-预期占比)*ln(实际占比/预期占比)
    PSI小于0.1稳定性较好
  • 特征稳定性:CSI

决策点 cut-off

  1. 好坏比(good/bad=odds)
  2. 核准率(approval rate)
  3. 核准件众好客户数
  4. 核准件众坏客户数

评分卡监控

https://valiancesolutions.com/credit-risk-scorecard-monitoring-traking/

  1. 前段监控:
    总体稳定性:PSI小于0.1,稳定
    特征稳定性:CSI>5认为特征不稳定
  2. 后端监控
    总体识别度:
    K-S:41-75 越大越好
    GINI:0.4-1.越大越好
  3. 特征识别度:IV值大于0.3就很不错了
    4.资产质量监控
    VIntage analysis
    迁移率 Flow Rate
    滚动率 Roll Rate
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容

  • 一、关于互联网金融授信产品的风控建模 如何利用机器学习以及大数据技术来降低风险呢?如何建立信用评分的模型呢?本文将...
    apricoter阅读 20,934评论 10 33
  • R语言与数据挖掘:公式;数据;方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还...
    __一蓑烟雨__阅读 1,634评论 0 5
  • 数据了解 1.数据读取 open(), pd.read_csv(), datasets.load_iris() 注...
    Carolina_Wang阅读 689评论 0 0
  • 数据描述:数据属于个人消费类贷款,只考虑评分卡最终实施时能够使用到的数据应从如下一些方面获取数据: – 基本属性:...
    蛐蛐囍阅读 1,833评论 0 4
  • 什么是评分卡(信贷场景中) 以分数的形式来衡量风险几率的一种手段,对未来一段时间内违约/逾期/失联概率的预测 通常...
    chfing阅读 1,198评论 0 1