1 .Giới thiệu về gói “smbinning” trong R

Binning là một trong các thủ tục xử lý dữ liệu cơ bản trước khi làm các bài toán về score card. Thủ tục này nhằm phân khoảng một biến liên tục thành các khoảng dữ liệu có tính đơn điệu theo WOE. Một thuật toán bin dữ liệu được gọi là chấp nhận được nếu như tổng IV của các khoảng bin là lớn hơn 0.1 và được coi là tốt nếu tổng IV là lớn hơn 0.3.Thuật toán bin dữ liệu trong R dựa trên lý thuyết về học máy (machine learning) được gọi là “Supervised Discretization”, đây là một kĩ thuật phân nhóm dựa trên việc phân chia một biến liên tục thành các khoảng nhỏ hơn dựa trên một biến mục tiêu rời rạc. Trong tình huống chấm điểm tín dụng, biến mục tiêu để bin là biến trạng thái Good/Bad.

Để cài đặt gói “smbinning” sử dụng câu lệnh sau:

install.packages("smbinning")

2 .Nhập dữ liệu dùng để binning

Trong ví dụ này, bộ dữ liệu được sử dụng là bộ dữ liệu “hmeq” được cung cấp miễn phí trên trang web http://www.creditriskanalytics.net/datasets.html . Câu lệnh dưới đây sẽ được sử dụng để nhập dữ liệu vào R từ file dữ liệu dạng SAS.

library(haven) 
datahmeq <- read_sas("C:/SASdata/hmeq.sas7bdat")
hmeq <- data.frame(datahmeq)

Minh họa 10 quan sát đầu tiên của dữ liệu:

head(hmeq, n=10)
##    BAD LOAN MORTDUE  VALUE  REASON     JOB  YOJ DEROG DELINQ     CLAGE
## 1    0 1700   97800 112000 HomeImp  Office  3.0     0      0  93.33333
## 2    0 2000   64536  87400             Mgr  2.5     0      0 147.13333
## 3    0 2300  102370 120953 HomeImp  Office  2.0     0      0  90.99253
## 4    0 2400   98449 117195 HomeImp  Office  4.0     0      0  93.81177
## 5    0 2500    7229  44516 HomeImp    Self   NA     0      0 208.00000
## 6    0 2500   71408  78600 HomeImp ProfExe  8.0     0      0 255.73333
## 7    0 2900  103949 112505 HomeImp  Office  1.0     0      0  96.10233
## 8    0 2900  104373 120702 HomeImp  Office  2.0     0      0 101.54030
## 9    0 3000  104570 121729 HomeImp  Office  2.0     0      0  85.88437
## 10   0 3000   58000  71500 HomeImp     Mgr 10.0    NA      2 211.93333
##    NINQ CLNO  DEBTINC
## 1     0   14       NA
## 2     0   24       NA
## 3     0   13 31.58850
## 4     0   13 29.68183
## 5     0   12       NA
## 6     0   12       NA
## 7     0   13 30.05114
## 8     0   13 29.91586
## 9     0   14 32.05978
## 10    0   25       NA

3 .Thủ tục bin dữ liệu tự động với gói “smbinning”

Để binning biến LOAN theo biến mục tiêu là biến BAD. Thực hiện câu lệnh sau:

library(smbinning)
binloan = smbinning(df=hmeq,y="BAD",x="LOAN",p=0.05)

Khi đó kết quả binning của biến LOAN được thể hiện như sau:

binloan["ivtable"]
## $ivtable
##   Cutpoint CntRec CntGood CntBad CntCumRec CntCumGood CntCumBad PctRec
## 1  <= 6000    332     157    175       332        157       175 0.0557
## 2   > 6000   5628    1032   4596      5960       1189      4771 0.9443
## 3  Missing      0       0      0      5960       1189      4771 0.0000
## 4    Total   5960    1189   4771        NA         NA        NA 1.0000
##   GoodRate BadRate   Odds  LnOdds     WoE     IV
## 1   0.4729  0.5271 0.8971 -0.1085  1.2809 0.1222
## 2   0.1834  0.8166 0.2245 -1.4937 -0.1042 0.0099
## 3      NaN     NaN    NaN     NaN     NaN    NaN
## 4   0.1995  0.8005 0.2492 -1.3894  0.0000 0.1321

Kết quả bin biến LOAN cho thấy biến này được chia thành 2 nhóm với tổng IV là 0.13 là chấp nhập được. Tuy nhiên, việc hai nhóm bin có số quan sát lệch nhau khá xa có thể là một vấn đề cần phải lưu ý.

Đồ thị tần suất của mỗi khoảng bin:

smbinning.plot(binloan,option="dist",sub="LOAN") 

Đồ thị Bad Rate của từng khoảng bin

smbinning.plot(binloan,option="badrate",sub="LOAN") 

Đồ thị về WOE của các khoảng bin

smbinning.plot(binloan,option="WoE",sub="LOAN") 

Câu lệnh bin biến:

library(smbinning)
binclage = smbinning(df=hmeq,y="BAD",x="CLAGE",p=0.05)

Khi đó kết quả binning của biến CLAGE được thể hiện như sau:

binclage["ivtable"]
## $ivtable
##      Cutpoint CntRec CntGood CntBad CntCumRec CntCumGood CntCumBad PctRec
## 1  <= 71.2308    325     128    197       325        128       197 0.0545
## 2 <= 172.5516   2480     619   1861      2805        747      2058 0.4161
## 3 <= 240.4667   1596     242   1354      4401        989      3412 0.2678
## 4  > 240.4667   1251     122   1129      5652       1111      4541 0.2099
## 5     Missing    308      78    230      5960       1189      4771 0.0517
## 6       Total   5960    1189   4771        NA         NA        NA 1.0000
##   GoodRate BadRate   Odds  LnOdds     WoE     IV
## 1   0.3938  0.6062 0.6497 -0.4312  0.9583 0.0636
## 2   0.2496  0.7504 0.3326 -1.1008  0.2887 0.0377
## 3   0.1516  0.8484 0.1787 -1.7219 -0.3324 0.0267
## 4   0.0975  0.9025 0.1081 -2.2251 -0.8356 0.1120
## 5   0.2532  0.7468 0.3391 -1.0814  0.3081 0.0054
## 6   0.1995  0.8005 0.2492 -1.3894  0.0000 0.2454

Kết quả binning biến CLAGE cho thấy biến được chia thành 4 nhóm với tổng IV là 0.24. Kết quả này có mức phân chia các nhóm bin đồng đều hơn so với biến LOAN

Đồ thị tần suất của mỗi khoảng bin:

smbinning.plot(binclage,option="dist",sub="CLAGE") 

Đồ thị Bad Rate của từng khoảng bin

smbinning.plot(binclage,option="badrate",sub="CLAGE") 

Đồ thị về WOE của các khoảng bin

smbinning.plot(binclage,option="WoE",sub="CLAGE") 

4 .Kết luận

Kết quả trên cho thấy, việc binning biến liên tục thông qua các thủ tục tự đông là khả thi và nhanh chóng. Tuy nhiên, chất lượng của bin và tính hợp lý đối với từng biến phải được xem xét trên cơ sở phù hợp với thực tế. Chẳng hạn, với biến CLAGE, kết quả binning là tương đối “hợp lý”, nhưng khi xem xét kết quả bin của biến LOAN thì sự lệch nhau về số quan sát giữa hai nhóm có thể làm ảnh hưởng đến chất lượng mô hình.