images
07/10/2020 07:41 am

Gấu mèo đi làm Data Scientist - Phần 6 - Evaluate Model - Part 2 (F1 Score)

Hôm trước Crazy Puppy đã biết cách tính confusion Matrix. Hôm nay Gấu Mèo sẽ nói cho nó 1 metric phổ biến không kém : F1 Score.

Như đã nói ở phần trước, để evaluate model chúng ta có các phương pháp:

1. Confusion Matrix

2. 𝐅𝟏𝐒𝐜𝐨𝐫𝐞

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


Hôm trước Crazy Puppy đã biết cách tính confusion Matrix. Hôm nay Gấu Mèo sẽ nói cho nó 1 metric phổ biến không kém : F1 Score.


𝐅𝟏𝐒𝐜𝐨𝐫𝐞 = 𝟐 * 𝐩𝐫𝐞𝐜𝐢𝐬𝐢𝐨𝐧 * 𝐫𝐞𝐜𝐚𝐥𝐥 / (𝐩𝐫𝐞𝐜𝐢𝐬𝐢𝐨𝐧 + 𝐫𝐞𝐜𝐚𝐥𝐥)


Trong trường hợp tốt nhất precision = recall = 1 (dự đoán chính xác hoàn toàn) thì F1Score = 1


- "Nhưng tại sao họ lại dùng công thức này nhỉ?" Crazy Puppy quay sang hỏi.

- "Bởi vì trong nhiều bài toán đòi hỏi cả precision lẫn recall phải cao."

- "Nhưng tại sao không đơn giản là tính trung bình của precision + recal"

- "À bởi vì ở đây chúng không chỉ quan tâm tới việc precision và recall có cao hay không mà còn quan tâm tới việc chênh lệch của precision và recall nữa. Mục đích là muốn cân bằng giữa hai chỉ số đó. Càng ít chênh lệch thì F1Score càng cao.


Ví dụ nhé:


Với model 1: precision = 0.4 recall = 0.6

Với model 2: precision = 0.5 recall = 0.5

Nếu tính kiểu trung bình bình thường thì 2 model sẽ bằng nhau

Còn nếu tính kiểu F1Score thì model1 = 0.48 < model2 = 0.5

Bởi vậy model 2 sẽ được chọn. Kiểu tính này gọi là harmonic mean".


- "Hoá ra thế!!!..."

- "Ngoài ra nếu quan tâm tới chỉ số nào hơn thì cũng có thể đánh trọng số cho nó".

Với python thì dùng hàm: 𝐬𝐤𝐥𝐞𝐚𝐫𝐧.𝐦𝐞𝐭𝐫𝐢𝐜𝐬.𝐟𝟏_𝐬𝐜𝐨𝐫𝐞


>>> from sklearn.metrics import f1_score

>>> y_true = [0, 1, 2, 0, 1, 2]

>>> y_pred = [0, 2, 1, 0, 0, 1]

>>> f1_score(y_true, y_pred, average='macro')  

0.26...

>>> f1_score(y_true, y_pred, average='micro')  

0.33...

>>> f1_score(y_true, y_pred, average='weighted')  

0.26...

>>> f1_score(y_true, y_pred, average=None)

array([ 0.8,  0. ,  0. ])

- "Ơ thế cái average... kia là gì vậy anh".

- "À với bài toán có nhiều class thì nó sẽ dựa vào đấy để tính trung bình precision và recall. Cụ thể hơn thì thế này:


📌None: Nó sẽ tính trên từng class, trả ra một mảng, không tổng hợp với nhau."


📌Micro:Thì nó sẽ tính tổng true positives, false negatives và false positives trước, rồi mới tính precision và recall


📌Macro:Tính precision và recall cho từng class rồi chia trung bình. Cái này phù hợp khi các class balanced - số lượng same same nhau


📌Weighted:Tính trung bình precision và recal với trọng số là số lượng của mỗi nhãn. Cái này thường được dùng trong trường hợp các class unbalanced


📌Samples: Tính với trọng số được truyền vào. Cái này thì dùng khi mình muốn chủ động truyền trọng số vào


- "Nốt mấy cách đo kia nữa đi anh".

- "Hôm khác, hiểu rõ và code cách này đi đã... Mà nhớ code đẹp như những con thiên nga của Tchaikovsky". 😂


Gấu Mèo nói xong thì chạy lẹ về chỗ, lôi sách ra ngâm cứu Gain and Lift Charts…


Các bạn đọc tiếp Phần 6 - Gấu mèo đi làm Data Scientist - Evaluate Model - Part 3 - Gain and Lift Charts.


Mời các bạn xem lại Phần 6 - Gấu mèo đi làm Data Scientist - Evaluate Model - Part 1

 

- Tech Zone -


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

Bài viết liên quan