R語言:利用邏輯回歸算法預(yù)測個人是否會出現(xiàn)違約行為


本期在R語言中使用邏輯回歸算法建立模型預(yù)測個人是否會出現(xiàn)違約行為霎槐,協(xié)助銀行決策是否給予貸款,以達(dá)到降低銀行貸款壞賬的風(fēng)險

數(shù)據(jù)基本情況

本文中所使用的數(shù)據(jù)來源于kaggle,在網(wǎng)頁上有該數(shù)據(jù)的背景及各個維度的詳細(xì)介紹狰贯,在進(jìn)行建模之前必須詳細(xì)的閱讀劫瞳,盡量獲取更多關(guān)于數(shù)據(jù)的信息呕童。本文數(shù)據(jù)獲取:https://www.kaggle.com/c/GiveMeSomeCredit

下載數(shù)據(jù)后意蛀,我們將數(shù)據(jù)導(dǎo)入耸别,看看數(shù)據(jù)的基本情況

library(data.table)
library(dplyr)
library(VIM)
library(DMwR)
library(caret)
library(pROC)
cs_training <- data.table(read.csv("/R/python/logistic/give me some credit/cs-training.csv"))

該數(shù)據(jù)集一共150000條數(shù)據(jù),包含12列县钥,所有的變量都是數(shù)值型的秀姐,明顯的MonthlyIncomeNumberOfDependents存在na值.在后面數(shù)據(jù)處理時,需要重點關(guān)注na值的處理若贮。

接下來在看各變量數(shù)據(jù)大致的分布情況省有,變量X是行序號,對建模無意義谴麦,需要刪除蠢沿;age 是年齡,其最小值是0匾效,這是明顯的異常值舷蟀;除ageSeriousDlqin2yrs外,其他各變量均存在距離四分之三分位數(shù)很遠(yuǎn)的值面哼,由于對各變量的實際情況了解不足野宜,無法確定是否為異常值,暫不處理魔策;另外匈子,存在na值的變量僅有MonthlyIncomeNumberOfDependents,在進(jìn)行na值處理時只需關(guān)注這兩個變量代乃;SeriousDlqin2yrs 為目標(biāo)變量,0 仿粹、1 各為139974條 搁吓、10026條,占比分別為93.32%吭历、6.68%堕仔。

數(shù)據(jù)處理

在進(jìn)行數(shù)據(jù)處理前,我們先將各列的列名重新命名,然后逐一進(jìn)行處理晌区。

names(cs_training) <- c("x","x0","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10")
#刪除X1(x),其為行號
cs_training[,x := NULL]
#將目標(biāo)變量轉(zhuǎn)為因子
cs_training[,x0 := as.factor(x0)]
#刪除age(x2) 為0 的行摩骨。僅有一行數(shù)據(jù)存在age = 0 ,所以直接刪除
cs_training <- cs_training[x2 != 0,]

在進(jìn)行缺失值處理前通贞,再次詳細(xì)查看一下缺失值的基本情況:NumberOfDependents存在3924個na值,Monthly income 有29731個空值恼五,另外昌罩,我們可以看見NumberOfDependents為na的行,Monthly income的值也均為na.

#缺失值
aggr(cs_training,plot = FALSE)  
# 結(jié)果:Monthly income(x5)29731;NumberOfDependents(x10)  3924
aggr(cs_training,prop=TRUE,numbers=TRUE) 
#各變量的占比均比較低
marginplot(cs_training[,c("x5","x10")],pch=c(20),col=c("darkgray","red","blue"))

利用DMwR包中的knnImputation函數(shù)進(jìn)行K近鄰填補(bǔ)灾馒。

cs_training_final <- knnImputation(cs_training,k = 10,meth = "weighAvg")

處理完缺失值后茎用,我們來看一下各個變量的相關(guān)性,如存在相關(guān)系數(shù)過大的變量睬罗,則要進(jìn)行相應(yīng)的處理轨功。明顯的可以看見x3(NumberOfTime30-59DaysPastDueNotWorse)x7(NumberOfTimes90DaysLate) 容达、x9(NumberOfTime60-89DaysPastDueNotWorse)的兩兩相關(guān)系數(shù)超過來0.9古涧,存在明顯的相關(guān)性,此時應(yīng)該是考慮刪除其中的某兩個變量花盐,但是我們考慮到這三個變量的分布情況羡滑,它們的最大值均是98,且與四分之三分位數(shù)距離很遠(yuǎn)卒暂,可能是這些過大的值導(dǎo)致相關(guān)性比較大啄栓,我們嘗試刪除這些異常值后看看情況。刪除處理后也祠,再次計算相關(guān)系數(shù)昙楚,此時不存在明顯的相關(guān)性的變量

