信用卡評(píng)分模型.doc_第1頁
信用卡評(píng)分模型.doc_第2頁
信用卡評(píng)分模型.doc_第3頁
信用卡評(píng)分模型.doc_第4頁
信用卡評(píng)分模型.doc_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

信用卡評(píng)分2016年1月10日一、數(shù)據(jù)準(zhǔn)備1、 問題的準(zhǔn)備 目標(biāo):要完成一個(gè)評(píng)分卡,通過預(yù)測(cè)某人在未來兩年內(nèi)將會(huì)經(jīng)歷財(cái)務(wù)危機(jī)的可能性來提高信用評(píng)分的效果,幫助貸款人做出最好的決策。 背景: 銀行在市場(chǎng)經(jīng)濟(jì)中起到至關(guān)重要的作用。他們決定誰在什么條件下可以得到融資,并且可以創(chuàng)造或打破投資決策。而市場(chǎng)、社會(huì),以及個(gè)人和企業(yè)都需要獲得貸款。 信用評(píng)分算法,對(duì)默認(rèn)可能性進(jìn)行猜測(cè),這是銀行用來判斷貸款是否應(yīng)該被授予的方法。 準(zhǔn)備: 首先是基于個(gè)人借貸的場(chǎng)景,確定“違約”的定義: 根據(jù)新的Basel II Capital Accord(巴塞爾二資本協(xié)議),一般逾期90天算作違約。 在判別指標(biāo)上,選擇使用歷史最大違約天數(shù)。 2、數(shù)據(jù)的獲取與整合 數(shù)據(jù)來源:數(shù)據(jù)來自Kaggle,cs-training.csv是有15萬條的樣本數(shù)據(jù),下圖可以看到這份數(shù)據(jù)的大致情況。下載地址為:/c/GiveMeSomeCredit/data 數(shù)據(jù)描述:數(shù)據(jù)屬于個(gè)人消費(fèi)類貸款,只考慮評(píng)分卡最終實(shí)施時(shí)能夠使用到的數(shù)據(jù)應(yīng)從如下一些方面獲取數(shù)據(jù): 基本屬性:包括了借款人當(dāng)時(shí)的年齡。 償債能力:包括了借款人的月收入、負(fù)債比率。 信用往來:兩年內(nèi)35-59天逾期次數(shù)、兩年內(nèi)60-89天逾期次數(shù)、兩年內(nèi)90天或高于90天逾期的次數(shù)。 財(cái)產(chǎn)狀況:包括了開放式信貸和貸款數(shù)量、不動(dòng)產(chǎn)貸款或額度數(shù)量。 貸款屬性:暫無。 其他因素:包括了借款人的家屬數(shù)量(不包括本人在內(nèi))。 原始變量:變量名變量類型變量描述SeriousDlqin2yrsY/N超過90天或更糟的逾期拖欠RevolvingUtilizationOfUnsecuredLinespercentage無擔(dān)保放款的循環(huán)利用:除了不動(dòng)產(chǎn)和像車貸那樣除以信用額度總和的無分期付款債務(wù)的信用卡和個(gè)人信用額度總額ageinteger借款人當(dāng)時(shí)的年齡NumberOfTime30-59DaysPastDueNotWorseinteger35-59天逾期但不糟糕次數(shù)DebtRatiopercentage負(fù)債比率MonthlyIncomereal月收入NumberOfOpenCreditLinesAndLoansinteger開放式信貸和貸款數(shù)量,開放式貸款(分期付款如汽車貸款或抵押貸款)和信貸(如信用卡)的數(shù)量NumberOfTimes90DaysLateinteger90天逾期次數(shù):借款者有90天或更高逾期的次數(shù)NumberRealEstateLoansOrLinesinteger不動(dòng)產(chǎn)貸款或額度數(shù)量:抵押貸款和不動(dòng)產(chǎn)放款包括房屋凈值信貸額度NumberOfTime60-89DaysPastDueNotWorseinteger60-89天逾期但不糟糕次數(shù):借款人在在過去兩年內(nèi)有60-89天逾期還款但不糟糕的次數(shù)NumberOfDependentsinteger家屬數(shù)量:不包括本人在內(nèi)的家屬數(shù)量 時(shí)間窗口:自變量的觀察窗口為過去兩年,因變量表現(xiàn)窗口為未來兩年。二、數(shù)據(jù)處理首先去掉原數(shù)據(jù)中的順序變量,即第一列的id變量。由于要預(yù)測(cè)的是SeriousDlqin2yrs變量,因此將其設(shè)為響應(yīng)變量y,其他分別設(shè)為x1x10變量。1、缺失值分析及處理在得到數(shù)據(jù)集后,我們需要觀察數(shù)據(jù)的分布情況,因?yàn)楹芏嗟哪P蛯?duì)缺失值敏感,因此觀察是否有缺失值是其中很重要的一個(gè)步驟。在正式分析前,我們先通過圖形進(jìn)行對(duì)觀測(cè)字段的缺失情況有一個(gè)直觀的感受。 matrixplot(traindata) md.pattern(traindata)# y x1 x2 x3 x4 x6 x7 x8 x9 x10 x5 # 120269 1 1 1 1 1 1 1 1 1 1 1 0# 25807 1 1 1 1 1 1 1 1 1 1 0 1# 3924 1 1 1 1 1 1 1 1 1 0 0 2# 0 0 0 0 0 0 0 0 0 3924 29731 33655利用matrixplot函數(shù)對(duì)缺失值部分進(jìn)行可視化展示,上圖中淺色表示值小,深色表示值大,而默認(rèn)缺失值為紅色。因此可以看到x5變量和x10變量,即MonthlyIncome變量和NumberOfDependents兩個(gè)變量存在缺失值,具體確實(shí)情況可以見上表,monthlyincome列共有缺失值29731個(gè),numberofdependents有3924個(gè)。對(duì)于缺失值的處理方法非常多,例如基于聚類的方法,基于回歸的方法,基于均值的方法,其中最簡(jiǎn)單的方法是直接移除,但是在本文中因?yàn)槿笔е邓急壤^高,直接移除會(huì)損失大量觀測(cè),因此并不是最合適的方法。在這里,我們使用KNN方法對(duì)缺失值進(jìn)行填補(bǔ)。traindata-knnImputation(traindata,k=10,meth = weighAvg)2、異常值分析及處理關(guān)于異常值的檢測(cè),這里簡(jiǎn)單介紹以下一些檢測(cè)方法: 單變量異常值檢測(cè):在R語言中使用函數(shù)boxplot.stats()可以實(shí)現(xiàn)單變量檢測(cè),該函數(shù)根據(jù)返回的統(tǒng)計(jì)數(shù)據(jù)生成箱線圖。在上述函數(shù)的返回結(jié)果中,有一個(gè)參數(shù)out,它是由異常值組成的列表。更明確的說就是里面列出了箱線圖中箱須線外面的數(shù)據(jù)點(diǎn)。比如我們可以查看月收入分布,第一幅圖為沒有刪除異常值的箱線圖。第二幅箱線圖刪除異常值后,可以發(fā)現(xiàn)月收入主要集中分布在3000-8000之間。但是在這份分析報(bào)告中,因?yàn)槲覀儗?duì)業(yè)務(wù)尚不熟悉,不好將大于8000的數(shù)據(jù)直接歸為異常值,因此對(duì)該變量未做處理。 使用LOF(局部異常因子)檢測(cè)異常值:LOF(局部異常因子)是一種基于密度識(shí)別異常值的算法。算法實(shí)現(xiàn)是:將一個(gè)點(diǎn)的局部密度與分布在它周圍的點(diǎn)的密度相比較,如果前者明顯的比后者小,那么這個(gè)點(diǎn)相對(duì)于周圍的點(diǎn)來說就處于一個(gè)相對(duì)比較稀疏的區(qū)域,這就表明該點(diǎn)事一個(gè)異常值。LOF算法的缺點(diǎn)是它只對(duì)數(shù)值型數(shù)據(jù)有效。包DMwR和包dprep中的lofactor()可以計(jì)算LOF算法中的局部異常因子。 通過聚類檢測(cè)異常值:檢測(cè)異常值的另外一種方式就是聚類。先把數(shù)據(jù)聚成不同的類,選擇不屬于任何類的數(shù)據(jù)作為異常值。例如,基于密度的聚類DBSCAN算法的實(shí)現(xiàn)就是將與數(shù)據(jù)稠密區(qū)域緊密相連的數(shù)據(jù)對(duì)象劃分為一個(gè)類,因此與其他對(duì)象分離的數(shù)據(jù)就會(huì)作為異常值。也可以使用K均值算法實(shí)現(xiàn)異常值的檢測(cè)。首先通過把數(shù)據(jù)劃分為k組,劃分方式是選擇距離各自簇中心最近的點(diǎn)為一組;然后計(jì)算每個(gè)對(duì)象和對(duì)應(yīng)的簇中心的距離(或者相似度),并挑出擁有最大的距離的點(diǎn)作為異常值。首先對(duì)于x2變量,即客戶的年齡,我們可以定量分析,發(fā)現(xiàn)有以下值:unique(traindata$x2)# 1 45 40 38 30 49 74 57 39 27 51 46 76 64 78 53 43 25# 18 32 58 50 69 24 28 62 42 75 26 52 41 81 31 68 70 73# 35 29 55 35 72 60 67 36 56 37 66 83 34 44 48 61 80 47# 52 59 77 63 54 33 79 65 86 92 23 87 71 22 90 97 84 82# 69 91 89 85 88 21 93 96 99 94 95 101 98 103 102 107 105 0# 86 109可以看到年齡中存在0值,顯然是異常值,予以剔除。traindata-traindata-which(traindata$x2=0),而對(duì)于x3,x7,x9三個(gè)變量,由下面的箱線圖可以看出,均存在異常值,且由unique函數(shù)可以得知均存在96、98兩個(gè)異常值,因此予以剔除。同時(shí)會(huì)發(fā)現(xiàn)剔除其中一個(gè)變量的96、98值,其他變量的96、98兩個(gè)值也會(huì)相應(yīng)被剔除# 1 2 0 1 3 4 5 7 10 6 98 12 8 9 96 13 11# 1 0 1 3 2 5 4 98 10 9 6 7 8 15 96 11 13 14 17 12# 1 0 1 2 5 3 98 4 6 7 8 96 11 9其它變量占不作處理。三、變量分析1、單變量分析我們可以簡(jiǎn)單地看下部分變量的分布,比如對(duì)于age變量,如下圖:ggplot(traindata, aes(x = x2, y = .density.) + geom_histogram(fill = blue, colour = grey60, size = 0.2, alpha = 0.2) + geom_density()可以看到年齡變量大致呈正態(tài)分布,符合統(tǒng)計(jì)分析的假設(shè)。再比如月收入變量,也可以做圖觀察觀察,如下:ggplot(traindata, aes(x = x5, y = .density.) + geom_histogram(fill = blue, colour = grey60, size = 0.2, alpha = 0.2) + geom_density() + xlim(1, 20000)月收入也大致呈正態(tài)分布,符合統(tǒng)計(jì)分析的需要。 2、變量之間的相關(guān)性建模之前首先得檢驗(yàn)變量之間的相關(guān)性,如果變量之間相關(guān)性顯著,會(huì)影響模型的預(yù)測(cè)效果。下面通過corrplot函數(shù),畫出各變量之間,包括響應(yīng)變量與自變量的相關(guān)性。cor1-cor(traindata,1:11)corrplot(cor1)corrplot(cor1,method = number)由上圖可以看出,各變量之間的相關(guān)性是非常小的。其實(shí)Logistic回歸同樣需要檢驗(yàn)多重共線性問題,不過此處由于各變量之間的相關(guān)性較小,可以初步判斷不存在多重共線性問題,當(dāng)然我們?cè)诮:筮€可以用VIF(方差膨脹因子)來檢驗(yàn)多重共線性問題。如果存在多重共線性,即有可能存在兩個(gè)變量高度相關(guān),需要降維或剔除處理。四、切分?jǐn)?shù)據(jù)集table(traindata$y)# # 0 1 # 139851 9879由上表看出,對(duì)于響應(yīng)變量SeriousDlqin2yrs,存在明顯的類失衡問題,SeriousDlqin2yrs等于1的觀測(cè)為9879,僅為所有觀測(cè)值的6.6%。因此我們需要對(duì)非平衡數(shù)據(jù)進(jìn)行處理,在這里可以采用SMOTE算法,用R對(duì)稀有事件進(jìn)行超級(jí)采樣。我們利用caret包中的createDataPartition(數(shù)據(jù)分割功能)函數(shù)將數(shù)據(jù)隨機(jī)分成相同的兩份。set.seed(1234) splitIndex-createDataPartition(traindata$y,time=1,p=0.5,list=FALSE) train-traindatasplitIndex, test-traindata-splitIndex,對(duì)于分割后的訓(xùn)練集和測(cè)試集均有74865個(gè)數(shù)據(jù),分類結(jié)果的平衡性如下:prop.table(table(train$y) # # 0 1 # 0.93314633 0.06685367prop.table(table(test$y) # # 0 1 # 0.93489615 0.06510385兩者的分類結(jié)果是平衡的,仍然有6.6%左右的代表,我們?nèi)匀惶幱诹己玫乃?。因此可以采用這份切割的數(shù)據(jù)進(jìn)行建模及預(yù)測(cè)。五、Logistic回歸Logistic回歸在信用評(píng)分卡開發(fā)中起到核心作用。由于其特點(diǎn),以及對(duì)自變量進(jìn)行了證據(jù)權(quán)重轉(zhuǎn)換(WOE),Logistic回歸的結(jié)果可以直接轉(zhuǎn)換為一個(gè)匯總表,即所謂的標(biāo)準(zhǔn)評(píng)分卡格式。2、建立模型首先利用glm函數(shù)對(duì)所有變量進(jìn)行Logistic回歸建模,模型如下fit|z|) # (Intercept) -1.812e+00 6.411e-02 -28.268 2e-16 *# x1 -1.846e-05 8.972e-05 -0.206 0.836948 # x2 -2.861e-02 1.276e-03 -22.428 2e-16 *# x3 5.767e-01 1.564e-02 36.867 2e-16 *# x4 -2.321e-05 1.538e-05 -1.509 0.131224 # x5 -1.355e-05 3.845e-06 -3.524 0.000425 *# x6 -2.769e-03 3.798e-03 -0.729 0.466051 # x7 8.468e-01 2.429e-02 34.855 2e-16 *# x8 8.620e-02 1.599e-02 5.393 6.94e-08 *# x9 8.294e-01 3.338e-02 24.848 2e-16 *# x10 5.126e-02 1.388e-02 3.694 0.000221 *# -# Signif. codes: 0 * 0.001 * 0.01 * 0.05 . 0.1 1# # (Dispersion parameter for binomial family taken to be 1)# # Null deviance: 36747 on 74864 degrees of freedom# Residual deviance: 29793 on 74854 degrees of freedom# AIC: 29815# # Number of Fisher Scoring iterations: 6 可以看出,利用全變量進(jìn)行回歸,模型擬合效果并不是很好,其中x1,x4,x6三個(gè)變量的p值未能通過檢驗(yàn),在此直接剔除這三個(gè)變量,利用剩余的變量對(duì)y進(jìn)行回歸。fit2|z|) # (Intercept) -1.825e+00 6.320e-02 -28.873 2e-16 *# x2 -2.894e-02 1.252e-03 -23.120 2e-16 *# x3 5.742e-01 1.544e-02 37.187 2e-16 *# x5 -1.185e-05 3.513e-06 -3.373 0.000744 *# x7 8.500e-01 2.401e-02 35.397 2e-16 *# x8 7.494e-02 1.420e-02 5.276 1.32e-07 *# x9 8.306e-01 3.338e-02 24.883 2e-16 *# x10 5.169e-02 1.386e-02 3.730 0.000192 *# -# Signif. codes: 0 * 0.001 * 0.01 * 0.05 . 0.1 1# # (Dispersion parameter for binomial family taken to be 1)# # Null deviance: 36747 on 74864 degrees of freedom# Residual deviance: 29797 on 74857 degrees of freedom# AIC: 29813# # Number of Fisher Scoring iterations: 6 第二個(gè)回歸模型所有變量都通過了檢驗(yàn),甚至AIC值(赤池信息準(zhǔn)則)更小,所有模型的擬合效果更好些。 3、模型評(píng)估通常一個(gè)二值分類器可以通過ROC(Receiver Operating Characteristic)曲線和AUC值來評(píng)價(jià)優(yōu)劣。很多二元分類器會(huì)產(chǎn)生一個(gè)概率預(yù)測(cè)值,而非僅僅是0-1預(yù)測(cè)值。我們可以使用某個(gè)臨界點(diǎn)(例如0.5),以劃分哪些預(yù)測(cè)為1,哪些預(yù)測(cè)為0。得到二元預(yù)測(cè)值后,可以構(gòu)建一個(gè)混淆矩陣來評(píng)價(jià)二元分類器的預(yù)測(cè)效果。所有的訓(xùn)練數(shù)據(jù)都會(huì)落入這個(gè)矩陣中,而對(duì)角線上的數(shù)字代表了預(yù)測(cè)正確的數(shù)目,即true positive + true nagetive。同時(shí)可以相應(yīng)算出TPR(真正率或稱為靈敏度)和TNR(真負(fù)率或稱為特異度)。我們主觀上希望這兩個(gè)指標(biāo)越大越好,但可惜二者是一個(gè)此消彼漲的關(guān)系。除了分類器的訓(xùn)練參數(shù),臨界點(diǎn)的選擇,也會(huì)大大的影響TPR和TNR。有時(shí)可以根據(jù)具體問題和需要,來選擇具體的臨界點(diǎn)。如果我們選擇一系列的臨界點(diǎn),就會(huì)得到一系列的TPR和TNR,將這些值對(duì)應(yīng)的點(diǎn)連接起來,就構(gòu)成了ROC曲線。ROC曲線可以幫助我們清楚的了解到這個(gè)分類器的性能表現(xiàn),還能方便比較不同分類器的性能。在繪制ROC曲線的時(shí)候,習(xí)慣上是使用1-TNR作為橫坐標(biāo)即FPR(false positive rate),TPR作為縱坐標(biāo)。這是就形成了ROC曲線。而AUC(Area Under Curve)被定義為ROC曲線下的面積,顯然這個(gè)面積的數(shù)值不會(huì)大于1。又由于ROC曲線一般都處于y=x這條直線的上方,所以AUC的取值范圍在0.5和1之間。使用AUC值作為評(píng)價(jià)標(biāo)準(zhǔn)是因?yàn)楹芏鄷r(shí)候ROC曲線并不能清晰的說明哪個(gè)分類器的效果更好,而作為一個(gè)數(shù)值,對(duì)應(yīng)AUC更大的分類器效果更好。下面首先利用模型對(duì)test數(shù)據(jù)進(jìn)行預(yù)測(cè),生成概率預(yù)測(cè)值pre - predict(fit2,test)在R中,可以利用pROC包,它能方便比較兩個(gè)分類器,還能自動(dòng)標(biāo)注出最優(yōu)的臨界點(diǎn),圖看起來也比較漂亮。在下圖中最優(yōu)點(diǎn)FPR=1-TNR=0.845,TPR=0.638,AUC值為0.8102,說明該模型的預(yù)測(cè)效果還是不錯(cuò)的,正確較高。modelroc - roc(test$y,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)# # Call:# roc.default(response = test$y, predictor = pre)# # Data: pre in 69991 controls (test$y 0) 4874 cases (test$y 1).# Area under the curve: 0.8102六、WOE轉(zhuǎn)換證據(jù)權(quán)重(Weight of Evidence,WOE)轉(zhuǎn)換可以將Logistic回歸模型轉(zhuǎn)變?yōu)闃?biāo)準(zhǔn)評(píng)分卡格式。引入WOE轉(zhuǎn)換的目的并不是為了提高模型質(zhì)量,只是一些變量不應(yīng)該被納入模型,這或者是因?yàn)樗鼈儾荒茉黾幽P椭?,或者是因?yàn)榕c其模型相關(guān)系數(shù)有關(guān)的誤差較大,其實(shí)建立標(biāo)準(zhǔn)信用評(píng)分卡也可以不采用WOE轉(zhuǎn)換。這種情況下,Logistic回歸模型需要處理更大數(shù)量的自變量。盡管這樣會(huì)增加建模程序的復(fù)雜性,但最終得到的評(píng)分卡都是一樣的。用WOE(x)替換變量x。WOE()=ln(違約/總違約)/(正常/總正常)。通過上述的Logistic回歸,剔除x1,x4,x6三個(gè)變量,對(duì)剩下的變量進(jìn)行WOE轉(zhuǎn)換。 1、進(jìn)行分箱age變量(x2): cutx2= c(-Inf,30,35,40,45,50,55,60,65,75,Inf) plot(cut(train$x2,cutx2)NumberOfTime30-59DaysPastDueNotWorse變量(x3): cutx3 = c(-Inf,0,1,3,5,Inf) plot(cut(train$x3,cutx3)MonthlyIncome變量(x5): cutx5 = c(-Inf,1000,2000,3000,4000,5000,6000,7500,9500,12000,Inf) plot(cut(train$x5,cutx5)NumberOfTimes90DaysLate變量(x7): cutx7 = c(-Inf,0,1,3,5,10,Inf) plot(cut(train$x7,cutx7)NumberRealEstateLoansOrLines變量(x8): cutx8= c(-Inf,0,1,2,3,5,Inf) plot(cut(train$x8,cutx8)NumberOfTime60-89DaysPastDueNotWorse變量(x9): cutx9 = c(-Inf,0,1,3,5,Inf) plot(cut(train$x9,cutx9)NumberOfDependents變量(x10): cutx10 = c(-Inf,0,1,2,3,5,Inf) plot(cut(train$x10,cutx10)2、計(jì)算WOE值計(jì)算WOE的函數(shù) totalgood = as.numeric(table(train$y)1 totalbad = as.numeric(table(train$y)2 getWOE - function(a,p,q) Good p & a = q)1 Bad p & a = q)2 WOE - log(Bad/totalbad)/(Good/totalgood),base = exp(1) return(WOE) 比如age變量(x2) Agelessthan30.WOE=getWOE(train$x2,-Inf,30) Age30to35.WOE=getWOE(train$x2,30,35) Age35to40.WOE=getWOE(train$x2,35,40) Age40to45.WOE=getWOE(train$x2,40,45) Age45to50.WOE=getWOE(train$x2,45,50) Age50to55.WOE=getWOE(train$x2,50,55) Age55to60.WOE=getWOE(train$x2,55,60) Age60to65.WOE=getWOE(train$x2,60,65) Age65to75.WOE=getWOE(train$x2,65,75) Agemorethan.WOE=getWOE(train$x2,75,Inf) age.WOE=c(Agelessthan30.WOE,Age30to35.WOE,Age35to40.WOE,Age40to45.WOE,Age45to50.WOE, Age50to55.WOE,Age55to60.WOE,Age60to65.WOE,Age65to75.WOE,Agemorethan.WOE) age.WOE# 1 0.57432879 0.52063157 0.34283924 0.24251193 0.22039521# 6 0.07194294 -0.25643603 -0.55868003 -0.94144504 -1.28914527NumberOfTime30-59DaysPastDueNotWorse變量(x3)# 1 -0.5324915 0.9106018 1.7645290 2.4432903 2.5682332MonthlyIncome變量(x5)# 1 -1.128862326 0.448960482 0.312423080 0.350846777 0.247782295# 6 0.114417168 -0.001808106 -0.237224039 -0.389158800 -0.462438653NumberOfTimes90DaysLate變量(x7)# 1 -0.3694044 1.9400973 2.7294448 3.3090003 3.3852925 2.3483738NumberRealEstateLoansOrLines變量(x8)# 1 0.21490691 -0.24386987 -0.15568385 0.02906876 0.41685234 1.12192809NumberOfTime60-89DaysPastDueNotWorse變量(x9)# 1 -0.2784605 1.8329078 2.7775343 3.5805174 3.4469860NumberOfDependents變量(x10)# 1 -0.15525081 0.08669961 0.19618098 0.33162486 0.40469824 0.764253653、對(duì)變量進(jìn)行WOE變換如age變量(x2)如age變量(x2) tmp.age - 0 for(i in 1:nrow(train) if(train$x2i = 30) tmp.agei - Agelessthan30.WOE else if(train$x2i = 35) tmp.agei - Age30to35.WOE else if(train$x2i = 40) tmp.agei - Age35to40.WOE else if(train$x2i = 45) tmp.agei - Age40to45.WOE else if(train$x2i = 50) tmp.agei - Age45to50.WOE else if(train$x2i = 55) tmp.agei - Age50to55.WOE else if(train$x2i = 60) tmp.agei - Age55to60.WOE else if(train$x2i = 65) tmp.agei - Age60to65.WOE else if(train$x2i = 75) tmp.agei - Age65to75.WOE else tmp.agei - Agemorethan.WOE table(tmp.age)# tmp.age# -1.2891452711972 -0.941445039519045 -0.558680027962495 # 5063 9196 8180 # -0.256436029353835 0.0719429392949312 0.220395209955515 # 8472 9009 9465 # 0.242511934081286 0.342839240194068 0.52063156705216 # 8008 6784 5390 # 0.574328792863984 # 5298 tmp.age1:10# 1 0.34283924 0.57432879 0.34283924 0.57432879 0.07194294 0.22039521# 7 0.07194294 0.24251193 0.34283924 0.52063157 train$x21:10# 1 38 30 39 30 51 46 53 43 39 32NumberOfTime30-59DaysPastDueNotWorse變量(x3)# tmp.NumberOfTime30.59DaysPastDueNotWorse# -0.53249146131578 0.910601840444591 1.76452904024992 2.44329031065646 # 62948 8077 3160 562 # 2.56823323027274 # 118# 1 0.9106018 -0.5324915 -0.5324915 -0.5324915 -0.5324915 -0.5324915# 7 -0.5324915 -0.5324915 -0.5324915 -0.5324915# 1 1 0 0 0 0 0 0 0 0 0MonthIncome變量(x5)# tmp.MonthlyIncome# -1.12886232582259 -0.462438653207328 -0.389158799506996 # 10201 5490 5486 # -0.237224038650003 -0.00180810632297072 0.114417167554772 # 7048 8076 7249 # 0.247782294610166 0.312423079500641 0.350846777249291 # 9147 8118 9680 # 0.448960482499888 # 4370# 1 0.350846777 0.350846777 0.350846777 0.312423080 -0.001808106# 6 -0.462438653 -0.237224039 0.350846777 0.312423080 -0.237224039# 1 3042 3300 3500 2500 6501 12454 8800 3280 2500 7916NumberOfTime90DaysPastDueNotWorse變量(x7)# tmp.NumberOfTimes90DaysLate# -0.369404425455224 1.94009728631401 2.34837375415972 # 70793 2669 7 # 2.72944477623793 3.30900029985393 3.38529247382249 # 1093 222 81# 1 1.9400973 -0.3694044 -0.3694044 -0.3694044 -0.3694044 -0.3694044# 7 -0.3694044 -0.3694044 -0.3694044 -0.3694044# 1 1 0 0 0 0 0 0 0 0 0NumberRealEstateLoansOrLines變量(x8)# tmp.NumberRealEstateLoansOrLines# -0.243869874062293 -0.155683851792327 0.0290687559545721 # 26150 15890 3130 # 0.214906905417014 1.12192809398173 # 27901 1794# 1 0.2149069 0.2149069 0.2149069 0.2149069 -0.1556839 -0.1556839# 7 0.2149069 -0.2438699 0.2149069 0.2149069# 1 0 0 0 0 2 2 0 1 0 0NumberOfTime60.89DaysPastDueNotWorse變量(x9)# tmp.NumberOfTime60.89DaysPastDueNotWorse# -0.278460464730538 1.83290775083723 2.77753428092856 # 71150 2919 708 # 3.44698604282783 3.58051743545235 # 13 75# 1 -0.2784605 -0.2784605 -0.2784605 -0.2784605 -0.2784605 -0.2784605# 7 -0.2784605 -0.2784605 -0.2784605 -0.2784605# 1 0 0 0 0 0 0 0 0 0 0NumberOfDependents變量(x10)# tmp.NumberOfDependents# -0.155250809857344 0.0866996065110081 0.196180980387687 # 43498 14544 10102 # 0.331624863227172 0.404698242905824 0.76425364970991 # 4771 1815 135# 1 -0.1552508 -0.1552508 -0.1552508 -0.1552508 0.1961810 0.1961810# 7 -0.1552508 0.1961810 -0.1552508 -0.1552508# 1 0 0 0 0 2 2 0 2 0 04、WOE DataFrame構(gòu)建: trainWOE =cbind.data.frame(tmp.age,tmp.NumberOfTime30.59DaysPastDueNotWorse,tmp.MonthlyIncome,tmp.NumberOfTime60.89DaysPastDueNotWorse,tmp.NumberOfTimes90DaysLate,tmp.NumberRealEstateLoansOrLines,tmp.NumberOfDependents)七、評(píng)分卡的創(chuàng)建和實(shí)施標(biāo)準(zhǔn)評(píng)分卡采用的格式是評(píng)分卡中的每一個(gè)變量都遵循一系列IF-THEN法則,變量的值決定了該變量所分配的分值,總分就是各變量分值的和。知道線性表達(dá)式的兩個(gè)參數(shù)A,B后就可以求每條記錄(申請(qǐng)人)的分值。為了求得A,B,需要設(shè)定兩個(gè)假設(shè)(分?jǐn)?shù)的給定,很主觀)。以上就是推斷,實(shí)際代碼中,習(xí)慣用了q、p來代表A、B.通俗來說就是,評(píng)分需要自己預(yù)設(shè)一個(gè)閥值,比如:這個(gè)人預(yù)測(cè)出來“不發(fā)生違約”的幾率為0.8,設(shè)定這個(gè)人為500分;另一個(gè)人預(yù)測(cè)出來“不發(fā)生違約”的幾率為0.9,設(shè)定這個(gè)人為600分。閥值的設(shè)定需根據(jù)行業(yè)經(jīng)驗(yàn)不斷跟蹤調(diào)整,下面的分?jǐn)?shù)設(shè)定僅代表個(gè)人經(jīng)驗(yàn)。下面開始設(shè)立評(píng)分,假設(shè)按好壞比15為600分,每高20分好壞比翻一倍算出P,Q。如果后期結(jié)果不明顯,可以高30-50分好壞比才翻一倍。Score = q - p * log(odds)即有方程:620 = q - p * log(15)600 = q - p * log(15/2)邏輯回歸建模:#因?yàn)閿?shù)據(jù)中“1”代表的是違約,直接建模預(yù)測(cè),求的是“發(fā)生違約的概率”,log(odds)即為“壞好比”。為了符合常規(guī)理解,分?jǐn)?shù)越高,信用越好,所有就調(diào)換“0”和“1”,使建模預(yù)測(cè)結(jié)果為“不發(fā)生違約的概率”,最后log(odds)即表示為“好壞比”。trainWOE$y = 1-train$yglm.fit = glm(y.,data = trainWOE,family = binomial(link = logit)summary(glm.fit)coe = (glm.fit$coefficients)p - 20/log(2)q - 600-20*log(15)/log(2)Score=q + p*as.numeric(coe1)+as.numeric(coe2)*tmp.age +as.numeric(coe3)*tmp.NumberOfTime30.59DaysPastDueNotWorse+p*as.numeric(coe4)*tmp.MonthlyIncome+p*as.numeric(coe5)*tmp.NumberOfTime60.89DaysPastDueNotWorse+p*as.numeric(coe6)*tmp.NumberOfTimes90DaysLate+p*as.numeric(coe7)*tmp.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論