評分卡模型開發--定量指標篩選
阿新 • • 發佈:2019-01-08
轉自: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