一栽连、關(guān)于互聯(lián)網(wǎng)金融授信產(chǎn)品的風(fēng)控建模
如何利用機(jī)器學(xué)習(xí)以及大數(shù)據(jù)技術(shù)來降低風(fēng)險(xiǎn)呢?如何建立信用評(píng)分的模型呢?
本文將針對(duì)這些問題簡單介紹互金行業(yè)中授信產(chǎn)品的風(fēng)控建模過程缓熟,內(nèi)容主要如下:
·信用風(fēng)險(xiǎn)定義
·信用風(fēng)險(xiǎn)評(píng)分卡類型
·信用評(píng)分模型建立的基本流程
1.信用風(fēng)險(xiǎn)定義
①風(fēng)險(xiǎn)管理的概念
風(fēng)險(xiǎn)管理最早起源于美國梢卸。1930年由美國管理協(xié)會(huì)保險(xiǎn)部最先倡導(dǎo)風(fēng)險(xiǎn)管理走诞,后面在全球流行開來,隨著互聯(lián)網(wǎng)的迅猛發(fā)展蛤高,大數(shù)據(jù)蚣旱、數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)等新興技術(shù)開始出現(xiàn),讓風(fēng)險(xiǎn)管理更為精準(zhǔn)戴陡。
他們通過收集銀行系統(tǒng)本身的征信數(shù)據(jù)以及用戶在互聯(lián)網(wǎng)上的的各種數(shù)據(jù)塞绿,包括人際關(guān)系、歷史消費(fèi)行為恤批、身份特征等异吻,通過大數(shù)據(jù)“畫像”技術(shù),對(duì)用戶進(jìn)行全面的定位喜庞,由此來預(yù)測(cè)用戶的履約能力诀浪、降低信貸風(fēng)險(xiǎn)。
②什么是信用風(fēng)險(xiǎn)延都?
信用風(fēng)險(xiǎn)又稱違約風(fēng)險(xiǎn)雷猪,是指借款人、證券發(fā)行人或交易對(duì)方因種種原因窄潭,不愿或無力履行合同條件而構(gòu)成違約春宣,致使銀行、投資者或交易對(duì)方遭受損失的可能性嫉你。即受信人不能履行還本付息的責(zé)任而使授信人的預(yù)期收益與實(shí)際收益發(fā)生偏離的可能性月帝,它是金融風(fēng)險(xiǎn)的主要類型。
萬事都有風(fēng)險(xiǎn)幽污,但對(duì)于金融行業(yè)來講嚷辅,風(fēng)險(xiǎn)控制尤為重要。對(duì)于海量的用戶數(shù)據(jù)處理距误,傳統(tǒng)的人工授信方式顯然是很乏力的簸搞,因此現(xiàn)在大多互聯(lián)網(wǎng)金融P2P公司都采用機(jī)器學(xué)習(xí)、大數(shù)據(jù)等技術(shù)對(duì)風(fēng)險(xiǎn)進(jìn)行自動(dòng)化評(píng)估准潭,來最大程度的降低風(fēng)險(xiǎn)趁俊。當(dāng)然,這些技術(shù)的應(yīng)用并不能百分百的保證零風(fēng)險(xiǎn)刑然,因?yàn)橛泻芏嗳藶橐蛩厥遣豢煽氐乃吕蓿切庞蔑L(fēng)控技術(shù)在很大程度上幫助金融企業(yè)進(jìn)行了很好的風(fēng)險(xiǎn)管控,通過降低風(fēng)險(xiǎn)減少損失來間接增加利潤。
2.信用風(fēng)險(xiǎn)評(píng)分卡類型
①信用評(píng)級(jí)
用過信用卡的朋友都知道怔软,開卡需要申請(qǐng)(篩選好壞用戶)垦细,消費(fèi)了就需要定期進(jìn)行債務(wù)償還,如果不償還就有人發(fā)短信催你挡逼。因此括改,信用評(píng)級(jí)可根據(jù)用戶的整個(gè)使用周期分為以下四種類型:
1)申請(qǐng)者評(píng)級(jí)(Application):個(gè)人客戶申請(qǐng)相應(yīng)金融產(chǎn)品,對(duì)用戶進(jìn)行篩選分類,判斷時(shí)好時(shí)壞,是否通過申請(qǐng)(A卡)
2)行為評(píng)級(jí)(Behavier):個(gè)人客戶通過申請(qǐng)后在使用期間的歷史行為數(shù)據(jù)進(jìn)行評(píng)級(jí),對(duì)客戶可能出現(xiàn)的逾期、延期等行為進(jìn)行預(yù)測(cè)(B卡)
3)催收評(píng)級(jí)(Collection):對(duì)業(yè)務(wù)中存量客戶是否需要催收的預(yù)測(cè)(C卡)
4)欺詐評(píng)級(jí)(Fraud):業(yè)務(wù)中新客戶可能存在的欺詐行為的預(yù)測(cè)(F卡)
每個(gè)評(píng)級(jí)階段的模型都是不一樣的踢京,因?yàn)槊總€(gè)階段的用戶顯現(xiàn)的特征都不一樣,因此需要針對(duì)各個(gè)階段進(jìn)行單獨(dú)的模型開發(fā)骏融。
②信用評(píng)分卡
盡管有了評(píng)級(jí)分類箭跳,但是信用對(duì)于我們來說仍然是一個(gè)比較抽象的概念,因此可以通過量化的方式來更直觀的使用信用兜叨,而分?jǐn)?shù)是一種不錯(cuò)的量化方式穿扳,通過分?jǐn)?shù)的高低來衡量風(fēng)險(xiǎn)概率,分?jǐn)?shù)越高代表信用越好国旷。信用評(píng)分卡就是通過大數(shù)據(jù)的統(tǒng)計(jì)分析矛物,根據(jù)用戶的各種資料信息,對(duì)用戶信用進(jìn)行評(píng)估(打分)跪但。根據(jù)以上信用評(píng)級(jí)履羞,相應(yīng)的可以分為四種評(píng)分卡:
1)申請(qǐng)?jiān)u分卡(A卡)
2)行為評(píng)分卡(B卡)
3)催收評(píng)分卡(C卡)
4)欺詐評(píng)分卡(F卡)
是一種以分?jǐn)?shù)的形式來衡量風(fēng)險(xiǎn)幾率的一種手段,也是對(duì)未來一段時(shí)間內(nèi)違約屡久、逾期忆首、失聯(lián)概率的預(yù)測(cè)。一般來說被环,分?jǐn)?shù)越高糙及,風(fēng)險(xiǎn)越小。
A卡一般可做貸款0-1年的信用分析筛欢,B卡則是在申請(qǐng)人有了一定行為后浸锨,有了較大數(shù)據(jù)進(jìn)行的分析,一般為3-5年版姑,C卡則對(duì)數(shù)據(jù)要求更大柱搜,需加入催收后客戶反應(yīng)等屬性數(shù)據(jù)。每種評(píng)分卡的模型會(huì)不一樣剥险。在A卡中常用的有邏輯回歸聪蘸,AHP等,而在后面兩種卡中,常使用多因素邏輯回歸宇姚,精度等方面更好匈庭。 基于個(gè)人借貸的場景,確定“違約”的定義: 根據(jù)新的Basel II Capital Accord(巴塞爾二資本協(xié)議)浑劳,一般逾期90天算作違約
3. 信用評(píng)分建模的基本流程
通過對(duì)消費(fèi)者的人口特征阱持、信用歷史記錄、交易記錄等大量數(shù)據(jù)進(jìn)行系統(tǒng)的分析魔熏、挖掘數(shù)據(jù)蘊(yùn)含的行為模式衷咽、信用特征,發(fā)展出預(yù)測(cè)行的模式蒜绽,結(jié)合信用卡評(píng)分的構(gòu)建原理镶骗,完成數(shù)據(jù)的清洗,主要包括缺失數(shù)據(jù)的填充躲雅、異常的刪除和數(shù)據(jù)的分箱鼎姊;調(diào)用Logistic回歸模型建立信用卡評(píng)分的基礎(chǔ)模型,借助自變量的證據(jù)權(quán)重轉(zhuǎn)換(WOE)創(chuàng)建信用卡評(píng)分卡相赁,并開發(fā)一個(gè)簡單的信用評(píng)分系統(tǒng)相寇。
在開發(fā)信用風(fēng)險(xiǎn)模型之前,首先要明確我們需要解決的問題钮科,確定評(píng)分卡模型的類別唤衫。下面將對(duì)申請(qǐng)?jiān)u分卡建模(主要目的是區(qū)分好壞客戶)流程進(jìn)行簡單的介紹。
①數(shù)據(jù)獲取
除了企業(yè)內(nèi)部自有的數(shù)據(jù)外绵脯,還有第三方機(jī)構(gòu)數(shù)據(jù)支持佳励,比如芝麻信用,征信局等蛆挫。通過大數(shù)據(jù)分析用戶的各種數(shù)據(jù)來達(dá)到最終目的赃承,數(shù)據(jù)維度很廣,可以包括:用戶基礎(chǔ)屬性璃吧,用戶行為楣导,用戶網(wǎng)購,用戶APP行為等畜挨。在數(shù)據(jù)質(zhì)量不差的情況下筒繁,數(shù)量越多越好,能留的一個(gè)不落下巴元,后續(xù)再進(jìn)行甄別篩選毡咏。
這部分的技術(shù)棧主要有:Mysql,Hive逮刨,Hbase呕缭,Spark堵泽,Python等。
②EDA數(shù)據(jù)探索
數(shù)據(jù)探索也是很重要的一步恢总,主要考察數(shù)據(jù)的質(zhì)量迎罗,包括:數(shù)據(jù)缺失值,數(shù)據(jù)異常值片仿,數(shù)據(jù)一致性纹安,數(shù)據(jù)分布特征,以及數(shù)據(jù)之間的關(guān)聯(lián)性等砂豌。通诚崞瘢可以使用描述性統(tǒng)計(jì)指標(biāo),如均值阳距,中位數(shù)塔粒,眾數(shù),方差/標(biāo)準(zhǔn)差等進(jìn)行宏觀上的度量筐摘,也可以使用可視化方法輔助進(jìn)行數(shù)據(jù)分布卒茬,以及關(guān)聯(lián)性等的初步分析工作。
1)缺失值處理
根據(jù)缺失情況(是否隨機(jī)蓄拣,以及缺失量等)可選擇使用均值扬虚,眾數(shù),中位數(shù)等填充球恤,也可以用機(jī)器學(xué)習(xí)模型來填充缺失值(常見算法有隨機(jī)森林,決策樹荸镊,kNN等)咽斧。
2)異常值處理
可根據(jù)異常的情況考慮使用3?原則,箱線圖躬存,散點(diǎn)圖张惹,基于距離,基于密度岭洲,基于聚類等一系列的方法進(jìn)行離群點(diǎn)檢測(cè)宛逗。對(duì)于異常值的處理可以采用移除,平均值修正盾剩,視為缺失值雷激,或者不處理等。
3)數(shù)據(jù)分布以及關(guān)聯(lián)性
可以考慮結(jié)合可視化的方法進(jìn)一步的觀察:數(shù)據(jù)分布是否均衡告私,數(shù)據(jù)特征之間的聯(lián)系屎暇,以及數(shù)據(jù)特征與目標(biāo)變量之間的聯(lián)系等進(jìn)行了解
③數(shù)據(jù)預(yù)處理
數(shù)據(jù)預(yù)處理主要包括特征轉(zhuǎn)換,特征編碼驻粟,特征選擇根悼,特征共線性處理,以及創(chuàng)建衍生變量等一系列的處理方法。
1)特征轉(zhuǎn)換和編碼
在信用評(píng)分模型的變量選擇中挤巡,如果使用邏輯回歸模型剩彬,那么就需對(duì)所有特征進(jìn)行分箱離散化(一般是先細(xì)分再粗分),這樣可以增加模型對(duì)非線性的表達(dá)矿卑,讓模型更穩(wěn)定襟衰。然后再進(jìn)行woe編碼,因?yàn)閣oe的轉(zhuǎn)換公式與邏輯回歸模型上非常相似粪摘,便于生成評(píng)分系統(tǒng)瀑晒。
2)特征選擇
特征選擇,在數(shù)據(jù)中是非常中重要徘意,目的在于幫助我們挑選出最有意義的特征苔悦。選擇特征最終目的是挑選能區(qū)分好用戶或壞用戶的強(qiáng)相關(guān)特征。
根據(jù)所使用的模型可以通過基尼系數(shù)或信息價(jià)值IV找到顯著特征項(xiàng)椎咧,也可以通過LASSO玖详、LR、RF模型等對(duì)特征做重要性的篩選勤讽。當(dāng)然蟋座,還有很多其它的方法,這里僅介紹這幾種脚牍。
a)IV:基于woe編碼向臀,可以衡量特征信息重要程序;
b)LASSO:主要適合基于L1的正則懲罰過濾對(duì)區(qū)分好壞用戶不重要的特征诸狭;
c)LR:通過擬合的參數(shù)排序得到特征的重要性程度券膀;
d)RF:集成學(xué)習(xí)(bagging),依據(jù)算法的附加功能進(jìn)行特征的重要性排序驯遇;
最后要說的是芹彬,特征選擇要結(jié)合業(yè)務(wù),根據(jù)業(yè)務(wù)的理解挑選解釋型強(qiáng)且權(quán)重較大的特征變量叉庐。
④模型建立
模型建立會(huì)根據(jù)實(shí)際情況進(jìn)行選擇舒帮,比如是否要使用單模型,或者在單模型中各種模型好壞的比較而最終確認(rèn)陡叠。
在信用評(píng)分卡建模中玩郊,用到最常用的方法就是邏輯回歸(LR)。雖然是傳統(tǒng)的模型匾竿,但是由于其自身特點(diǎn)瓦宜,加上自變量進(jìn)行了證據(jù)權(quán)重轉(zhuǎn)換(WOE),Logistic回歸的結(jié)果可以直接轉(zhuǎn)換為一個(gè)匯總表岭妖,即所謂的標(biāo)準(zhǔn)評(píng)分卡格式临庇,這對(duì)于區(qū)分好壞用戶以及評(píng)分卡的建立非常適用反璃。目前對(duì)于它的使用和部署上線等已經(jīng)非常成熟,是很多企業(yè)的不二選擇假夺。
除了LR外淮蜈,神經(jīng)網(wǎng)絡(luò),Xgboost等高級(jí)模型也會(huì)被使用已卷,不過綜合考慮LR目前能夠滿足大部分的需求且部署上線容易梧田。
⑤模型評(píng)估(對(duì)于離散型因變量)
針對(duì)信用評(píng)分卡應(yīng)用的評(píng)估模型有很多,包括:ROC/AUC侧蘸,KS裁眯,PSI,LIFT等一些評(píng)估方法讳癌,下面著重介紹兩個(gè)ROC和KS值穿稳。
1)混淆矩陣
以腫瘤為例,對(duì)于實(shí)際的數(shù)據(jù)集存在兩種分類晌坤,即良性和惡性逢艘,基于Logistic回歸模型會(huì)預(yù)測(cè)出樣本所屬的類別,得到兩列數(shù)據(jù):真實(shí)地骤菠;預(yù)測(cè)的它改,將兩個(gè)序列得到一個(gè)匯總的列聯(lián)表,即混淆矩陣商乎。
0表示良性(負(fù)例)央拖,1表示惡性(正例,一般被理解為研究者所感興趣或者關(guān)心的那個(gè)分類)截亦,
A:表示正確預(yù)測(cè)負(fù)例的樣本個(gè)數(shù)爬泥,TN
A+B:表示預(yù)測(cè)負(fù)例的樣本個(gè)數(shù),PN
準(zhǔn)確率:(A+D)/(A+B+C+D)崩瓤,用來衡量模型對(duì)整體數(shù)據(jù)的預(yù)測(cè)效果,用Accuracy表示
正例覆蓋率:D/(B+D)踩官,反映模型能夠在多大程度上覆蓋所關(guān)心的類別却桶,即TPR=TP/P,稱為靈敏度(sensitivity)/召回率(recall)
負(fù)例覆蓋率:A/(A+C)蔗牡,即TNR=TN/N稱為特指度(specicity)
正例命中率:D/(C+D)颖系,即(TP+TN)/T ,表示分類器預(yù)測(cè)正確的比例稱正確率(accuracy)
一般準(zhǔn)確率辩越、正例覆蓋率嘁扼、負(fù)例覆蓋率越高,模型越理想
還有黔攒,F(xiàn)PR=FP/P稱誤警率(Fallout),FNR=FP/N稱為漏查率(miss).
分類器預(yù)測(cè)錯(cuò)誤的比例稱錯(cuò)誤率(error rate):(FP+FN)/T
又可以定義下面兩個(gè)比率: TPR又可稱為查全率趁啸,表示正確分類的正例占實(shí)際正例(TP/(TP+FN))的比例强缘,用于衡量分類器預(yù)測(cè)正例的可信程度。 相對(duì)應(yīng)的概念有查準(zhǔn)率(precision)不傅,表示正確分類的正例占全部預(yù)測(cè)正例的比例(TP/(TP+FP))旅掂。
2)ROC/AUC
通常一個(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ù)例覆蓋率或稱為真負(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更大的分類器效果更好峰髓。
ROC基于混淆矩陣傻寂,對(duì)于數(shù)據(jù)類別不均衡有很好的效果。ROC曲線使用兩個(gè)指標(biāo)值進(jìn)行繪制儿普,其中x軸為1-Specificity崎逃,即負(fù)例錯(cuò)判率;y軸為Sensitivity眉孩,即正例覆蓋率个绍。ROC值一般在0.5-1.0之間。值越大表示模型判斷準(zhǔn)確性越高(曲線越偏左上方越好)浪汪,即越接近1越好巴柿。ROC=0.5表示模型的預(yù)測(cè)能力與隨機(jī)結(jié)果沒有差別,AUC代表曲線下的面積死遭,不依賴于閾值广恢,AUC值越高,模型的風(fēng)險(xiǎn)區(qū)分能力越強(qiáng)呀潭。通常AUC在0.8以上時(shí)钉迷,模型基本可以接受了。
提升度和提升曲線
分類器分類為正例的比例稱為深度(depth):(TP+FP)/T钠署,T是全部待判樣本數(shù)量糠聪。
提升度(lift)等于TPR/depth 以深度為橫軸,以提升度為縱軸繪制曲線谐鼎,得到提升曲線舰蟆。 繪制提升曲線的思路和ROC類似。當(dāng)閾值為0的時(shí)候狸棍,所有的樣本都會(huì)判為正例身害,此時(shí)深度為1,提升為1草戈;隨閾值增大塌鸯,深度減小,提升隨之逐漸增大唐片。一個(gè)好的模型要在大的深度下得到盡量大的提升界赔。
3)KS值
KS值表示了模型正負(fù)區(qū)分開來的能力。值越大牵触,模型的預(yù)測(cè)準(zhǔn)確性越好。一般咐低,KS>0.4即可認(rèn)為模型有比較好的預(yù)測(cè)準(zhǔn)確性揽思,KS值只能反映出哪個(gè)分段是區(qū)分最大的,而不能總體反映出所有分段的效果见擦。
具體步驟為:
按照模型計(jì)算score值钉汗,從大到小排序羹令;
取出10%,20%损痰,..福侈,90%所對(duì)應(yīng)的分位數(shù),并以此作為score的閾值卢未,計(jì)算Sensitivity和1-Specificity的值肪凛,將10%、20%辽社、..伟墙、90%這樣的分位點(diǎn)用作繪圖的x軸,將Sensitivity和1-Specifity兩個(gè)指標(biāo)值用作繪圖的y軸滴铅,進(jìn)而得到兩條曲線戳葵;
分別代表各分位點(diǎn)下的正例覆蓋率和1-負(fù)例覆蓋率,一般選用最大的KS值作為衡量指標(biāo)汉匙;
KS=Sensitivity-(1-Specificity)拱烁,通常KS>0.4即可認(rèn)為模型有比較好的預(yù)測(cè)準(zhǔn)確性
下面是一個(gè)真實(shí)的在線授信產(chǎn)品的風(fēng)控建模的流程圖,可參考進(jìn)行理解:
二噩翠、數(shù)據(jù)獲取
1.數(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))。
2.數(shù)據(jù)導(dǎo)入以及給列重命名
rm(list = ls())
setwd('F:\\kaggle\\評(píng)分卡模型')
getwd()
data<-read.csv('cs-training.csv',header = T,stringsAsFactors = F)
str(data)
colnames(data)<-c("id","y","x0","x1","x2","x3","x4","x5","x6","x7","x8","x9")
attach(data)
summary(data)
通過summary了解數(shù)據(jù)的整體情況徘铝,可以看到x4和x9變量有缺失值耳胎,即MonthlyIncome變量和NumberOfDependents兩個(gè)變量存在缺失值,monthlyincome列共有缺失值29731個(gè)惕它,numberofdependents有3924個(gè)怕午。
三、數(shù)據(jù)預(yù)處理
1.缺失值分析及處理
在正式分析前淹魄,我們先通過圖形進(jìn)行對(duì)觀測(cè)字段的缺失情況有一個(gè)直觀的感受郁惜。
library(mice)
md.pattern(data)
同樣得出monthlyincome(X4)列共有缺失值29731個(gè),numberofdependents(X9)有3924個(gè)甲锡。由于MonthlyIncome(X4)缺失值達(dá)到29731條數(shù)據(jù)兆蕉,比例較大羽戒,因此不能直接將缺失值刪除,選擇隨機(jī)森林法虎韵。而NumberOfDependents(X9)的缺失較少易稠,對(duì)數(shù)據(jù)影響不大,因此直接刪除包蓝。對(duì)于缺失值的處理方法非常多驶社,例如基于聚類的方法,基于回歸的方法养晋,基于均值的方法衬吆,在這里,我們使用mean方法對(duì)缺失值進(jìn)行填補(bǔ)绳泉。
#保留x9中不是缺失值的數(shù)據(jù)
data<- data[!is.na(x9),]
x4_var<-c(var="x4",mean=mean(x4,na.rm=TRUE),median=median(x4,na.rm=TRUE),quantile(x4,c(0,0.01,0.1,0.25,0.5,0.75,0.9,0.99,1),na.rm=TRUE),max=max(x4,na.rm=TRUE),missing=sum(is.na(x4)))
View(t(x4_var))
#用mean填補(bǔ)x4的缺失值
x4<-ifelse(is.na(x4)==T,6670.2,x4)
#或者
library(Hmisc)
impute(x4, mean) # 均值替代
2.異常值處理
異常值是指明顯偏離大多數(shù)抽樣數(shù)據(jù)的數(shù)值逊抡,比如個(gè)人客戶的年齡大于100或小于0時(shí),通常認(rèn)為該值為異常值零酪。找出樣本總體中的異常值冒嫡,通常采用離群值檢測(cè)的方法。 離群值檢測(cè)的方法有單變量離群值檢測(cè)四苇、局部離群值因子檢測(cè)孝凌、基于聚類方法的離群值檢測(cè)等方法。在本數(shù)據(jù)集中月腋,采用單變量離群值檢測(cè)來判斷異常值蟀架,采用箱線圖。常把低于 Q1-1.5IQR的值和高于Q3+1.5IQR的值作為異常值榆骚。通過繪制箱型圖能很明顯的看到異常值片拍,
處理異常值:通常采用蓋帽法,即用數(shù)據(jù)分布在1%的數(shù)據(jù)覆蓋在1%以下的數(shù)據(jù)妓肢,用在99%的數(shù)據(jù)覆蓋99%以上的數(shù)據(jù)捌省。
block<-function(x,lower=T,upper=T){
if(lower){
q1<-quantile(x,0.01)
x[x<=q1]<-q1
}
if(upper){
q99<-quantile(x,0.99)
x[x>q99]<-q99
}
return(x)
}
對(duì)于age變量而言,我們認(rèn)為大于100歲小于等于0歲的為異常值碉钠,由箱線圖可知纲缓,異常值樣本不多,故直接刪除喊废。
par(mfrow=c(2,1))
boxplot(x1,data=data,horizontal=T,frame=F,col="lightgray")
x1<-block(x1)
boxplot(x1,data=data,horizontal=T,frame=F,col="lightgray")
#col : 箱體的填充
#border : 箱體中線條的顏色祝高,默認(rèn)為黑色
可以看出經(jīng)過蓋帽法,大于100污筷,小于等于0的值被刪除
對(duì)于RevolvingUtilizationOfUnsecuredLines(可用額度比值x0)及DebtRatio(負(fù)債率x3)而言褂策,箱線圖如下圖:
par(mfrow=c(1,2))
boxplot(x0,frame=F,ylab ="%")
abline(h=1,col="red")
data<-data[which(data$x0<=1),]
boxplot(x3,frame=F,ylab ="%")
abline(h=1,col="red")
data<-data[which(data$x3<=1),]
因?yàn)樯鲜鰞勺兞康臄?shù)值型為百分比,故大于1的值全部刪除。
對(duì)于變量x2(逾期30-59天筆數(shù))斤寂、x6(逾期90天筆數(shù))、x8(逾期60-89天筆數(shù)做箱線圖揪惦,由圖可知遍搞,有兩異常值點(diǎn),數(shù)值為96器腋、98溪猿,刪除。
同時(shí)會(huì)發(fā)現(xiàn)剔除其中一個(gè)變量的96晌砾、98值羽历,其他變量的96骡楼、98兩個(gè)值也會(huì)相應(yīng)被剔除。
par(mfrow=c(1,1))
boxplot(x2,x6,x8,data=data,frame=F)
data<-data[-which(data$x2==96),]
data<-data[-which(data$x2==98),]
四依痊、探索性分析切分?jǐn)?shù)據(jù)集
在建立模型之前,我們一般會(huì)對(duì)現(xiàn)有的數(shù)據(jù)進(jìn)行 探索性數(shù)據(jù)分析(Exploratory Data Analysis) 怎披。 EDA是指對(duì)已有的數(shù)據(jù)(特別是調(diào)查或觀察得來的原始數(shù)據(jù))在盡量少的先驗(yàn)假定下進(jìn)行探索胸嘁。常用的探索性數(shù)據(jù)分析方法有:直方圖、散點(diǎn)圖和箱線圖等凉逛。
探索數(shù)據(jù)主要是為了分析各變量對(duì)輸出結(jié)果的影響性宏,在本項(xiàng)目中,主要關(guān)注的是違約客戶與各變量間的關(guān)系状飞。
1.單變量分析
hist(x1,freq = F,col="lightgreen")
lines(density(x1),col="red")
可以看到年齡變量大致呈正態(tài)分布毫胜,符合統(tǒng)計(jì)分析的假設(shè)。
library(ggplot2)
ggplot(data, aes(x = x4, 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.多變量分析
我們會(huì)用經(jīng)過清洗后的數(shù)據(jù)看一下變量間的相關(guān)性。注意自晰,這里的相關(guān)性分析只是初步的檢查凝化,進(jìn)一步檢查模型的IV(證據(jù)權(quán)重)作為變量篩選的依據(jù)。此處較簡單酬荞,在此不贅述搓劫。
總之,數(shù)據(jù)處理的過程是占據(jù)整個(gè)標(biāo)準(zhǔn)評(píng)分卡構(gòu)建的最大的工作量混巧,整體的目標(biāo)是:排除異常值對(duì)模型訓(xùn)練的干擾枪向,將所有變量進(jìn)行量化處理,自變量對(duì)因變量有明顯的解釋性咧党,變量之間無明顯相關(guān)性秘蛔。
建模之前需要先檢驗(yàn)變量之間的相關(guān)性,,如果變量之間具有強(qiáng)相關(guān)性,則會(huì)影響模型的準(zhǔn)確性.調(diào)用R中的cor()函數(shù)來計(jì)算不同變量之間的相關(guān)系數(shù),同時(shí),調(diào)用corrplot包中的corrplot()函數(shù)來將相關(guān)系數(shù)可視化
cor1<-cor(data[,2:12])
library(corrplot)
corrplot(cor1)
corrplot(cor1,method = "number")
由上圖可知:各個(gè)變量之間的相關(guān)系數(shù)較小,相關(guān)性較弱,不存在明顯的多重共線問題,采用logistic回歸需要考慮多重共線問題,不過此處由于各變量之間的相關(guān)性較小,可以初步判斷不存在多重共線問題.在建模之后也可以通過VIF(方差膨脹因子)來檢驗(yàn)多重共線問題.如果存在多重共線性,即有可能存在兩個(gè)變量高度相關(guān),需要降維或剔除處理,需要進(jìn)行降維或剔除處理.
五深员、切分?jǐn)?shù)據(jù)集
table(y)
由上表看出负蠕,對(duì)于響應(yīng)變量SeriousDlqin2yrs,存在明顯的類失衡問題倦畅,SeriousDlqin2yrs等于1的觀測(cè)為9879遮糖,僅為所有觀測(cè)值的6.6%。數(shù)據(jù)正負(fù)比例不平衡叠赐,因此我們需要對(duì)非平衡數(shù)據(jù)進(jìn)行處理欲账,在這里可以采用SMOTE算法,smote算法的思想是合成新的少數(shù)類樣本芭概,合成的策略是對(duì)每個(gè)少數(shù)類樣本a赛不,從它的最近鄰中隨機(jī)選一個(gè)樣本b,然后在a罢洲、b之間的連線上隨機(jī)選一點(diǎn)作為新合成的少數(shù)類樣本踢故。用R對(duì)稀有事件進(jìn)行超級(jí)采樣。
非平衡樣本的解決方法
過采樣 容易過擬合
欠采樣 容易丟失信息
SMOTE算法 不能對(duì)有缺失值和類別變量做處理
SMOTE算法介紹:
采樣K近鄰
從K近鄰中隨機(jī)挑選N個(gè)樣本進(jìn)行隨機(jī)線性插值
new=xi+rand(0,1)*(yj-xi),j=1…N
其中xi為少類中的一個(gè)觀測(cè)點(diǎn)奏路,yj為從K近鄰中隨機(jī)抽取的樣本畴椰。
我們利用caret包中的createDataPartition(數(shù)據(jù)分割功能)函數(shù)將數(shù)據(jù)隨機(jī)分成相同的兩份。
set.seed(1234)
library(caret)
splitIndex<-createDataPartition(y,time=1, p=0.5,list=FALSE)
train<-data[splitIndex,]
test<-data[-splitIndex,]
prop.table(table(train$y))
prop.table(table(test$y))
兩者分類后的結(jié)果是平衡的鸽粉,y等于1的概率均為6.0%左右斜脂,處于良好的水平,因此触机,可以采用切割后的數(shù)據(jù)進(jìn)行建模和預(yù)測(cè)分析帚戳。
六、建立模型
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)分卡格式对供。
1.模型解釋
2.建立模型
①首先利用glm函數(shù)對(duì)所有變量進(jìn)行Logistic回歸建模,模型如下
fit<-glm(y~.,train,family = "binomial")
summary(fit)
②可以看出氛濒,利用全變量進(jìn)行回歸产场,模型擬合效果并不是很好,其中id,x7三個(gè)變量的p值未能通過檢驗(yàn)舞竿,在此直接剔除這兩個(gè)變量京景,利用剩余的變量對(duì)y進(jìn)行回歸。
fit2<-glm(y~x0+x1+x2+x3+x4+x5+x6+x8+x9,train,family = "binomial")
summary(fit2)
第二個(gè)回歸模型所有變量都通過了檢驗(yàn)骗奖,所有模型的擬合效果更好些确徙。
③使用逐步法剔除變量醒串。
step(fit2, direction = "both")
可以看到?jīng)]有變量被剔除
④VIF多重共線性檢驗(yàn)
library(car)
library(carData)
vif(fit2)
一般認(rèn)為VIF值大于2的話,表明變量間存在共線性鄙皇。此時(shí)沒有大于2的值,各個(gè)變量間相互獨(dú)立
⑤預(yù)測(cè)
train_pred <- predict(fit2, data = train , type = "response")
test_pred <- predict(fit2, data = test , type = "response")
⑥模型評(píng)估
下面首先利用模型對(duì)test數(shù)據(jù)進(jìn)行預(yù)測(cè)芜赌,生成概率預(yù)測(cè)值
test_prob <- predict(fit2, test)
調(diào)用R語言中pROC包中的roc函數(shù)計(jì)算分類器的AUC值,可以方便的比較兩個(gè)分類器育苟,并且自動(dòng)標(biāo)注出最優(yōu)的臨界點(diǎn)较鼓。
install.packages("pROC")
library(pROC)
modelroc <- roc(test$y,test_prob)
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)
如圖所示:最優(yōu)點(diǎn)FPR=1-TNR=0.778,TPR=0.732违柏,AUC值為0.832,說明該模型的預(yù)測(cè)效果不錯(cuò)香椎,正確率較高漱竖。
(到這里為用戶貸款預(yù)測(cè)模型)
七、特征變量選擇
特征選擇非常重要畜伐,好的特征能夠構(gòu)造出較好的模型馍惹,在此,我們采用信用卡評(píng)分模型常用的IV值篩選玛界。
1.特征分箱
特征分箱指的是將連續(xù)變量離散化或?qū)⒍酄顟B(tài)的離散變量合并成少狀態(tài)万矾。離散特征的增加和減少都很容易,易于模型的快速迭代慎框,離散化后的特征對(duì)異常數(shù)據(jù)有很強(qiáng)的魯棒性良狈,能夠減少未離散化之前異常值對(duì)模型的干擾,同時(shí)離散化后可以進(jìn)行特征交叉笨枯。此外本文所選的模型算法為邏輯回歸薪丁,邏輯回歸屬于廣義線性模型,表達(dá)能力受限馅精;單變量離散化為N個(gè)后严嗜,每個(gè)變量有單獨(dú)的權(quán)重,相當(dāng)于為模型引入非線性洲敢,提升模型表達(dá)能力漫玄,加大擬合,同時(shí)也降低了模型過擬合的風(fēng)險(xiǎn)压彭。特征分箱常用的有以下幾種方法:有監(jiān)督的有Best-KS睦优,ChiMerge(卡分分箱),無監(jiān)督的包括等頻哮塞、等距刨秆、聚類。根據(jù)數(shù)據(jù)特征忆畅,針對(duì)不同數(shù)據(jù)采用不同分箱方式衡未。
信用評(píng)分卡開發(fā)中一般有常用的等距分段尸执、等深分段、最優(yōu)分段缓醋。
如年齡如失,在外面的業(yè)務(wù)場景中年齡越小和年齡越大,違約概率都會(huì)偏大送粱,所以這塊需要做好分箱處理褪贵。
cutx1= c(-Inf,30,35,40,45,50,55,60,65,75,Inf)
plot(cut(train$x1,cutx1))
cutx2 = c(-Inf,0,1,3,5,Inf)
plot(cut(train$x2,cutx2))
cutx4 = c(-Inf,1000,2000,3000,4000,5000,6000,7500,9500,12000,Inf)
plot(cut(train$x4,cutx4))
cutx6 = c(-Inf,0,1,3,5,10,Inf)
plot(cut(train$x6,cutx6))
cutx8 = c(-Inf,0,1,3,5,Inf)
plot(cut(train$x8,cutx8))
cutx9 = c(-Inf,0,1,2,3,5,Inf)
plot(cut(train$x9,cutx9))
2.WOE值計(jì)算
在分箱的過程中,同時(shí)計(jì)算了WOE(Weight of Evidence)和IV(Information Value)抗俄,前者在建立邏輯回歸模型是需要將所有的變量轉(zhuǎn)為WOE脆丁,而后者則可以很好的展示變量的預(yù)測(cè)能力。這兩個(gè)值的計(jì)算方式如下:
證據(jù)權(quán)重(Weight of Evidence,WOE)轉(zhuǎn)換可以將Logistic回歸模型轉(zhuǎn)化為標(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[(違約/總違約)/(正常/總正常)]。由于模型中剔除id,x7兩個(gè)變量禾唁,因此對(duì)剩下的變量進(jìn)行WOE轉(zhuǎn)換效览。
WOE分箱原則:
1.分箱數(shù)量適中,不宜過多和過少荡短。
2.各個(gè)分箱內(nèi)的記錄數(shù)應(yīng)該合理丐枉,不應(yīng)過多或者或過少。
3.結(jié)合目標(biāo)變量掘托,分箱應(yīng)該表現(xiàn)出明顯的趨勢(shì)瘦锹。
4.相鄰分箱的目標(biāo)變量分布差異盡可能大。
#計(jì)算WOE的函數(shù)
totalgood = as.numeric(table(train$y))[1]
totalbad = as.numeric(table(train$y))[2]
getWOE <- function(a,p,q)
{
Good <- as.numeric(table(train$y[a > p & a <= q]))[1]
Bad <- as.numeric(table(train$y[a > p & a <= q]))[2]
WOE <- log((Bad/totalbad)/(Good/totalgood),base = exp(1))
return(WOE)
}
如age變量(x1)
Agelessthan30.WOE=getWOE(train$x1,-Inf,30)
Age30to35.WOE=getWOE(train$x1,30,35)
Age35to40.WOE=getWOE(train$x1,35,40)
Age40to45.WOE=getWOE(train$x1,40,45)
Age45to50.WOE=getWOE(train$x1,45,50)
Age50to55.WOE=getWOE(train$x1,50,55)
Age55to60.WOE=getWOE(train$x1,55,60)
Age60to65.WOE=getWOE(train$x1,60,65)
Age65to75.WOE=getWOE(train$x1,65,75)
Agemorethan.WOE=getWOE(train$x1,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
NumberOftIME30-59Days(x4)
以上截圖中的x10指x9闪盔,其他類推
3.對(duì)變量進(jìn)行WOE變換
如age變量(x1)
tmp.age <- 0
for(i in 1:nrow(train)) {
if(train$x1[i] <= 30)
tmp.age[i] <- Agelessthan30.WOE
else if(train$x1[i] <= 35)
tmp.age[i] <- Age30to35.WOE
else if(train$x1[i] <= 40)
tmp.age[i] <- Age35to40.WOE
else if(train$x1[i] <= 45)
tmp.age[i] <- Age40to45.WOE
else if(train$x1[i] <= 50)
tmp.age[i] <- Age45to50.WOE
else if(train$x1[i] <= 55)
tmp.age[i] <- Age50to55.WOE
else if(train$x1[i] <= 60)
tmp.age[i] <- Age55to60.WOE
else if(train$x1[i] <= 65)
tmp.age[i] <- Age60to65.WOE
else if(train$x1[i] <= 75)
tmp.age[i] <- Age65to75.WOE
else
tmp.age[i] <- Agemorethan.WOE
}
table(tmp.age)
tmp.age[1:10]
train$x1[1:10]
4.WOE DataFrame構(gòu)建
trainWOE =cbind.data.frame(tmp.age,tmp.NumberOfTime30.59DaysPastDueNotWorse,tmp.MonthlyIncome,tmp.NumberOfTime60.89DaysPastDueNotWorse<br data-filtered="filtered"> ,tmp.NumberOfTimes90DaysLate,tmp.NumberRealEstateLoansOrLines,tmp.NumberOfDependents)
5.看一下各個(gè)變量的IV值
八弯院、評(píng)分卡的創(chuàng)建和實(shí)施
邏輯回歸建模
#因?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$y
glm.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(coe[1])+as.numeric(coe[2])*tmp.age +as.numeric(coe[3])*tmp.NumberOfTime30.59DaysPastDueNotWorse+p*as.numeric(coe[4])*tmp.MonthlyIncome+p*as.numeric(coe[5])*tmp.NumberOfTime60.89DaysPastDueNotWorse+p*as.numeric(coe[6])*tmp.NumberOfTimes90DaysLate+p*as.numeric(coe[7])*tmp.NumberRealEstateLoansOrLines+p*as.numeric(coe[8])*tmp.NumberOfDependents
個(gè)人總評(píng)分=基礎(chǔ)分+各部分得分
基礎(chǔ)分為:
base <- q + p*as.numeric(coe[1])
base
對(duì)各變量進(jìn)行打分
Agelessthan30.SCORE = p*as.numeric(coe[2])*Agelessthan30.WOE
Age30to35.SCORE = p*as.numeric(coe[2])*Age30to35.WOE
Age35to40.SCORE = p*as.numeric(coe[2])*Age35to40.WOE
Age40to45.SCORE = p*as.numeric(coe[2])*Age40to45.WOE
Age45to50.SCORE = p*as.numeric(coe[2])*Age45to50.WOE
Age50to55.SCORE = p*as.numeric(coe[2])*Age50to55.WOE
Age55to60.SCORE = p*as.numeric(coe[2])*Age55to60.WOE
Age60to65.SCORE = p*as.numeric(coe[2])*Age60to65.WOE
Age65to75.SCORE = p*as.numeric(coe[2])*Age65to75.WOE
Agemorethan.SCORE=p*as.numeric(coe[2])*Agemorethan.WOE
Age.SCORE =c(Age30to35.SCORE,Age35to40.SCORE,Age40to45.SCORE,Age45to50.SCORE,Age50to55.SCORE,Age55to60.SCORE,Age60to65.SCORE,Age65to75.SCORE,Agemorethan.SCORE)
Age.SCORE
計(jì)算各變量分箱得分:
Agelessthan30.SCORE = getscore(2,Agelessthan30.WOE)
Age30to35.SCORE = getscore(2,Age30to35.WOE)
Age35to40.SCORE = getscore(2,Age35to40.WOE)
Age40to45.SCORE = getscore(2,Age40to45.WOE)
Age45to50.SCORE = getscore(2,Age45to50.WOE)
Age50to55.SCORE = getscore(2,Age50to55.WOE)
Age55to60.SCORE = getscore(2,Age55to60.WOE)
Age60to65.SCORE = getscore(2,Age60to65.WOE)
Age65to75.SCORE = getscore(2,Age65to75.WOE)
Agemorethan.SCORE = getscore(2,Agemorethan.WOE)
Age.SCORE = c(Agelessthan30.SCORE,Age30to35.SCORE,Age35to40.SCORE,Age40to45.SCORE,Age45to50.SCORE,Age50to55.SCORE,Age55to60.SCORE,Age60to65.SCORE,Age65to75.SCORE,Agemorethan.SCORE)
Age.SCORE
最終生成的評(píng)分卡如下:
個(gè)人評(píng)分計(jì)算案例:
所以這個(gè)人的總評(píng)分 = 基礎(chǔ)分(base)+ 各特征分?jǐn)?shù)
總評(píng)分 = 446.2841+7+47+10+38-3+62+2 = 609.2841
建立自動(dòng)評(píng)分系統(tǒng):
#計(jì)算每一個(gè)借款人的信用評(píng)分
#age
score.age <- 0
for(i in 1:nrow(train)) {
if(train$x2[i] <= 30)
score.age[i] <- Agelessthan30.SCORE
else if(train$x2[i] <= 35)
score.age[i] <- Age30to35.SCORE
else if(train$x2[i] <= 40)
score.age[i] <- Age35to40.SCORE
else if(train$x2[i] <= 45)
score.age[i] <- Age40to45.SCORE
else if(train$x2[i] <= 50)
score.age[i] <- Age45to50.SCORE
else if(train$x2[i] <= 55)
score.age[i] <- Age50to55.SCORE
else if(train$x2[i] <= 60)
score.age[i] <- Age55to60.SCORE
else if(train$x2[i] <= 65)
score.age[i] <- Age60to65.SCORE
else if(train$x2[i] <= 75)
score.age[i] <- Age65to75.SCORE
else
score.age[i] <- Agemorethan.SCORE
}
for(i in 1:nrow(train)){
creditScore[i]<-score.age[i]+score.PastDue[i]+score.MonthIncome[i]+
score.Days90PastDue[i]+score.RealEstate[i]+score.Days60.89PastDue[i]+score.Dependents[i]+baseScore
}
train$creditScore<-round(creditScore,0)
本文通過對(duì)于Kaggle上項(xiàng)目的數(shù)據(jù)進(jìn)行分析,利用邏輯回歸制作了一個(gè)簡單的評(píng)分卡量九。在建立評(píng)分卡的過程中适掰,首先進(jìn)行了數(shù)據(jù)清洗,對(duì)缺失值和異常值進(jìn)行了處理并對(duì)數(shù)據(jù)分布進(jìn)行了宏觀展示荠列。然后對(duì)特征值進(jìn)行了處理类浪,將連續(xù)的變量分箱,同時(shí)計(jì)算了woe和iv值肌似,并保留了iv值較高的變量對(duì)其woe轉(zhuǎn)化戚宦。最后將woe轉(zhuǎn)化后的數(shù)據(jù)進(jìn)行邏輯回歸分析,利用得到變量系數(shù)并自行擬定了評(píng)分標(biāo)準(zhǔn)建立了評(píng)分卡锈嫩。
本項(xiàng)目還有許多不足之處,比如分箱應(yīng)當(dāng)使用最優(yōu)分箱或卡方分箱垦搬,減少人為分箱的隨機(jī)性呼寸,此外模型采用的是邏輯回歸算法,還可以多多嘗試其他模型猴贰。
PS:
信用卡評(píng)分模型學(xué)習(xí)筆記總結(jié)(轉(zhuǎn))
https://blog.csdn.net/huipingx/article/details/85225711
其他代碼