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")
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
Để 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")
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.