項目總結-信用評分卡


本文基於Python軟件進行評分卡的制作及使用預測。主要包括確定觀察時間窗口、確定表現時間窗口、評分卡的制作、新數據的預測四大部分。內容涉及數據清洗、變量篩選、生成WOE 矩陣、IV值計算、ROC曲線、模型建立、模型評估預測等。

  • 數據來源

  本項目數據來源於kaggle競賽Give Me Some Credit

  • 流程如下

 1.確定觀察時間窗口

使用用戶逾期詳情表data/CreditSampleWindow.csv:
- CID:用戶ID
- STAGE_BEF:本階段前的逾期階段
- STAGE_AFT:本階段進入的逾期階段
- 其中逾期階段含義為: M0:逾期0-3天; M1:逾期3-30天; M2:逾期30-60天; M3:逾期60-90天;以此類推
- START_DATE:進入本階段時間
- CLOSE_DATE:本階段結束時間
本數據取的是訂單審批日從2015年1月1日到2017年10月31日的所有訂單號,即這些訂單對應的逾期詳情,最后的截止日期為2018年5月31日

1.1導包

 

1.2讀取數據及描述統計

 根據描述結果可以看出最后一列即本階段結束時間最小值為0,且包含缺失值,故需要先處理缺失值再處理異常值0

 1.3數據清洗

1.3.1去重

  drop_duplicates是數據框去重的函數,可以根據指定的若干列(subset=)去重

1.3.2缺失值的處理

 后4列缺失值比例相同約為0.08,若缺失值在同一行,則考慮刪除。所以驗證各列缺失值是否在同一行。

  在同一行,刪除

1.3.3異常值的處理

 

 replace:替換數據框中的指定值,輸入字典,鍵是被替換值,值是替換值

1.3.4生成衍生變量

從數據中的進入本階段時間和本階段結束時間(4,5列)抽取對應的月份信息 •從本階段進入的逾期階段(3列)中抽取逾期指標

 

 1.4構建矩陣

這里的矩陣表示:

  •相繼時間內逾期狀態的變化情況,相繼時間表示從一個月到下一個月

  •每一行表示開始月份時的逾期狀態,每一列表示結束月份時的逾期狀態

  •開始月份和結束月份是相繼的,即間隔一個月

1.4.1邏輯關系

1.每一行數據對應一個本階段的逾期狀態,對應兩個月份時間:進入本階段時間和本階段結束時間

  • 可以將這兩個時間都理解為逾期狀態對應的時間,即逾期時間
  • 生成逾期狀態數據框,每行對應三列:id,逾期狀態,逾期時間(包含進入本階段時間和本階段結束時間)

2.將逾期狀態數據框內轉置,生成時間數據框:行是id,列是逾期時間

  • 轉置前事先對數據排序,去重,保留同ID,同時間下逾期狀態的最大值

3.使用時間數據框:由於列是已經排序的兩列,取前后相繼的兩列,即相繼的兩個月,統計逾期狀態變化的頻數,得到所有相繼兩列狀態變化的頻數

  • 根據統計的頻數,構建矩陣,行表示相繼時間中開始時間對應的逾期狀態,列表示結束時間對應的逾期狀態

4使用得到的矩陣,生成新列:

  • 每個狀態所有可能的變化,即行和
  • 每個狀態所有不好的變化,即表示狀態的數字變大
  • 每個狀態不好的變化的占比,即不好的變化除以所有可能的變化

 1.4.2生成預期狀態數據框

 1.4.3生成時間數據框

排序和去重:

  • sort_values:依據值排序,缺失值默認在末尾.依據指定列進行排序,設置by=一列或多列(列表)列名即可
  • drop_duplicates:根據若干列去重, 設置subset指定列,keep表示要保留的數據,可選"first","last",False(表示去掉所有重復的行)

  • set_index:給出若干列,將列作為行索引(每行可以有多個索引)
  • unstack:level=-1, fill_value=None, 第一個參數表示以哪列索引作為列, 默認最后一列, 相當於以選定的索引列作為列名, 其他作為行名

 

 

 

 1.4.4生成矩陣

 

 最終矩陣

 

 繪圖觀察

  • 可見M1是一個明顯的最低點和拐點,到M2階段以后壞客戶的比例迅速增加,因此這里選定的觀察時間窗口為M2,即30-60天,我們就可以定義逾期大於30天的客戶為壞客戶
  • 可以根據業務需求進一步調整觀察時間窗口

 2.確定表現時間窗口

使用用戶訂單時間表data/CreditFirstUse.csv:

  • CID:用戶ID
  • FST_USE_DT:用戶訂單時間

2.1數據讀取及描述

  • 可見沒有缺失值,沒有重復訂單號
  • 用戶訂單時間從2015年1月1日到2017年10月31日,初步判斷沒有異常值

 

 2.2數據清洗

 

使用前面生成的時間數據框:

  • 由於選取觀察時間窗口為M2,對於每個ID:
    • 取逾期狀態大於等於2的首個月作為逾期月
    • 逾期月表示客戶開始轉向壞客戶
  • 使用逾期月生成新列

 

 

統計月份差異的頻數,並且排序

  • 發現有的時間差是負的,把排序后前面負的時間差去掉

 

 

 

 2.3定義y的總結

  • 通過之前的數據篩選和匯總,我們定義觀察時間窗口為M2(30-60天),表現時間窗口為20
  • 即對於所有客戶來說,我們認為在訂單生成20個月內
    • 有M2以上的逾期,即逾期天數>=31天,為壞客戶
    • 有M1以下的逾期,即逾期天數<=3天,為好客戶
    • 中間狀態的樣本認為是不確定的不進入模型

 3 . 評分卡制作

