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)
  • 生成评分卡
R语言信用评分卡建模_第1张图片
评分卡生成.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

你可能感兴趣的:(R语言信用评分卡建模)