標籤:

SAS申請評分卡建模

SAS申請評分卡建模

類型:申請類評分卡

方式:內部評分卡建模(適用於規模較大的公司,需要的模型類型較多),其優勢在於可以發展和保留懂得數據開發的人才,便於後期系統的維護且內部對於業務更加了解使得數據內容更加有意義。

步驟:

一.數據準備

1.1前期準備

1)目標:增加客戶群,擴大市場佔有率,預計的壞賬率為6%;預計未來兩年內申請人的財務狀況來幫助貸款機構優化審批。

2)貸款人群分析: 主要面對的是較為優質的客戶(有較為穩定的收入來源),例如針對工薪階層(其中包含對不同行業的劃分,如優質行業,和在編工作人員,和其他)

3)壞賬定義: 根據產品定位的人群以及參考巴塞爾協議,超過90天(M3)定義為逾期

4) 數據來源(來自Kaggle網站分享的give me some credit數據 Give Me Some Credit)

1.2數據預處理

1)數據描述

performance window:兩年(例如申請時間為2016年10月則表現期間則為2015年10月到2016年10月)

數據充足且可信認: 一共有150,000條數據,壞的數據量10,027佔總數的6.7% ,好的數據為139,975佔總數的93.3%,對於不確定用戶(逾期30-60,習慣性逾期人群),活躍度低等表現行為

2)重複值處理和缺失值確立

拿到數據後對於完全重複的數據進行處理,邏輯回歸不會處理缺失值,如果缺失值佔比較大則會對模型預測造成影響,因此對於缺失值的處理十分必要。本文利用regression填補缺失值

data jane.overrepeat;

set jane.training_4;

array b _numeric_;

do over b ;

if b =.;

end;

run;

NOTE: 從數據集 JANE.TRAINING_4. 讀取了 150000 個觀測

NOTE: 數據集 WORK.MISSING 有 33655 個觀測和 12 個變數。

缺失值:33655個,分布在incoming和dependents中,數量較大需要對其進行填充

385 proc mi data=jane.training_4 seed=1214 nimpute=1

386 minimum=0 0 0 0 0 0 0 round=10. 10. 10. 10. 10. 10. 10. out=jane.training_5;

387 mcmc chain=multiple displayinit initial=em(itprint);

388 var Income Dependents firstPastDue NumberOfOpenCreditLinesAndLoans over90DaysLate NRealEstateLoans secondPastDue ;

389 run;

填充後的值進行極端值識別,利用K-S( fast fastclus )識別出11,049個極端值,佔到總數的7%,對於這一部分極端值我們進行刪除。

404 %inc d:codeClustOL.sas;

457 %let Dsin=jane.training_5;

458 %let VarList=age DebtRatio Income Dependents oweandtotal firstPastDue NumberOfOpenCreditLinesAndLoans

458! over90DaysLate NRealEstateLoans secondPastDue;

459 %let NClust=20; /*數值要大一些*/

460 %let Pmin=0.05;/*一般設為0.05-0.1之間*/

461 %let DSout=jane.training_extreme;

462 %ClustOL(&DSin, &VarList, &NClust, &Pmin, &DSout);

NOTE: 從數據集 JANE.TRAINING_EXTREME. 讀取了 138951 個觀測

WHERE _Outlier_=0;

NOTE: 數據集 JANE.TRAINING_6 有 138951 個觀測和 12 個變數

1.3)單變數分析

1.31)變數是否滿足正態分布(以age和income為例)

proc univariate data=jane.training_6;

var id age;

histogram /normal (mu=est sigma =est ) kernel;

run;

可以看出age大致滿足正態分布

下圖是income的分布情況,大致分布也符合正態分布

1.32)變數間的相關性分析,這張表太大了,沒有截圖完整,但是大致可以看出變臉之間的相關性基本在0.1-0.3之間,因為邏輯回歸對於變數的相關性較為敏感,我們也可以在後期通過方差膨脹因子來檢驗多重共線性的問題,如果存在的話需要用主成分分析或其他方法進行降維。

516 proc corr data=jane.training_6 spearman;

517 var age DebtRatio Income Dependents oweandtotal firstPastDue NumberOfOpenCreditLinesAndLoans over90DaysLate

517! NRealEstateLoans secondPastDue;

518 run;

1.4)數據切分

將15,000條數據去重去極端之後要分為training data 和test data,但是需要注意的是,SeriousDlqin2yrs二元變數存在明顯的分布差異,違約用戶(等於1)僅為9645,占所有觀測值的7.3%左右,對於這類非平衡數據我們需要進行均衡抽樣,避免抽樣造成模型過擬合的情況。分層後用proc freq 語句檢查樣本違約比重和總體違約比重是否存在較大差異,代碼如下

proc surveyselect data=jane.out out=jane.trainingset

method=srs samprate=0.5 noprint;

strata SeriousDlqin2yrs;

run;

%inc D:學習工具credit cardcodeBSWeight.sas;

%let popds=jane.training_6;

%let sds=jane.trainingset;;

%let dvvar= SeriousDlqin2yrs;

%let wtvar=weight;

%let dsout=jane.check;

%bsweight(&popds,&sds,&dvvar,&wtvar,&dsout);

proc freq data=jane.check;

table weight*SeriousDlqin2yrs/norow nocol nopercent;

run;

顯示的結果如下圖

二. Logistic模型

1.選用邏輯回歸的原因:如果我們採用線性模型,如下圖所示,在Y取值範圍限定為0和1的情況下,該線性模型也可以稱作是線性概率模型,而該方程的方差

通過上面的殘差公式我們可以發現殘差的變化依賴Y的變化,違反了殘差獨立性原則,為異方差。因為殘差違反了方差齊性和獨立性所以導致估計值有偏差是無效的。

那我們採用Logistic的原因有兩點,1.它的自變數輸入範圍是負無窮到正無窮,因變數的取值範圍(0,1),正好滿足概率分布為(0,1)的要求 2.logistic是一個單調函數,具有良好的連續性,不存在不連續的點。3.邏輯回歸沒有對於殘差獨立性的假設

2.建立邏輯模型

用proc步進行logist回歸建模,以下是代碼和運行結果

proc logistic data=jane.creditcard;

model SeriousDlqin2yrs(event=1)= age DebtRatio Income Dependents oweandtotal firstPastDue NumberOfOpenCreditLinesAndLoans over90DaysLate NRealEstateLoans secondPastDue/clparm=wald;

run;

代碼結果如下圖所示,Debetratio,Oweandtotal,NumberOfOpenCreditLinesAndLoans,NRealEstateLoans四個變數不應該納入模型中,

概率比為1說明變數對模型的貢獻很低,為income,debtratio,Oweandtotal,

置信區間可以看出debtratio,Oweandtotal存在疑惑

結合以上三個分析的結果我么覺定移除debtratio,Oweandtotal變數並且重新看一下移出前和移除後的差別,

第一次結果

第二次結果

3.模型評估

未完待續,有時間接著寫


推薦閱讀:

2018年5大可視化BI工具選型對比分析
簡單邏輯回歸預測泰坦尼克號生存率
第四關—複雜數據分析
R語言第三、四章學習心得

TAG:數據分析 |