Mục lục
Tổng quan
Dữ liệu SQL
Khi xây dựng Credit Scoring, ta thường sử dụng công cụ SQL để tạo các biến. Dữ liệu thường được lấy theo cách sau đây để tăng tính hiệu quả:
Các biến sẽ được lấy tại từng khung thời gian (theo tháng, tuần, năm) trước ngày quan sát. Ví dụ về dữ liệu được cho như sau:
ID | Time_ID | Var1 | Var2 |
---|---|---|---|
A | 1 | 1000 | 5 |
A | 2 | 5000 | 10 |
A | 3 | 6500 | 15 |
… | … | … | … |
Trong đó:
- ID là key của dữ liệu. Ví dụ customer_id.
- Time_ID là số chỉ các frame. Ví dụ Time_ID=3 nghĩa là thông tin được lấy tại tháng thứ 3 trước ngày quan sát.
- Var là các biến được lấy tại khoảng thời gian Time_ID tương ứng.
Từ dữ liệu này, ta tính các hàm tổng hợp:
Num, Sum, Min, max, avg, std
: Số lượng, tổng, giá trị nhỏ nhất, giá trị lớn nhất, giá trị trung bình, độ lệch chuẩn.Rng
(range): giá trị lớn nhất – giá trị nhỏ nhất.Crr
(Correlation): tương quan giữa biến và time step.Slp
(Slope): hệ số góc giữa biến và time step.
Kết quả của Data Aggregation là các biến mới được đặt tên theo quy tắc như sau:
Trong đó:
- Varname là tên của biến:
- Agg1, agg2 là các hàm aggregation dữ liệu, đặt tên theo 3 ký tự (num, min, avg, max, sum, std (standard deviation), crr (correlation), slp (slope), rng(range)). Agg1 được lấy từ từng snapshot, agg2 được lấy theo cumulative.
- c/m(i): c(i) là trong i tháng trước ngày quan sát (cumulative), m(i) là trong tháng i trước ngày quan sát (marginal).
Ví dụ: DPD_max_max_c12: Giá trị DPD lớn nhất của các giá trị lớn nhất trong vòng 12 tháng trước ngày quan sát. Có thể hiểu đơn giản là DPD lớn nhất trong 12 tháng trước ngày quan sát. Chú ý rằng có thể có những biến vô nghĩa (ví dụ DPD_max_min_12m). Cần lưu ý điều này khi phân tích biến. Minh họa về dữ liệu sau bước Data Aggregation được cho như sau:
ID | Var1_num_c1 | Var1_min_c1 | Var1_max_c1 | … | Var2_crr_c12 | Var2_rng_c12 | Var2_slp_c12 |
---|---|---|---|---|---|---|---|
A | 1 | 5 | … | ||||
B | 2 | 10 | … | ||||
… | … | … | … |
Sử dụng Macro
Syntax
Để thực hiện Data Aggregation, ta sử dụng Macro Data_Aggregation. Cú pháp của Macro như sau:
%Data_Aggregation (Ds_in, Ds_out,
max_time, id, varlist,
step=3,
funclist=num max min sum var avg rng crr slp);
Trong đó:
Ds_in
(dataset[time_id,id
,varlist
]) data đầu vào chính là data dạng multiple từ SQL. Trong đó time_id là biến chỉ ID thời gian như đã đề cập ở phía trên.Ds_out
(dataset) data đầu ra. Mỗi biến cơ sở sẽ tạo ra \(max\_month\times 10\) biến mới.max_time
(int) Là số tháng lớn nhất trước ngày quan sát (12,6) của cột id_month.Id
(danh sách biến) Primary key của bảng. Ví dụ business_date customer_id.Varlist
(danh sách biến) Danh sách các biến.Step
(int) để hạn chế số lượng các biến. Ví dụ với \(step=3\) thì các biến aggregation trongDs_out
sẽ có index chia hết cho 3 (ví dụ Var1_num_c3, Var1_num_c6, Var1_num_c9, Var1_num_c12).funclist
các hàm sẽ được sử dụng để tạo biến mới.
Detail
Các bước xử lý trong macro như sau:
- Bước 1. Chuyển từ dạng bảng dọc sang dạng bảng ngang
Data từ dạng “dọc”
ID | ID_month | Var1 | Var2 |
---|---|---|---|
A | 1 | 1000 | 5 |
A | 2 | 5000 | 10 |
A | 3 | 6500 | 15 |
… | … | … | … |
Data dạng ngang
ID | Var1_m1 | Var1_m2 | Var1_m3 | … | Var1_m12 | Var2_m1 | … | Var2_m12 |
---|---|---|---|---|---|---|---|---|
A | 1000 | 5000 | 6500 | … | … | 5 | … | … |
B | … | … | … | … | … | … | … | … |
C | … | … | … | … | … | … | … | … |
… | … | … | … | … | … | … | … | … |
- Bước 2: Sử dụng data step và array để tạo các biến mới với các hàm aggregate: num, min, avg, max, sum, std (standard deviation), crr (correlation), slp (slope), rng(range).
Output
Kết quả của macro là dữ liệu Ds_out
với các biến Id
và các biến có dạng Varname_agg1_agg2_c/m(i).
Example
Ví dụ dữ liệu đầu vào là VARIABLE_SQL với các biến Z1-Z3 được ví dụ như sau:
ID | Time_ID | Z1 | Z2 | Z3 |
---|---|---|---|---|
A | 1 | 1000 | 5 | 0.6 |
A | 2 | 5000 | 10 | 0.6 |
A | 3 | 6500 | 15 | 0.8 |
B | 1 | 3000 | 33 | 0.1 |
B | 2 | 9000 | 15 | 0.2 |
B | 3 | 2500 | 21 | 0.3 |
… | … | … | … | … |
và dữ liệu đầu ra mong muốn là VARIABLE.
%Data_Aggregation(ds_in=variable_sql,
ds_out=variable_agg,
max_time=12,
id=id,
varlist= z1 z2 z3)