目标:信用评分,对个人借贷进行风险评估。
一、数据预处理
导入数据
自变量-连续型 |
V2,V5,V8,V11,V13,V16,V18 |
自变量-分类型 |
V1,V3,V4,V6,V7,V9,V10,V12,V14,V15,V17,V19,V20 |
因变量y |
V21 |
变量释义 |
https://archive.ics.uci.edu/ml/datasets/Statlog+(German+Credit+Data) |
* 数据下载见:变量释义中的链接
R程序:
rawdata = read.table("D:/personal/knowledge/dataMining/dataset/german/german.data",header=F) rawdata$y <- as.factor(rawdata$V21) rawdata$V21 <- NULL str(rawdata) |
数据准备
训练数据 |
从总样本中抽样600条 |
验证数据 |
剩余的400条 |
R程序:
trainIdx <- sample(nrow(rawdata), round(0.6*nrow(rawdata))) traindata <- rawdata[trainIdx,] validdata <- rawdata[-trainIdx,] |
1、数据清洗(data cleaning)
(1)缺失值处理(missingdata processing)
无缺失值。
(2)连续数据离散化(data discretization)
使用WoE进行离散化处理,见建模阶段处理。
(3)去噪声(noisy dataprocessing)
(未有时间研究)
(4)去异常值(outlierprocessing)
?
(5)共线性变量处理(pairwisecorrelations processing)
VIF (未有时间研究)
2、数据集成(data integration)
单一数据来源,数据结构也一致。无需再集成。
3、数据变换(data transformation)
(1)规范化处理
使用WoE进行离散化处理,见建模阶段处理。
二、模型选择
1、GLM-logistic回归(GLM logistic regression)
(1)WoE建模(Modeling)
我们结合使用信用评分卡中的WoE(Weight of Evidence证据权重)对连续型变量进行离散化处理。
R程序:
woemodel <- woe(y~., data = traindata, zeroadj=0.5, appont = TRUE) # 需安装klaR包,install.packages("klaR") |
(2)IV检验(Examine)
IV(Information Value 信息价值)检验,检验标准如下:
Information Value |
Predictive Power |
< 0.02 |
useless for prediction |
0.02 to 0.1 |
Weak predictor |
0.1 to 0.3 |
Medium predictor |
0.3 to 0.5 |
Strong predictor |
>0.5 |
too good to be true |
R程序:
woemodel |
结果:
IV V1 0.672439277 V3 0.284116679 V6 0.223761533 V4 0.149480263 V7 0.119616049 V10 0.092531065 V12 0.085246908 V15 0.070580379 V20 0.061258525 V14 0.054065776 V9 0.041359709 V17 0.008511956 V19 0.001861789 |
通过结果观测,我们发现<0.02:V17, V19,>0.5:V1。
V1: Status of existing checking account
V17: Job
V19: Telephone
由此得知,V1, V17, V19都不应直接放入模型。(就这样就行?)
(3)logistic建模(Modeling)
Logistic Regression with Weight of Evidence。
R程序:
woedata <- predict(woemodel, traindata, replace = TRUE) woedata$woe.V1 <- NULL woedata$woe.V17 <- NULL woedata$woe.V19 <- NULL str(woedata)
logit.glm <- glm(y~., family=binomial, data=woedata) |
(4)z统计量及AIC检验(Examine)
R程序:
summary(logit.glm) |
结果:
Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -2.328e+00 6.965e-01 -3.342 0.000832 *** V2 2.890e-02 1.114e-02 2.594 0.009487 ** V5 1.055e-04 4.838e-05 2.180 0.029264 * V8 3.001e-01 1.035e-01 2.898 0.003756 ** V11 1.164e-01 1.023e-01 1.138 0.255123 V13 -3.320e-02 1.105e-02 -3.005 0.002654 ** V16 1.193e-02 2.028e-01 0.059 0.953095 V18 3.748e-01 3.042e-01 1.232 0.218022 woe.V3 -1.068e+00 2.168e-01 -4.926 8.41e-07 *** woe.V4 -1.233e+00 2.803e-01 -4.399 1.09e-05 *** woe.V6 -1.022e+00 2.362e-01 -4.326 1.52e-05 *** woe.V7 -6.759e-01 3.190e-01 -2.118 0.034140 * woe.V9 -1.472e+00 5.540e-01 -2.658 0.007862 ** woe.V10 -9.178e-01 3.602e-01 -2.548 0.010827 * woe.V12 9.430e-02 4.012e-01 0.235 0.814189 woe.V14 -8.667e-01 4.421e-01 -1.960 0.049953 * woe.V15 -5.409e-01 4.103e-01 -1.318 0.187396 woe.V20 -1.480e+00 7.809e-01 -1.895 0.058054 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 747.65 on 599 degrees of freedom Residual deviance: 581.37 on 582 degrees of freedom AIC: 617.37 |
通过结果观测,我们发现V20大于0.1显著性水平,V11、V16、V18、V12、V15大于0.05显著性水平,这些变量接受原假设,对因变量信用风险无显著影响。
V11:Present residence since
V12:Property
V15:Housing
V16:Number of existing credits at this bank
V18:Number of people being liable to provide maintenance for
V20:foreign worker
(尼妈,property、housing都没影响?!)
AIC值为617.37,后面逐步回归时及模型比较时会用上。
(5)逐步回归建模(Modeling)
我们使用逐步回归分析来解决参数检验不显著的情况,应用 stepwise logistic regression。
R程序:
logit.glm.step <- step(logit.glm, direction="both") |
(6)z统计量及AIC检验(Examine)
R程序:
summary(logit.glm.step) |
结果:
Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -1.612e+00 5.013e-01 -3.215 0.00130 ** V2 2.845e-02 1.090e-02 2.611 0.00904 ** V5 1.009e-04 4.766e-05 2.117 0.03425 * V8 2.880e-01 1.022e-01 2.817 0.00484 ** V13 -2.969e-02 1.073e-02 -2.768 0.00564 ** woe.V3 -1.048e+00 2.023e-01 -5.183 2.19e-07 *** woe.V4 -1.261e+00 2.786e-01 -4.527 5.99e-06 *** woe.V6 -9.894e-01 2.338e-01 -4.231 2.33e-05 *** woe.V7 -5.970e-01 3.113e-01 -1.918 0.05514 . woe.V9 -1.264e+00 5.276e-01 -2.396 0.01657 * woe.V10 -8.695e-01 3.502e-01 -2.483 0.01304 * woe.V14 -8.312e-01 4.385e-01 -1.896 0.05801 . woe.V15 -6.759e-01 3.853e-01 -1.754 0.07940 . woe.V20 -1.491e+00 7.786e-01 -1.915 0.05550 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 747.65 on 599 degrees of freedom Residual deviance: 584.34 on 586 degrees of freedom AIC: 612.34 |
在逐步回归之后,V11、V12、V16、V18去掉,V15、V20保留。各参数全部通过显著性检验。同时,AIC为612.34,小于原来的617.37,表明优先考虑逐步回归后的模型。
(7)其它检验(Examine)
ROC/AUC、Gini检验(后补)
2、GAM-logistic回归(GAM logistic regression)
(后补)
3、模型比较(Model comparison)
(后补)
4、Scorecards构建(Scorecards)
(怎搞??? 最大的疑问~)
上两个公式:
(1)各个属性评分
woe=ln(odds),beita为回归系数,altha为截距,n为变量个数,offset为偏移量(视风险偏好而定),比例因子factor。
(2)总评分
比例因子和偏移量都是人为设定,还是反计算所得?
5、模型验证(Model validation)
R程序:
validWoeData <- predict(woemodel, validdata, replace = TRUE) pred.val <- predict(logit.glm.step, validWoeData, type = "response") pred.val |
结果(前16条):
5 7 12 13 14 15 17 23 0.357798810 0.075791812 0.837024202 0.225547085 0.095280357 0.528561890 0.025320823 0.006696470 25 31 32 40 42 44 46 47 0.002720358 0.161846210 0.512595515 0.247351390 0.179962491 0.146126291 0.303658983 0.134170936 |
(怎么看这个结果?)
三、模型预测
从模型验证(Model validation)中抽取记录当作预测。