Monitoring Report Stability

Hậu kiểm tính ổn định của mô hình

Mục lục

Tổng quan

Đánh giá sự ổn định được chia thành hai loại: Đánh giá trên toàn dữ liệu và đánh giá theo từng biến.

Đánh giá sự ổn định trên toàn bộ dữ liệu

Ý nghĩa sự ổn định của toàn dữ liệu:

  • Đánh giá sự ổn định của mô hình nhằm mục đích đảm bảo tương lai sẽ giống với quá khứ.
  • Đánh giá độ ổn định nhằm đảm bảo các chỉ số cut-off vẫn giữa nguyên ý nghĩa với mẫu development.
  • Đánh giá sự ổn định của từng biến để lựa chọn biến.

Để đánh giá sự ổn định ta cần dữ liệu train và out of time. Sau khi xây dựng xong mô hình, ta sẽ tiến hành chấm điểm cho hai dữ liệu này. Sau khi có điểm, ta chia điểm chấm này thành 20 khoảng vào tính số lượng và phần trăm quan sát trong mỗi khoảng. Hình sau đây minh họa sự so sánh phân phối giữa dữ liệu train và out of time:

Distribution Comparison of Population

Trong đó \(\%Dev,\%Rec\) là phần trăm quan sát trong mỗi khoảng của mẫu train (DEV-development) và out of time (REC- recent).

Để có một đánh giá định lượng, ta sử dụng chỉ số PSI (population stability index)

\[PSI=\sum_{i=1}^n\left(\%Dev_i-\%Rec_i\right)\times \ln\left(\frac{\%Dev_i}{\%Rec_i}\right)\]

Trong đó:

  • \(\%Rec_i\): Tỉ lệ quan sát ở khoảng thứ i so với toàn mẫu ở mẫu kiểm định (out of time).
  • \(\%Dev_i\): Tỉ lệ quan sát ở khoảng thứ i so với toàn mẫu ở mẫu phát triển (train).

Thang đánh giá cho chỉ số PSI được cho dưới đây:

  • \(PSI \le 10\): Mô hình là ổn định.
  • \(10 \le PSI \le 20\): Mô hình tương đối ổn định.
  • \(20 < PSI\): Mô hình không ổn định.

Đánh giá sự ổn định của từng biến

Ý nghĩa sự ổn định của từng biến:

  • Tìm ra nguyên nhân mất ổn định của mô hình.
  • Đánh giá sự biến động của mỗi biến qua thời gian.
  • Tìm ra các sai sót trong hệ thống.

Để đánh giá sự ổn định cho từng biến, ta thực hiện tương tự đánh giá sự ổn định cho toàn mẫu. Hình sau đây minh hoạ so sánh phân phối giữa mẫu development và recent:

Distribution Comparison of Variable

Chỉ số sử dụng là CSI (characteristic stability index).

\[CSI=\sum_{i=1}^n\left(\%Dev_i-\%Rec_i\right)\times \ln\left(\frac{\%Dev_i}{\%Rec_i}\right)\]

Trong đó:

  • \(\%Rec_i\): Tỉ lệ quan sát ở nhóm thứ i so với toàn mẫu ở mẫu kiểm định (out of time).
  • \(\%Dev_i\): Tỉ lệ quan sát ở nhóm thứ i so với toàn mẫu ở mẫu phát triển (train).

Ngoài ra, ta có thế đánh giá sự ổn định của biến qua một thời gian dài bằng cách quan sát đồ thị phân phối biến. Ví dụ như sau:

Distribution Comparison of Variable

Từ đồ thị ta có thể thấy được:

  • Xu hướng dịch chuyển giữa các nhóm biến.
  • Phát hiện các sai sót trong dữ liệu.

Sử dụng Macro

Syntax

Cú pháp chạy macro để output ra báo cáo ổn định của mô hình như sau:

%moni_stab(ds_in, ds_param, devday, varlist, weight=0.8)

Trong đó:

  • ds_in (data): Dữ liệu để kiểm định cần chứa tất cả các thông tin như sau:
    • Dữ liệu bao gồm thông tin train và outtime. Phân biệt bởi biến yearmonth có định dạng YYYYMM (ví dụ 202202 nghĩa là tháng 2 năm 2022).
    • Dữ liệu phải chứa các biến trong varlist dưới dạng WOE_ và GRP_. Ví dụ varlist=X1 X2 thì dữ liệu phải chứa WOE_X1 WOE_X2 GRP_X1 GRP_X2.
    • SCORE là output từ mô hình.
  • ds_param (data): Dữ liệu chứa hệ số ước lượng của các biến. Là output từ proc logistic. Cần chứa đầy đủ các biến trong varlist với hệ số tương ứng. Ví dụ như sau:
NAME TYPE Intercept WOE_X1 WOE_X2 WOE_X3 WOE_X4 WOE_X5
Estimate PARMS -0.1103 0.4355 0.4571 0.553 0.6418 0.5503
  • varlist (list): Các biến này sẽ được đưa vào báo cáo tính ổn định.
  • devday (YYYYMM): thể hiện cách phân tách dữ liệu train và outtime. Macro hiểu rằng nếu yearmonth <= devday thì dữ liệu và Development, còn lại là out of time.
  • weight (float=0.8) là trọng số để tính điểm đánh giá cuối cùng dựa trên điểm đánh giá của từng yearmonth.

Output

Example

Chạy báo cáo monitoring với dữ liệu all_data bao gồm cả train và out of time.

%moni_stab(all_data, data.model_reg_param, 201903,
	varlist=c_z1_m11_z1_min_c12
	c_z1_m10_z3_min_c12
	x2
	c_x10_x3
	z2_max_c9
	z1_m9
	z3_max_c12
	z2_min_c12
	z1_max_c12
	z1_m8
	z1_m7
	z1_m12
	x4
	z1_m6
	x5
	x3
	z1_m5
	x6);