Độ đo đánh giá phân loại
Bạn sẽ học được
- Đọc ma trận nhầm lẫn.
- Tính precision, recall và F1 từ ma trận.
- Hiểu vì sao accuracy đánh lừa với dữ liệu mất cân bằng.
- Chọn ngưỡng quyết định theo chi phí kinh doanh.
- Phân biệt ROC-AUC và PR-AUC.
Khái niệm cốt lõi
Với phân loại nhị phân, mọi dự đoán rơi vào bốn ô:
| Dự đoán dương | Dự đoán âm | |
|---|---|---|
| Thực tế dương | TP | FN |
| Thực tế âm | FP | TN |
- TP: dự đoán huỷ, khách huỷ thật.
- FP: dự đoán huỷ, khách không huỷ — báo động giả.
- FN: dự đoán không huỷ, khách huỷ thật — bỏ sót.
- TN: dự đoán không huỷ, khách không huỷ.
Mọi độ đo phân loại đều được tính từ bốn số này.
Ví dụ
1.000 khách, trong đó 100 huỷ thật. Mô hình dự đoán:
| Dự đoán huỷ | Dự đoán không huỷ | |
|---|---|---|
| Huỷ thật | 80 | 20 |
| Không huỷ thật | 120 | 780 |
Accuracy = (80 + 780) / 1.000 = 86,0%
Precision = 80 / (80 + 120) = 40,0%
Recall = 80 / (80 + 20) = 80,0%
F1 = 2 × 0,4 × 0,8 / (0,4 + 0,8) = 53,3%Accuracy 86% trông ổn. Nhưng trong 200 khách bị gắn nhãn "sẽ huỷ", chỉ 80 đúng — 60% báo động giả. Nếu mỗi ưu đãi giữ chân tốn 200.000 đồng, chi phí là 40 triệu cho 16 triệu tiết kiệm được.
Ý nghĩa từng độ đo
| Độ đo | Trả lời câu hỏi | Khi nào ưu tiên |
|---|---|---|
| Precision | Trong số báo động, bao nhiêu đúng? | Chi phí xử lý dương tính cao |
| Recall | Trong số ca thật, bắt được bao nhiêu? | Bỏ sót gây thiệt hại lớn |
| F1 | Cân bằng precision và recall | Cần một con số tổng hợp |
| Accuracy | Tổng số đoán đúng | Chỉ khi lớp cân bằng |
F1 là trung bình điều hoà, nên bị kéo xuống khi một trong hai thấp. Đừng dùng F1 để che việc một phía quá tệ.
Ngưỡng quyết định
Mô hình trả xác suất. Ngưỡng biến xác suất thành nhãn:
| Ngưỡng | TP | FP | FN | Precision | Recall |
|---|---|---|---|---|---|
| 0,2 | 95 | 300 | 5 | 24% | 95% |
| 0,5 | 80 | 120 | 20 | 40% | 80% |
| 0,8 | 50 | 25 | 50 | 67% | 50% |
Ngưỡng thấp bắt nhiều ca hơn nhưng nhiều báo động giả. Ngưỡng cao thì ngược lại.
Chọn ngưỡng theo chi phí:
Chi phí = FP × chi phí báo động giả + FN × chi phí bỏ sótTính cho từng ngưỡng và chọn ngưỡng có chi phí thấp nhất. Đây là quyết định kinh doanh, không phải kỹ thuật.
ROC-AUC và PR-AUC
ROC-AUC đo khả năng xếp hạng: xác suất một ca dương ngẫu nhiên được cho điểm cao hơn một ca âm ngẫu nhiên. 0,5 là ngẫu nhiên, 1,0 là hoàn hảo.
PR-AUC là diện tích dưới đường precision-recall, tập trung vào lớp dương.
Với dữ liệu rất mất cân bằng (ví dụ 1% dương), ROC-AUC có thể đạt 0,9 trong khi mô hình vẫn tạo ra quá nhiều báo động giả. PR-AUC phản ánh đúng hơn.
from sklearn.metrics import (
average_precision_score,
precision_recall_fscore_support,
roc_auc_score,
)
print("ROC-AUC:", round(roc_auc_score(y_test, proba), 3))
print("PR-AUC: ", round(average_precision_score(y_test, proba), 3))
precision, recall, f1, _ = precision_recall_fscore_support(
y_test, pred, average="binary"
)
print(precision, recall, f1)Đường cong precision-recall
Vẽ precision và recall theo ngưỡng để thấy đánh đổi:
import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve
precision, recall, thresholds = precision_recall_curve(y_test, proba)
plt.plot(recall, precision)
plt.xlabel("Recall")
plt.ylabel("Precision")
plt.title("Đường cong precision-recall")
plt.show()Đường cong càng gần góc trên phải càng tốt. So sánh hai mô hình bằng hình dạng đường, không chỉ bằng một con số.
Chọn độ đo cho bài toán thực tế
| Tình huống | Độ đo chính | Lý do |
|---|---|---|
| Ưu đãi giữ chân | Precision | Mỗi ưu đãi tốn tiền |
| Phát hiện gian lận | Recall | Bỏ sót tốn nhiều hơn |
| Xếp hạng nội dung | ROC-AUC hoặc NDCG | Cần thứ tự đúng |
| Dự đoán bệnh | Recall, sau đó precision | Bỏ sót nguy hiểm |
| Báo cáo tổng hợp | F1 | Cân bằng hai phía |
Lỗi thường gặp
- Dùng accuracy làm độ đo chính: che mất lớp thiểu số.
- Chỉ báo một con số: precision 90% mà recall 10% vẫn là mô hình tệ.
- Chọn ngưỡng 0,5 mặc định: hiếm khi tối ưu theo chi phí.
- So sánh ROC-AUC giữa hai bộ dữ liệu có tỷ lệ lớp khác nhau: không cùng cơ sở.
- Tối ưu trên test: điểm cuối không còn đáng tin.
- Bỏ qua chi phí thực: ngưỡng đẹp trên giấy, lỗ trong kinh doanh.
Thực hành
- Tính bốn độ đo từ ma trận ví dụ.
- Tính chi phí tại ba ngưỡng với chi phí giả định.
- Vẽ đường cong precision-recall.
- So sánh ROC-AUC và PR-AUC trên dữ liệu mất cân bằng.
- Chọn ngưỡng cho bài toán gửi ưu đãi.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân | Cách sửa |
|---|---|---|
| Accuracy 95%, không bắt được ca nào | Mất cân bằng | Xem recall, PR-AUC |
| Precision cao, recall thấp | Ngưỡng quá cao | Hạ ngưỡng |
| Nhiều báo động giả | Ngưỡng quá thấp | Nâng hoặc dùng chi phí |
| ROC-AUC cao, thực tế kém | Mất cân bằng nặng | Dùng PR-AUC |
| Điểm khác nhau giữa các lần | Ngưỡng không cố định | Ghi lại ngưỡng |
Tóm tắt
- Mọi độ đo đến từ bốn ô của ma trận nhầm lẫn.
- Precision hỏi "báo động có đúng không"; recall hỏi "bắt được bao nhiêu".
- Accuracy vô dụng khi lớp mất cân bằng.
- Ngưỡng là quyết định kinh doanh dựa trên chi phí.
- Với mất cân bằng nặng, ưu tiên PR-AUC hơn ROC-AUC.
Dùng ← → để chuyển bài