當前位置:
首頁 > 最新 > 從大數據角度看你的信用借貸

從大數據角度看你的信用借貸

作者簡介Introduction

貸款消費、投資理財已經是當今司空見慣的事情了。針對與商業銀行,放貸款已經是其運作中不可或缺的一部分了。但是為了減少信貸危機,並且減少不必要的人力物力,大都採用了一套決策系統。今天呢,我們就一起利用貸款數據去簡單地建立一個決策模型。

本文主要涉及到四部分

·讀取數據+簡單探索

·數據預處理

·描述性分析

·分層抽樣

·平衡數據

·建模決策

老樣子,先導入後續分析所需要的程序包:


library(Rmisc)

library(caret)

library(VIM)

library(DMwR)

LoanData

head(LoanData)

str(LoanData)

table(LoanData$Loan_Status)

首先head函數返回了數據集的前六行,我們就可以對數據集的整體有一個簡單的概念。然後使用str函數返回數據集的簡單結構,很容易發現此數據集是數據框類型,包括614行,13列,並且還可以知道各個變數都是什麼類型的。table函數返回了兩個類別:Y=422,N=192,數據類別有些不平衡。最後就是Loan_ID列是沒有用的變數,需要剔除。

細心的觀察以上幾個因子型的自變數,就會發現有些異常:Gender有三個因子水平、Married有三個因子水平……同時還有缺失值的存在。


LoanData

LoanData$Loan_Amount_Term

LoanData$Credit_History

aggr(LoanData, plot = F)

table(LoanData$Loan_Amount_Term)

table(LoanData$Credit_History)

factor_vars

factor_tabs

factor_tabs

使用aggr函數返回數據集中各個變數的缺失情況,發現LoanAmount缺失22個,Loan_Amount_Term缺失14個,Credit_History缺失50個。

上圖是提取了所有的因子型變數,然後統計各個因子水平的個數,為了探索各個因子型變數的內容,順便可以找到對應的最多的因子水平去填充上方的缺失值。

通過對其的探索,發現有一部分變數還有空("")的因子水平,我們均使用最多的因子水平去填補。

LoanData

Loan_Amount_Term[is.na(Loan_Amount_Term) == T]

Credit_History[is.na(Credit_History) == T]

Gender[Gender == ""]

Married[Married == ""]

Dependents[Dependents == ""]

Self_Employed[Self_Employed == ""]

})

LoanData

使用within函數對數據進行重塑,方便快速地填充缺失值和空的因子水平。然後LoanAmount變數並沒有進行缺失值的填補,因為其缺失數量也不多,其次其不如因子型變數填補方便,再此我就發懶直接剔除了。


gp_stack

lapply(factor_vars[1:8], function(x) {

ggplot(LoanData, aes(x = eval(parse(text = x)), fill = Loan_Status)) +

geom_bar() +

xlab(x) +

theme_bw() +

ggtitle(paste(x, "Barplot Stack", sep= " ")) +

theme(plot.title = element_text(hjust = 0.5)) +

guides(fill = "none")

})

gp_fill

lapply(factor_vars[1:8], function(x) {

ggplot(LoanData, aes(x = eval(parse(text = x)), fill = Loan_Status)) +

geom_bar(position = "fill") +

xlab(x) +

theme_bw() +

ggtitle(paste(x, "Barplot Fill", sep= " ")) +

theme(plot.title = element_text(hjust = 0.5))

})

multiplot(plotlist = c(gp_stack[1:4], gp_fill[1:4]), cols = 2)

multiplot(plotlist = c(gp_stack[5:8], gp_fill[5:8]), cols = 2)

通過繪製8個因子型變數與因變數的條形圖,發現除了Credit_History變數有比較明顯的區分性(也可能受到了樣本量不足的影響),其他均不明顯。


set.seed(1)

idx

TrainData

TestData


ctrl

set.seed(1)

model_rf

y = TrainData[, 12],

method = "rf",

trControl = ctrl)

pred_rf

confusionMatrix(pred_rf, TestData[, 12])

使用訓練集建立隨機森林模型,然後建立混淆矩陣發現整體精度為83.05%,看起來還挺高,但是這是由於數據不平衡導致的,整體的精度不適合評估此模型。並且模型的Kappa值也只有0.5265,Sensitivity才0.4444,都說明此時的模型不可取。下面進行平衡數據,然後在使用隨機森林模型嘗試對比一下:


set.seed(3)

LoanData2

data = LoanData,

perc.over = 200,

perc.under = 150)

numeric_vars

LoanData2[numeric_vars]

table(LoanData2$Loan_Status)

平衡後的數據類別之比為1:1,均為543個樣本。


set.seed(1)

idx

TrainData

TestData


set.seed(1)

model_rf

y = TrainData[, 12],

method = "rf",

trControl = ctrl2)

pred_rf

confusionMatrix(pred_rf, TestData[, 12])

平衡數據之後,模型Sensitivity將近80%,Kappa值達到了0.6481,都比之前有了一定的提升。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 R語言中文社區 的精彩文章:

2018年1月R新包推薦
用circlize包繪製circos-plot

TAG:R語言中文社區 |