美文网首页风控模型
R语言信用评分卡建模

R语言信用评分卡建模

作者: Liam_ml | 来源:发表于2018-01-07 14:59 被阅读1366次

    关键词: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

    相关文章

      网友评论

        本文标题:R语言信用评分卡建模

        本文链接:https://www.haomeiwen.com/subject/eeppnxtx.html