DHDataHọc
TheoryLesson 5/85 min read+10 XP

Độ đ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ươngDự đoán âm
Thực tế dươngTPFN
Thực tế âmFPTN
  • 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ật8020
Không huỷ thật120780
code
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

Độ đoTrả lời câu hỏiKhi nào ưu tiên
PrecisionTrong số báo động, bao nhiêu đúng?Chi phí xử lý dương tính cao
RecallTrong số ca thật, bắt được bao nhiêu?Bỏ sót gây thiệt hại lớn
F1Cân bằng precision và recallCần một con số tổng hợp
AccuracyTổng số đoán đúngChỉ 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ưỡngTPFPFNPrecisionRecall
0,295300524%95%
0,5801202040%80%
0,850255067%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í:

code
Chi phí = FP × chi phí báo động giả + FN × chi phí bỏ sót

Tí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.

code
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:

code
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ínhLý do
Ưu đãi giữ chânPrecisionMỗi ưu đãi tốn tiền
Phát hiện gian lậnRecallBỏ sót tốn nhiều hơn
Xếp hạng nội dungROC-AUC hoặc NDCGCần thứ tự đúng
Dự đoán bệnhRecall, sau đó precisionBỏ sót nguy hiểm
Báo cáo tổng hợpF1Câ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

  1. Tính bốn độ đo từ ma trận ví dụ.
  2. Tính chi phí tại ba ngưỡng với chi phí giả định.
  3. Vẽ đường cong precision-recall.
  4. So sánh ROC-AUC và PR-AUC trên dữ liệu mất cân bằng.
  5. Chọn ngưỡng cho bài toán gửi ưu đãi.

Lỗi thường gặp

Triệu chứngNguyên nhânCách sửa
Accuracy 95%, không bắt được ca nàoMất cân bằngXem recall, PR-AUC
Precision cao, recall thấpNgưỡng quá caoHạ ngưỡng
Nhiều báo động giảNgưỡng quá thấpNâng hoặc dùng chi phí
ROC-AUC cao, thực tế kémMất cân bằng nặngDùng PR-AUC
Điểm khác nhau giữa các lầnNgưỡng không cố địnhGhi 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.

Use ← → to move between lessons