Mục lục
WOE Tranformation
Sau khi phân tích biến, ta có được kết quả binning của các biến. Kết quả này được trình này dưới dạng PROC FORMAT. Kết quả ví dụ như sau:
Proc format;
/* X1 */
Value X1F
.='[01] X1 <= -0.628623236 or missing'
Low - -0.628623236 = '[01] X1 <= -0.628623236 or missing'
-0.628623236< - -0.544671434 = '[02] -0.628623236 < X1 <= -0.544671434'
-0.544671434< - -0.280795118 = '[03] -0.544671434 < X1 <= -0.280795118'
-0.280795118< - High = '[04] -0.280795118 < X1';
Run;
Chú ý rằng phiên bản mới nhất của macro variable analysis sử sẽ tự động output ra bảng chứa dữ liệu format. Để chạy các format này ta dùng lệnh:
Proc format cntlin=Bin_mapping;
Run;
Trong đó Bin_mapping là dữ liệu chứa format. Các biến ban đầu sẽ được chuyển sang các giá trị WOE dựa trên các khoảng chia này. Để thực hiện việc biến đổi sang dạng WOE, ta dùng macro Data_add_WOE.
Sử dụng Macro
Syntax
Macro Var_add_WOE là công cụ transform các biến từ dạng ban đầu sang dạng WOE và lưu sang một dữ liệu mới. Cú pháp của macro như sau:
%Var_add_WOE(train=, validate=, ds_mapping=, keep=, varlist=, type=);
Trong đó:
-
Train (data): Dữ liệu train. Các giá trị WOE của từng nhóm sẽ được tính dựa trên dữ liệu TRAIN. Macro đẩy ra hai dữ liệu liên quan:
- Train_WOE (output) chứa các biến đã được chuyển sang dạng WoE từ dữ liệu Train. Các biến được đổi tên bắt đầu bằng WOE_.
-
Train_grp (output) chứa các biến đã được chuyển sang dạng group từ dữ liệu Train. Các biến được đổi tên bắt đầu bằng GRP_.
- Validate (data): Dữ liệu validate. Macro sử dụng WOE được tính từ Data để transform các biến. Macro đẩy ra hai dữ liệu mới:
- Validate_WOE (output) chứa các biến đã được chuyển sang dạng WoE từ dữ liệu Validate. Các biến được đổi tên bắt đầu bằng WOE_.
-
Validate_grp (output) chứa các biến đã được chuyển sang dạng group từ dữ liệu Validate. Các biến được đổi tên bắt đầu bằng GRP_.
-
Ds_mapping : dữ liệu chứa thông tin binning các biến là kết quả đầu ra của macro Var_Bin từ bước phân tích đơn biến
-
Keep (variable list): Các biến cần giữ lại (ví dụ customer_id, yearmonth, contract_no). Nguyên nhân vì mặc định macro ADD_WOE chỉ giữ lại các biến có dạng WOE_, Grp_, Good, Bad.
- Varlist (variable list): Các biến sẽ được transform thành dạng WoE và Group.
- Type (int) nhận giá trị 1 hoặc 2.
- Nếu type=1 thì macro sẽ sử dụng giá trị woe từ dữ liệu ds_mapping để gán trongcác dữ liệu đầu vào.
- Nếu type=2 thì macro sẽ tính giá trị woe từ dữ liệu train để gán trong các dữ liệu đầu vào.
Detail
Các bước xử lý trong macro như sau:
- Bước 1: Transform các biến thành dạng Group (các biến có tiền tố GRP_) và tạo bảng DATA_GRP (ví dụ tham số Train là Data.PD_RB thì dữ liệu sẽ có tên là Data.PD_RB_grp. Lưu ý rằng cách hiểu này được áp dụng cho các nội dung phía dưới trong bài viết này). Sử dụng PROC FREQ để tính WoE của các nhóm của các biến Group;
- Bước 2: Tạo bảng Data_WOEdata chứa thông tin tổng hợp về nhóm và WoE của các biến thuộc Varlist.
- Bước 3: Chuyển các biến trong dữ liệu DATA thành dạng WoE và tạo ra bảng Data_WOE.
- Bước 4: Nếu dữ liệu Validate tồn tại thì chuyển các biến trong dữ liệu Validate thành dạng group và WoE. Đẩy ra hai bảng Validate _WOE và Validate _grp.
Output
Đầu ra của Macro là các bảng sau đây:
- Các bảng chứa thông tin biến dưới dạng group: Train_grp, Validate_grp, Test_grp.
- Các bảng chứa thông tin biến dưới dạng WoE: Train_WOE, Validate_WOE, Test_WOE.
- Bảng chứa thông tin các nhóm của biến: Train_WOEdata.
- Bảng chứa thông tin binning: Var_bin_mapping.
Example
Ví dụ 1: Sử dụng proc format để lưu khoảng chia của biến:
Proc format;
/* X1 */
Value X1F
.='[01] X1 <= -0.628623236 or missing'
Low - -0.628623236 = '[01] X1 <= -0.628623236 or missing'
-0.628623236< - -0.544671434 = '[02] -0.628623236 < X1 <= -0.544671434'
-0.544671434< - -0.280795118 = '[03] -0.544671434 < X1 <= -0.280795118'
-0.280795118< - High = '[04] -0.280795118 < X1';
RUN;
Proc format;
/* X2 */
Value X2F
. = '[01] missing'
Low - -0.9836932146 = '[02] X2 <= -0.9836932146'
-0.9836932146< - -0.9347724580 = '[03] -0.9836932146 < X2 <= -0.9347724580'
-0.9347724580< - -0.7442787976 = '[04] -0.9347724580 < X2 <= -0.7442787976'
-0.7442787976< - -0.5803201324 = '[05] -0.7442787976 < X2 <= -0.5803201324'
-0.5803201324< - -0.3848034212 = '[06] -0.5803201324 < X2 <= -0.3848034212'
-0.3848034212< - -0.0590991114 = '[07] -0.3848034212 < X2 <= -0.0590991114'
-0.0590991114< - 0.9552791091 = '[08] -0.0590991114 < X2 <= 0.9552791091'
0.9552791091< - High = '[09] 0.9552791091 < X2';
Run;
/*----More format here----*/
Proc format;
/* X12 */
Value X12F
. = '[01] mising'
Low - -388973.67807 = '[02] X12 <= -388,973.67807'
-388973.67807< - -272177.72584 = '[03] -388,973.67807 < X12 <= -272,177.72584'
-272177.72584< - -166793.56727 = '[04] -272,177.72584 < X12 <= -166,793.56727'
-166793.56727< - -117865.48115 = '[05] -166,793.56727 < X12 <= -117,865.48115'
-117865.48115< - -16449.67509 = '[06] -117,865.48115 < X12 <= -16,449.67509'
-16449.67509< - High = '[07] -16,449.67509 < X12';
RUN;
%Var_add_WOE (train=data.train, validate= data.valid,
keep=Y Yearmonth,
varlist=X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12,
type=2);
Ví dụ 2: Sử dụng dataset để lưu khoảng chia của biến:
Proc format cntlin=bin_mapping;
Run;
%Var_add_WOE (train=data.train, validate= data.valid,
keep=Y Yearmonth,
varlist=X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12,
type=2);