关键词:R语言 ;信用评分;数据挖掘;机器学习
本身是数学,统计出生,不想当码农,于是觉得风控是一个是挺适合我的职业。但是对相关知识,专业术语还是很缺乏,希望通过学习,对这个领域有一个全面的了解。
变量筛选
特征工程(对变量进行初筛,可用随机森林,xgboost)
- 过滤法:通过指标,设定阈值筛选变量。比如方差选择,相关系数,卡方值,信息值
- 封装法:建立模型,通过模型性能评估特征。递归特征消除法(recursive feature elimination)逐步回归
- 基于惩罚项,L1-lasso回归,L2-岭回归(L1主要用于特征选择,L2多用于解决共线性)
- 基于树的特征选择法(熵,信息增益)
- 深度学习
缺失值处理与分析
缺失值处理步骤
-
数据情况:str,summary查看数据结构。
sapply(data,function(x) sum(is.na(x)))
-
计算数据缺失率::
miss<-sapply(data,function(x(sum(is.na(x))/length(x)*100))
对数据的缺失比例进行统计,超过一定比例就舍弃。 相关的命令还有:complecase;any.na;
-
查看各个列的数据类型:
sapply(names(data),function(x)class(data[,x))
-
对于integer类型的数据,是否需要转化为factor
-
判断各个离散特征的分类数,分类不能小于5.
sapply(data,function(x)length(unique(x)))
-
查看各个特征是否存在空值
-
实用VIM对缺失值进行可视化:
library(VIM)
aggr_plot<-aggr()
- 缺失值填充:
手动填充:数值填充为中位数,因子填充为众数。
#把空白的填充为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没有限制。
- 预处理,连续值
as.numeric
,离散值as.factor
- 要求y为数值型
-
手动分箱
按分位数 -
变量筛选
-
计算woe值:
klaR包;
information包 -
IV值 klaR包
-
逐步回归筛选:glmnet,bestglm,leaps,step
推荐使用glmnet或者bestglm
变量小于20可用bestglm,大于20时用glmnet,lasso较好 -
共线性
相关系数:caret的findCorrelation;cor(); -
方差膨胀因子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)
- 生成评分卡
模型评估
- 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
- 好坏比(good/bad=odds)
- 核准率(approval rate)
- 核准件众好客户数
- 核准件众坏客户数
评分卡监控
https://valiancesolutions.com/credit-risk-scorecard-monitoring-traking/
- 前段监控:
总体稳定性:PSI小于0.1,稳定
特征稳定性:CSI>5认为特征不稳定 - 后端监控
总体识别度:
K-S:41-75 越大越好
GINI:0.4-1.越大越好 - 特征识别度:IV值大于0.3就很不错了
4.资产质量监控
VIntage analysis
迁移率 Flow Rate
滚动率 Roll Rate
网友评论