images
07/10/2020 07:17 am

Gấu mèo đi làm Data Scientist - Phần 6 - Evaluate Model - Part 1

“Làm thế nào để đánh giá một model có dùng được hay ko, anh Gấu Mèo?” Sau cái vụ làm tracking, thằng em Crazy Puppy suốt ngày chạy sang hỏi. Có nhiều thứ hiểu sẵn trong đầu, dùng cũng nhiều nhưng mà muốn cho người khác hiểu được thì cũng khoai.

“Làm thế nào để đánh giá một model có dùng được hay ko, anh Gấu Mèo?”


Sau cái vụ làm tracking, thằng em Crazy Puppy suốt ngày chạy sang hỏi. Có nhiều thứ hiểu sẵn trong đầu, dùng cũng nhiều nhưng mà muốn cho người khác hiểu được thì cũng khoai.


“Vấn đề này cũng phức tạp. Chú làm devops, tay ngang học về data, nói một sớm một chiều khó mà hiểu được. Thôi anh vứt cho mày quyển sách, mày đọc mấy hôm sau trình bày lại cho anh”


Crazy Puppy mừng húm, mà Gấu Mèo cũng mừng không kém vì đã thoát được thằng em hay thắc mắc. Thế nhưng ngay chiều hôm đấy, Crazy Puppy lại lôi Gấu Mèo ra để mà báo cáo:


Để evaluate một model người ta thường dùng các phương pháp dưới đây:


1. Confusion Matrix

2. F1 Score

3. Gain and Lift Charts

4. Kolmogorov Smirnov Chart

5. AUC – ROC

6. Log Loss

7. Gini Coefficient

8. Concordant – Discordant Ratio

9. Root Mean Squared Error


Nhưng trước hết để đánh giá một model thì cần phải có một tập dữ liệu gọi là test set. Nhớ phân biệt với validation set nhé, validation set dùng để tuning hyper parameter nhưng test set thì không, nó phải độc lập hoàn toàn mới đánh giá đúng được model.


Ở phần này chúng ta sẽ nói tới phương pháp rất phổ biến: Confusion Matrix. Để đơn giản thì chúng ta bắt đầu với binary classification (Phân loại 2 lớp YES - NO) trước. Với phương pháp này thì có một số khái niệm cần nắm:


- True positives (TP): Các trường hợp được dự đoán là YES và thực tế là YES.

- False positives (FP): Dự đoán YES, thực tế NO

- True negatives (TN): Dự đoán NO, thực tế NO.

- False negatives (FN): Dự đoán NO, thực tế YES.


Confusion Matrix đưa ra 4 chỉ số để đánh giá model, và tùy vào biz của bài toán chúng ta sẽ quyết định dùng chỉ số nào để đánh giá model có dùng được hay không? hoặc so sánh chọn model phù hợp nhất.


1. Accuracy

Accuracy = (TPNumber + TNNumber) / (TPNumber + FPNumber + TNNumber + FNNumber)


Nhiều data scientist khi nghe tới cách này đều nghĩ chỉ amateur mới dùng Accuracy. Tuy nhiên với các bài toán mà các class balance (số lượng không chênh lệch quá nhiều) thì nó vẫn hữu dụng cho mục đích về business.


Còn với bài toán dạng như khách hàng rời bỏ, số lượng trên các lớp chênh lệch rất nhiều thì accuracy gần như không có ý nghĩa gì lắm.


2. Precision

Precision = TPNumber / (TPNumber + FPNumber)

Precision đại diện cho tỉ lệ % khi model dự đoán là YES. Có một ví dụ thường được lấy đấy là dự đoán bệnh nhân bị ung thư. Khi một bệnh nhân bị chẩn đoán ung thư thì precision là tỉ lệ mà bệnh nhân sẽ bị mắc ung thư thật sự. Kết quả chẩn đoán như thế này có thể thay đổi đời sống của một con người, thế nên Precision sẽ được tính để kiểm tra model dự đoán có dùng được hay không.


3. Recall/Sensitivity/True Positive Rate

Có một vài tên gọi cho phần này, riêng mình vẫn hay gọi là recall

Recall = TPNumber / (TPNumber + FNNumber)

Recall phản ánh độ nhạy của model. Chẳng hạn như vụ xét nghiệm Covid-19: Ở vòng xét nghiệm 1 sẽ cần độ nhạy rất cao để tránh bỏ sót. Nên có những trường hợp vòng 1 dương tính nhưng vòng 2 vòng 3 âm tính. Bởi vậy recall thường được sử dụng cho các trường hợp không muốn bỏ sót các trường hợp YES.


4.Specificity

Specificity = TNNumber / (TNNumber + FNNumber)

Specificity gần như là Recall cho class NO (Negative). Ví dụ như trong bài toán dự đoán ung thư, để thông báo bệnh nhân họ ko có nguy cơ ung thư nào thì chúng ta cần Specificity cao (vì sẽ rất dở hơi nếu người bệnh có nguy cơ mà lại thông báo là họ không sao).



- “Nhưng mà em chỉ biết tính với 2 class, với loại nhiều class thì có cách nào tính không anh?” Crazy Puppy hỏi Gấu Mèo.

 

- “Cách phổ biến nhất là dựa trên cách tính với bài 2 class. Với cách này cứ đi lần lượt từng class, tính confusion matrix (Theo kiểu YES - NO đối với class đó) cho từng class. Cuối cùng thì chia trung bình các kết quả. Chúng ta có thể thêm trọng số cho các class tùy vào bài toán, xem việc phân loại class nào quan trọng hơn thì đánh trọng số cao hơn."

 

Thực ra với cách chia trung bình thì sẽ rất khó quyết định nếu điểm nó cứ lửng lơ ở giữa. Điểm cao hẳn hoặc thấp hẳn thì dễ quyết định hơn.

 

- Cũng may hôm trước anh lang thang trên mạng thì có tờ công thức này, chú lấy mà xem.


Các BA thì có thể dùng excel để tính, còn như chú - biết code thì chỉ cần dùng các thư viện như 𝐬𝐤𝐥𝐞𝐚𝐫𝐧 là được rồi. Hàm này này: sklearn.metrics.multilabel_confusion_matrix

 

- Chú có thể mở python hoặc jupyter chạy thử đoạn này để xem:

 

from sklearn.metrics import multilabel_confusion_matrix

y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]

y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]

multilabel_confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"])

 

- “Đơn giản thế mà mình ko nghĩ ra. Ngu thật”. Crazy Puppy thầm nghĩ.

Nó vặn mình, tiếp tục nghiên cứu một loạt các cách evaluate tiếp theo.

 

Mời các bạn xem lại Phần 5 - Gấu mèo đi làm Data Scientist - Tracking customer behavior

 

- Tech Zone -

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

Bài viết liên quan