images
14/10/2020 07:29 am

Gấu mèo đi làm Data Scientist - Phần 10: Dealing with unbalanced dataset

Trong phần trước khi xây dựng hệ thống Credit Card Fraud Analysis thì Gấu Mèo gặp phải vấn đề về unbalanced dataset. Sau chuyến lên thư viện Quốc Gia, Gấu Mèo đã tổng hợp được một số cách. Nó vội note lại vào quyển bí kíp:

1. Chọn metric để evaluate


Dĩ nhiên rồi, trước hết vẫn phải chọn đúng cách để đánh giá model đã. Các bài thế này thường lệch theo kiểu 99:1, mà việc tìm nhóm số lượng ít lại quan trọng hơn (tìm khách hàng rời bỏ, tìm gian lận tín dụng…). Thế nên lúc này mà dùng accuracy thì việc đánh giá gần như chả có tác dụng gì. Trong trường hợp này có thể dùng các metric sau:

- Precision/Specificity

- Recall/Sensitivity

- F1 score

- MCC

- AUC


2. Cân bằng số lượng giữa hai nhóm


Mục đích phương pháp này làm cân bằng số lượng của 2 nhóm. Và như Gấu Mèo thử hôm trước, phương pháp này lúc hiệu quả, lúc không.

Sẽ có 2 cách để làm cho số lượng của 2 nhóm  được cân bằng:


2.1. Under-sampling


Cách này giảm số lượng của nhóm lớn. Phương pháp này chỉ thực hiện nếu số lượng nhóm nhỏ cũng đủ lớn, nếu không sẽ dẫn tới hiện tượng thiếu data để train, model sẽ dễ bị overfitting.


2.2. Over-sampling


Cách này thì ngược lại. Chúng ta duplicate data nhóm nhỏ và trộn lại. Phương pháp này cần chú ý tách test set và train set trước khi upsample, vì nếu không thì dữ liệu trong test set  có thể nằm hết trong train set, khiến cho việc evaluate model bị sai.


3. Sử dụng nhiều model


Cách này gần giống như Under-sampling tuy nhiên nó khác ở chỗ, chúng ta chia nhóm lớn thành nhiều nhóm con. Với từng nhóm đó chúng ta sẽ training 1 model với nhóm nhỏ, sau đó sẽ kết hợp nhiều model lại để ra kết quả. 

4. Sử dụng nhiều model với ratio khác nhau


Cũng giống như cách 3 tuy nhiên thay vì chia đều thì chúng ta sẽ chia theo các tỉ lệ khác nhau. 


5. Cluster nhóm lớn


Cũng giống như Under-sampling, tuy nhiên để đỡ bị overfitting thì trước lúc lấy sample từ nhóm lớn thì chúng ta sẽ cluster trước. Sau đấy lấy đều trên các cluster, điều này sẽ khiến cho distribution của train set sát với dữ liệu thật hơn.


6. Đổi loss function


Các thuật toán learning đều có mục đích tối ưu làm sao hàm lỗi trả về giá trị thấp nhất. Bởi vậy mà chọn hàm lỗi ảnh hưởng rất lớn tới việc model của bạn có đi sát mục đích của bạn hay không. Bạn có thêm trọng số để hàm loss biết bạn ưu tiên cho class nào hơn, bạn cũng có thể tự viết hàm loss của chính mình.

Các thư viện cũng thường cho phép truyền vào weighted. 


Ví dụ với keras:

class_weight = {0: 1., 1: 50., 2: 2.}

model.fit(X_train, Y_train, nb_epoch=5, batch_size=32, class_weight=class_weight)


Chú ý phân biệt giữa sample_weight class_weight.


sample_weight ảnh hưởng tới số lượng sample (Giống như các phương pháp 2) còn 


class_weight ảnh hưởng tới hàm loss.


Đêm đã khuya, Gấu Mèo cũng xin gác bút...


Mời các bạn đọc lại Gấu mèo đi làm Data Scientist - Phần 9: Credit Card Fraud Analysis - Part 2.


và bài tiếp theo: Phần 11: Marketing - Part 1: Những câu hỏi cần trả lời trong marketing


- Tech Zone -

Thư giãn chút nào!!!

Bài viết liên quan