#識別相關(guān)的特征變量
cor_coefficient <- cor(cs_training_final[,-1])
cor_index <- findCorrelation(cor_coefficient,cutoff = 0.7)
#刪除x3(NumberOfTime30-59DaysPastDueNotWorse)、x7(NumberOfTimes90DaysLate)`诈嘿、x9(NumberOfTime60-89DaysPastDueNotWorse)的異常值
#可以發(fā)現(xiàn)堪旧,刪除x7小于90的行后,其他兩個變量的相應(yīng)的也不存在>90的行了
cs_training_final <- filter(cs_training_final,x7 < 90)
#再次計算相關(guān)系數(shù)奖亚。無相關(guān)變量
cor_coefficient <- cor(cs_training_final[,-1])
cor_index <- findCorrelation(cor_coefficient,cutoff = 0.7)

刪除前

刪除后

模型訓(xùn)練與評估

#拆分訓(xùn)練集和測試集(訓(xùn)練集占比75%淳梦,測試集的占比25%)
cs_training_final_rand <- cs_training_final[order(runif(149730)),]
 train_data <- cs_training_final_rand[1:112297,]
test_data <- cs_training_final_rand[112298:149730,]
#處理不均衡問題(目標(biāo)變量中分類為1的占比僅僅為6.68%,存在數(shù)據(jù)不均衡的問題)
train_data_smote<- SMOTE(x0~.,train_data,perc.over = 800,perc.under = 100)
#gml
glm_credit <- glm(x0~.,family = binomial(link='logit'),data = train_data_smote)
pre <- predict(glm_credit,test_data,type='response')
#模型評估昔字,畫出ROC曲線
modelroc <- roc(test_data$x0,pre)
plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),   grid.col=c("green", "red"), max.auc.polygon=TRUE,  auc.polygon.col="skyblue", print.thres=TRUE)

在ROC曲線圖里爆袍,計算了AUC值,其為0.81作郭,模型最終效果還算不錯陨囊。

以上是在R語言中使用邏輯回歸算法的全過程。如有做的不好或這不對的地方還請大家指正夹攒!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜘醋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子咏尝,更是在濱河造成了極大的恐慌压语,老刑警劉巖啸罢,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胎食,居然都是意外死亡扰才,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門斥季,熙熙樓的掌柜王于貴愁眉苦臉地迎上來训桶,“玉大人,你說我怎么就攤上這事酣倾《娼遥” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵躁锡,是天一觀的道長午绳。 經(jīng)常有香客問我,道長映之,這世上最難降的妖魔是什么拦焚? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮杠输,結(jié)果婚禮上赎败,老公的妹妹穿的比我還像新娘。我一直安慰自己蠢甲,他們只是感情好僵刮,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鹦牛,像睡著了一般搞糕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上曼追,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天窍仰,我揣著相機(jī)與錄音,去河邊找鬼礼殊。 笑死驹吮,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晶伦。 我是一名探鬼主播碟狞,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坝辫!你這毒婦竟也來了篷就?” 一聲冷哼從身側(cè)響起射亏,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤近忙,失蹤者是張志新(化名)和其女友劉穎竭业,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體及舍,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡未辆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锯玛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咐柜。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖攘残,靈堂內(nèi)的尸體忽然破棺而出拙友,到底是詐尸還是另有隱情,我是刑警寧澤歼郭,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布遗契,位于F島的核電站,受9級特大地震影響病曾,放射性物質(zhì)發(fā)生泄漏牍蜂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一泰涂、第九天 我趴在偏房一處隱蔽的房頂上張望鲫竞。 院中可真熱鬧,春花似錦逼蒙、人聲如沸从绘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顶考。三九已至,卻和暖如春妖泄,著一層夾襖步出監(jiān)牢的瞬間驹沿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工蹈胡, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留渊季,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓罚渐,卻偏偏與公主長得像却汉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荷并,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容