該數據是信貸數據,來自kaggle2011年的競賽數據:Give Me Some Credit,評判指標是AUC

  • SeriousDlqin2yrs:出現90天或更長時間的逾期行為(即定義好壞客戶)
  • RevolvingUtilizationOfUnsecuredLines:貸款以及信用卡可用額度與總額度比例
  • age:借款人借款年齡
  • NumberOfTime30-59DaysPastDueNotWorse:過去兩年內出現35-59天逾期但是沒有發展的更壞的次數
  • DebtRatio:每月償還債務,贍養費,生活費用除以月總收入
  • MonthlyIncome:月收入
  • NumberOfOpenCreditLinesAndLoans:開放式貸款和信貸數量
  • NumberOfTimes90DaysLate:借款者有90天或更高逾期的次數
  • NumberRealEstateLoansOrLines:抵押貸款和房地產貸款數量,包括房屋凈值信貸額度
  • NumberOfTime60-89DaysPastDueNotWorse:過去兩年內出現60-89天逾期但是沒有發展的更壞的次數
  • NumberOfDependents:家庭中不包括自身的家屬人數(配偶,子女等)

3.1  讀取數據以及描述統計

 

 修改列名:由於一些算法中,列名中的某些符號會帶來問題甚至報錯,例如這里的"-",會在回歸公式中被認為是減號,所以換成"_"

 3.1.1去重

  3.2缺失值處理

缺失值處理方法的選擇,主要依據是業務邏輯和缺失值占比,在對預測結果的影響盡可能小的情況下,對缺失值進行處理以滿足算法需求,所以要理解每個缺失值處理方法帶來的影響,下面的缺失值處理方法沒有特殊說明均是對特征(列)的處理:

  1. 占比較多:如80%以上:刪除缺失值所在的列
    • 如果某些行缺失值占比較多,或者缺失值所在字段是苛刻的必須有值的,刪除行
  2. 占比一般:如30%-80%:將缺失值作為單獨的一個分類
    • 如果特征是連續的,則其他已有值分箱
    • 如果特征是分類的,考慮其他分類是否需要重分箱
  3. 占比少:10%-30%:多重插補:認為若干特征之間有相關性,則可以相互預測缺失值
  4. 占比較少:10%以下:單一值替換,如中位數,眾數
  5. 在決策樹中可以將缺失值處理融合到算法里:按比重分配

這里的占比並不是固定的,例如缺失值占比只有5%,仍可以用第二種方法,主要依據業務邏輯和算法需求

3.2.1查看缺失值分布情況

本數據的缺失值處理邏輯:

  • 對於信用評分卡來說,由於所有變量都需要分箱,故這里缺失值作為單獨的箱子即可
  • 對於最后一列NumberOfDependents,缺失值占比只有2.56%,作為單獨的箱子信息不夠,故做單一值填補,這列表示家庭人口數,有右偏的傾向,且屬於計數的數據,故使用中位數填補
  • 這里沒必要進行多重插補,下面的多重插補只是為了讓讀者熟悉此操作

3.2.2多重差補

 

3.2.3單一值替換

 3.3異常值處理

異常值常見的處理方法:

  1. 刪除所在的行
  2. 替換成缺失值,與缺失值一起處理
  3. 蓋帽法處理

結合業務邏輯和算法需求判斷是否需要處理異常值以及如何處理,一般情況下蓋帽法即可,即將極端異常的值改成不那么異常的極值,當然一些算法例如決策樹中連續變量的異常值也可以不做處理

 3.3.1定義蓋帽法函數

   互換y值(0,1互換)

 3.4匯總清洗過程,生成函數

 3.5  對每個x生成分箱對象

 

  • 1.定義y的名字
  • 2.初始化IV值對象

 3.5.1 對“RevolvingUtilizationOfUnsecuredLines”分箱

 

   保存IV值

  對每個變量都進行上邊的步驟分箱

3.6查看所有IV值

  IV(information Value):信息值,表示變量的重要性.

  IV<0.02對預測幾乎沒用,應該刪除;0.02≤IV<0.1,有一定的幫助;0.1 ≤ IV < 0.3,對預測較重要;IV ≥ 0.3,對預測十分重要。

 

 3.7  生成WOE數據

  WOE(Weight of Evidence):證據權重,與違約比例同方向變動,可以看到不同分箱的重要性

  之前smbin和smbin_cu得到的對象根據IV值篩選后,放在一個列表中

 3.7.1使用smgen函數根據得到的列表生成新數據

3.7.2要求

  • 抽取WOE列作為預測數據X
  • 加常數項列
  • 抽取響應列作為Y

 3.8建模

建立邏輯回歸模型,擬合數據,查看回歸結果

 

 可以看出NumberOfOpenCreditLinesAndLoans_woe不顯著,應該從模型中剔除

 

 從3.7部分重新運行,模型回歸結果如下:

 3.8.1查看多重共線性

  根據VIF值判斷,大於10則存在多重共線性,顯然不存在。

 3.9生成評分卡

  • 根據邏輯回歸模型和之前篩選得到的列表,給定參數,生成評分卡
  • 調整參數,使得評分卡分數范圍滿足需求

 

 

          ...

 

 3.10模型評估

  根據之前的分卡對象得到測試集分數

 

 

 

 

  ROC曲線

 

   由上圖可知AUC值0.86,說明該模型的擬合效果較好

4.新數據的預測

4.1讀取數據

 

 4.2清洗數據

 

 4.3生成WOE矩陣

 

   抽取WOE數據生成預測用數據 •要加常數項列

 

 

4.4預測

4.4.1預測每一行數據是好客戶的概率

4.4.2預測每行數據的分數,生成總分數和每個特征的分數

4.5標簽

  根據分數和訓練得到的閾值判斷客戶的好壞,好客戶是1,壞客戶是0

 

 完結。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM