1. 程式人生 > >資料分析之信用風險評分卡建立

資料分析之信用風險評分卡建立

專案需求:現某金融公司想要通過建立信用風險評分卡對客戶進行判斷,是否發放貸款

專案描述:資料來源 kaggle 資料量 4 萬條,原始欄位數 33 個

專案目的: 使用機器學習構建信用卡評分模型,對新樣本做出預測
環境和工具: Rstudio, prettyR, smbinning
流程:
1.資料探索:完全缺失欄位,以及二分類變數正類缺失的欄位進行刪除,對異常值採取蓋帽
法進行替換
2 對變數進行分箱操作。使用 smbinning 包中的函式,通過決策樹進行最優分箱,得到每
個變數的分箱結果,以及對應的 IV 值和 WOE 值。
3 通過 IV 值大於 0.02 的部分,篩選變數(性別,年齡,婚姻,區編號,是否有家庭電話,
工作年限,收入共 7 個變數),並通過 smbinning.gen 和 smbinning.factor.gen 函式生成
新的變數並生成新的資料表。變數值為分箱後對應的 WOE 值,資料模型進行建模
4 採用 Logistic(邏輯迴歸)進行學習建模,對輸出結果通過 smbinning.scaling 進行打分,
生成評分卡
5.通過評分卡對原資料客戶進行打分, 基本判斷,好壞客戶的分數取值分佈情況。其次通
過 smbinning.metrics()輸出結果, 得到評分卡的分數最優閾值為 546, AUC 值為 0.66,
並不是很好,準確率(precision)達 87.6%
6 最後通過評分卡,使用 excel 表格,運用 vlookup 函式,對新的客戶進行匹配打分
模型使用 Rstudiuo 進行搭建。使用包: base,subning,prettyR, 使用函式: glm subning
subning.factor subning.gen subning.factor.gen sunbning..plot
開始:

首先匯入需要使用得包:


1 資料工程:
資料探索階段,發現數據中有部門欄位內容全部缺失,以及部分二分類變數只有 1 個有值,
故這兩種情況無法參加建模,將其找出刪除。 同時識別出哪些欄位是因子型,哪些是數值型,

方便後面分箱使用不同得函式,其中數值型欄位用:smbinning 因子型使用:smbinning.factor


異常值處理: 通過箱線圖判斷是否存在異常值, 使用蓋帽法,用 99 分位點值代替極大異常

值,有 1 分位點值代替極小異常值的方法


由於 smbining 函式中得打分是 1 是信用高得客戶,故這裡將目標變數得 0 和 1 值互換


變數分箱:使用 smbinning 函式,運用迴歸決策樹最優分箱,從而使得類之間的相異性盡
可能大(由於變數較多,這裡不一一列舉,拿兩個欄位舉例),其中連續變數使用得函式為:
smbinning 因子變數: smbinning.factor
連續型變數舉例: 首先用箱圖檢視資料分佈情況,若分佈區別不明顯,可以使用 T 檢驗(數

值變數對分類變數得影響),有顯著性再進行分箱,否則無意義



年齡屬性得分佈情況如上圖,通過 T 檢驗, P<0.05,表明原假設被拒絕,認為屬性對目標變
量有顯著影響,可以進行分箱
Smbnning 對年齡得分箱結果,是通過迴歸樹進行最有分箱,由樹圖可知:劃分點為: 19,

22, 32, 37, 46, 59 六個點,分為 7 個區間屬性,同時獲取響應區間 WOE 值以及總得 IV

值。


年齡得 IV 值為 0.2.WOE 分佈如下圖,可加分箱分佈有明顯趨勢,說明分箱結果不錯,可以

加入模型。


用年齡欄位進行分箱得完整程式碼如下:


對其他得數值變數,通過同樣得方式進行分箱操作,並獲取 IV 值。
因子型變數分箱

分型別變數以性別舉例說明:通過前期資料探索,發現性別變數有部分值沒有指明性別,這
裡用眾數填充, :
對於分類變數採用得是卡方檢驗,來檢驗分類是否對目標變數有顯著性得影響,這裡 P 值

很小,表明拒絕原假設,即性別對信用度有顯著影響,可以進行分箱


分箱結果得分佈如下:可以看出,女性相對於男性更容易違約


分類變數分箱也採用的是 smbinning 包,不過 smbinning 包中就是用原分類值進行屬性
劃分,未對劃分屬性處理,分類變數用的函式是 smbinning.factor(),最後得到 SEX 的 IV

值為 0.0274。具體執行程式碼如下:


再舉一個電話區號得例子,可能很多人直接做數值型變數處理了。通過資料探索發現,大部
分得申請者都是來自於四個地方,其他得地方人很少很分散,這裡有明顯得地域偏向,所有
我將其處理為類別變數,除了 3 個申請人較多得地方分別為一類,其他得地區劃分為一類,
共四類進行處理;

通過 WOE 分佈還是比較好得分箱, IV 值 0.0389


具體程式碼如下:

接下來所有變數進行分箱之後,得到所有得 IV 值,一般認為 IV 大於 0.02,對構建評分卡
有一定得價值,所以這裡以 0.02 為界限進行變數篩選。最終選擇性別,年齡,婚姻,區編
號,是否有家庭電話,工作年限,收入共 7 個變數進行建模。

一下是 IV 值及分佈情況:



對於分箱後的資料,使用 smbinning 得函式,生成分箱後的資料,生成新得資料集,通過

logistic (邏輯迴歸),建立評分卡模型。其中聲中分箱結果資料使用得函式,數值型分箱
變數用函式 smbinning.gen(),因子型變數用函式 smbinning.factor.gen()。通過邏輯迴歸

結果可以看出,分箱後得變數都較為顯著


有了模型給出得預測結果,就可以對其進行打分了。使用 smbinning.scaling 函式,通過調
節 pdo, score, odds 三個引數,是的評分卡得分值在合理得範圍內。這裡評分卡區間為

(345-798)。並將評分卡儲存到檔案。程式碼如下:


評分卡得最終結果展示如下:


評分卡建好,這裡是使用 smbinning.scoring.gen 對原資料集資料進行一個打分。並檢視
好壞客戶的得分分佈情況,
其次通過 smbining.metrics()函式,從輸出報告可以看出,最優閾值為: 546, AUC 值為

0.66,並不是很好,準確率(precision)達 87.6%,結果及程式碼如下圖



預測
針對新樣本,我選擇用 Excel 工具獲得信用評分,使用 VLOOKUP 函式可以很方便地得到
想要的資料,評分展示如下,選擇 cutoff 值為 546,這裡認為(526,546)的客戶為關注客
戶,信用情況中等, 546 分以上的客戶信用情況良好, 526 分以下的客戶信用情況堪憂。 其

中符號: 表示信用良好, 表示信用中等, × 表示信用較差



附上資料來源:kaggle:https://www.kaggle.com/yuzijuan/credit-card-scoring/data