[AIVIVN - Kalapa’s Credit Scoring Challenge] #15 Solution (27/02) , 0.296 Gini Score

kalapa

#1

1. Giới thiệu

Dưới đây là mô hình đã đưa nhóm mình lên vị trí thứ 15 vào ngày 25/02/2020 trong cuộc thi Kalapa’s Credit Scoring Challenge. Do đây là lần đầu mình tham gia cuộc thi dữ liệu kiểu này nên một số hướng tiếp cận mình dựa trên cảm tính phần nhiều :smile:, có gì sai mong mọi người chỉ bảo. Thanks!.

2. Hướng tiếp cận

2.1. Dựa trên mô hình được chia sẻ của anh Nguyễn Tùng

Source Code: https://rpubs.com/chidungkt/571838

Mình thử cải tiến mô hình và đưa được nó lên 0.2875 Gini score

  • Mình bê nguyên source code về chạy và thử submit thì được kết quả tầm 0.25, khá cao.
  • Trong các feature mình thấy feature FIELD_7 là khó hiểu và phức tạp nhất nên mình thử drop FIELD_7 (cái gì khó quá thì bỏ qua :stuck_out_tongue_winking_eye:). Sau khi drop FIELD_7 và thử chạy lại mô hình thì được kết quả lên khoảng 0.27 Gini score.
  • Mình lưu lại tập df_forGBM_Scaled và df_test_Scaled (đã bỏ FIELD_7) trước khi được đưa vào mô hình Random Forest.
  • Với dataset mới này mình sử dụng thư viện H2O AutoML (tham khảo notebook ở đây) để dự đoán, xong overfitting nặng. Tuy nhiên mình thu được bảng Importances của các feature.
  • Dựa trên bảng Importances của các feature mình lần lượt drop thêm các feature có độ quan trọng thấp trước khi đưa vào mô hình Random Forest. Sau khi thử lần lượt thì thấy drop FIELD_32 giúp mô hình tăng lên khoảng 0.28 Gini scrore.
  • Kế đến mình nghĩ đến việc tinh chỉnh các tham số trong mô hình Random Forest. Lúc đầu mình thử dùng thư viện tuneRanger tuy nhiên kết quả không tốt hơn. Do đó mình chỉnh chay bằng tay và nhận thấy thay đổi tham số num.trees tác động lớn đến kết quả mô hình. Cuối cùng với num.trees = 600 giúp mô hình đạt được kết quả tốt nhất Model_0 ~0.2875 Gini score.

2.1. Dựa trên thực nghiệm, cảm tính và may rủi :relieved:

Phần này mình đẩy mô hình lên 0.296 Gini score. Cơ bản trong phần này mình vẫn quanh quẩn xử lý với tập dataset (df_forGBM_Scaled và df_test_Scaled đã bỏ FIELD_7 và FIELD_32).

  • Mình chuyển sang mô hình Lightgbm (dựa trên notebook ở đây). Cũng chẳng tinh chỉnh tham số gì, kết quả thu được Modle_1 overfitting thì khỏi phải nói.
  • Nhận thấy label 0 chiếm tỷ lệ lớn hơn label 1 rất nhiều. Mình dùng SMOTE để xử lí vấn đề.
from imblearn.over_sampling import SMOTE
sm = SMOTE(sampling_strategy='minority')
X_train, y_train = sm.fit_sample(X_train, y_train.ravel())
  • Với dữ liệu mới mình lại cho vào mô hình Lightgbm trên để dự đoán. Kết quả Model_2 tiếp tục overfitting :disappointed_relieved: (Mình cũng đoán trước được).
  • Ok, tiếp đến mình cho bộ dữ liệu mới này quay lại mô hình Random Forest ban đầu. Kết quả thu được Model_3 thấp hơn.

Quan sát kết quả của các model mình nhận thấy tình trạng tương tự như trong post này. Mình đem 4 model trên lấy min của cả 4 model (có khoảng tầm 3000 kết quả có dự đoán nhỏ hơn Model_0) rồi submit thì được kết quả cuối cùng là 0.296 Gini score.

3. Dự định tiếp theo

  • Xử lý dữ liệu thô ban đầu.
  • Sử dụng Lightgbm nhưng kết hợp với các feature gốc ban đầu.

#2

Cách làm của bạn rất hay và sáng tạo :)))


#3

Bạn ơi lúc bạn chạy có lỗi như vậy không? Sao mình bê nguyên source code chạy mà lỗi ta?


#4

Bạn thêm tham số check_cat_num = False vào hàm woebin nhé.


#6

cho mình hỏi chút là: IV ở đây là gì nhỉ ??


#7

Information Value đó bạn .


#8

mình thử check_cate_num = FALSE (thêm chữ e ở cat) thì được ạ, cám ơn bạn nhiều


#9

Sorry mình viết thiếu đó, ảnh ở dưới mới đúng :joy:.


#10

image

bác pvqu47 kiếm người nữa để được giải nhóm đi kìa


#11

Bạn @pvqu47 cho BTC xin thông tin với :smiley:


#12

Cảm ơn bạn. Bạn làm ơn cho hỏi với model được 0.296 GINI ở tập train kết quả cross validate check là bao nhiêu Bạn?