1. 程式人生 > >評分卡模型開發--定量指標篩選

評分卡模型開發--定量指標篩選

轉自:https://cloud.tencent.com/developer/article/1016332

模型開發的前三步主要講的是資料處理的方法,從第四步開始我們將逐步講述模型開發的方法。在進行模型開發時,並非我們收集的每個指標都會用作模型開發,而是需要從收集的所有指標中篩選出對違約狀態影響最大的指標,作為入模指標來開發模型。接下來,我們將分別介紹定量指標和定性指標的篩選方法。

library(InformationValue)
library(klaR)
data(GermanCredit)
train_kfold<-sample(nrow(GermanCredit),800,replace=F)
train_kfolddata<-GermanCredit[train_kfold,]
test_kfolddata<-GermanCredit[-train_kfold,]

#將違約樣本用“1”表示,正常樣本用“0”表示。
credit_risk<-ifelse(train_kfolddata[,"credit_risk"]=="good",0,1)
tmp<-train_kfolddata[,-21]
data<-cbind(tmp,credit_risk)
#獲取定量指標
quant_vars<-c("duration","amount","installment_rate","present_residence","age",
              "number_credits","people_liable","credit_risk")
quant_GermanCredit<-data[,quant_vars]   #提取定量指標

(1)第一種定量指標的篩選方法:用隨機森林法尋找自變數中對違約狀態影響最顯著的指標,程式碼如下:

#第一種方法:隨機森林法
library(party)
cf1<-cforest(credit_risk~.,data = quant_GermanCredit,
             controls = cforest_unbiased(mtry=2,ntree=50))
varimp(cf1)
#基於變數均值的精度下降,獲取自變數的重要性
#mtry代表在每一棵樹的每個節點處隨機抽取mtry 個特徵,通過計算每個特徵蘊含的資訊量,特徵中選擇一個最具有分類能力的特徵進行節點分裂。
#varimp代表重要性函式。

varimp(cf1,conditional = TRUE)
#經過變數間的相關係數調整後,獲取自變數的重要性

varimpAUC(cf1)
#經過變數間的不平衡性調整後,獲取自變數的重要性

(2)第二種定量指標的篩選方法:計算變數間的相對重要性,並通過相對重要性的排序,獲取自變數中對違約狀態影響最顯著的指標,程式碼如下:

#第二種方法:計算變數間的相對重要性,迴歸法
library(relaimpo)
lmMod<-lm(credit_risk~.,data = quant_GermanCredit)  #線性迴歸
relImportance<-calc.relimp(lmMod,type = "lmg",rela = TRUE)
             #計算自變數間的相對重要性
sort(relImportance$lmg,decreasing = TRUE)
#排序並輸出自變數間的相對重要性

(3)第三種定量指標的篩選方法:通過自變數間的廣義交叉驗證法,獲取自變數中對違約狀態影響最顯著的指標,程式碼如下:

#第三種方法:自變數間的廣義交叉驗證法
library(earth)
marsModel<-earth(credit_risk~.,data = quant_GermanCredit)
ev<-evimp(marsModel)
ev
#經過自變數間的廣義交叉驗證後,獲取自變數的重要性

(4)第四種定量指標的篩選方法:通過自變數的逐步迴歸法,獲取自變數中對違約狀態影響最顯著的指標,程式碼如下:

#第四種方法:自變數的逐步迴歸法
base.mod<-lm(credit_risk~1,data = quant_GermanCredit)
        #獲取線性迴歸模型的截距
all.mod<-lm(credit_risk~.,data = quant_GermanCredit)
        #獲取完整的線性迴歸模型
stepMod<-step(base.mod,scope = list(lower=base.mod,upper=all.mod),
              direction = "both",trace = 0,steps = 1000)
        #採用雙向逐步迴歸法,篩選變數
shortlistedVars<-names(unlist(stepMod[[1]]))
        #獲取逐步迴歸得到的變數列表
shortlistedVars<-shortlistedVars[!shortlistedVars %in%"(Intercept)"]
        #刪除逐步迴歸的截距
print(shortlistedVars)
#輸出逐步迴歸後得到的變數

(5)第五種定量指標的篩選方法:採用“Boruta”法,獲取自變數中對違約狀態影響最顯著的指標,程式碼如下:

#第五種方法:"Boruta"法
library(Boruta)
boruta_output<-Boruta(credit_risk~.,data = na.omit(quant_GermanCredit),
                      doTrace=2)
boruta_signif<-names(boruta_output$finalDecision[
  boruta_output$finalDecision %in%c("Confirmed","Tentative")])
#獲取自變數中確定的和實驗性的指標
print(boruta_signif)
#Levels: Tentative Confirmed Rejected
#Confirmed堅定的;Tentative躊躇的;Rejected拒絕的

plot(boruta_output,cex.axis=.7,las=2,xlab="",main="Variable Importance")
#繪製變數顯著性表示的箱圖

圖3.9 箱圖表示變數重要性(Boruta法)

綜上,我們共計詳細使用了五種定量指標入模的方法,在實際的模型開發過程中,我們可以只選擇其中一種方法,也可以結合多種方法,來篩選出定量資料的入模指標。綜合這五種方法,我們篩選出了對違約狀態影響最顯著的四個入模指標,如表3.11所示。

定性指標篩選見下篇: http://blog.csdn.net/lll1528238733/article/details/76600147