Đánh giá mô hình - confusion matrix, precision, recall, overfitting

Chốt nhánh giám sát: ma trận nhầm lẫn, precision recall và đánh đổi, overfitting, ba phần dữ liệu và đọc kết quả classifiers.
Trung bìnhThuật toán ~60 phút

Giới thiệu

Bài này học đọc ma trận nhầm lẫn và precision recall. Kiến thức này giúp chống overfitting khi triển khai thật.

Kiến thức cần nhớ

Ma trận 4 ô

  • Đúng dương: bắt đúng kẻ cần bắt.
  • Đúng âm: tha đúng người vô tội.
  • Dương giả: báo oan, âm giả: bỏ sót.
  • Ví dụ đời thường: hai máy cùng 90% nhưng sai kiểu khác nhau.

Precision và recall

  • Precision: trong số báo dương, bao nhiêu phần trăm đúng.
  • Recall: trong số dương thật, tóm được bao nhiêu phần trăm.
  • Hạ ngưỡng thì recall lên precision xuống, ngược lại cũng vậy.
  • Ví dụ đời thường: khám bệnh hiểm thì thà báo oan còn hơn bỏ sót.

Overfitting và 3 phần dữ liệu

  • Overfitting: điểm train cao mà điểm mới thấp.
  • Nguyên nhân: mô hình khỏe quá, học quá lâu, nhìn trộm đáp án.
  • Chia train để học, valid để chỉnh, test khóa để báo cáo.
  • Ví dụ đời thường: học thuộc đề cũ nhưng thi đề mới trượt.
Chỉ sốCông thức lờiDùng khi
AccuracyĐường chéo chia tổngLớp cân bằng
PrecisionĐúng dương chia báo dươngSợ báo oan
RecallĐúng dương chia dương thậtSợ bỏ sót

Ví dụ

  • Input: mô hình hoàn hảo -> Output: ma trận chỉ có đường chéo, precision recall bằng 1.
  • Câu này kiểm tra biên giỏi nhất mọi chỉ số.
  • Input: mô hình lười luôn đoán đa số trên dữ liệu 95-5 -> Output: accuracy 95% nhưng recall thiểu số 0.
  • Câu này cho thấy accuracy lừa dối khi lệch lớp.

💻 Bài tập

Ngôn ngữ: Python 3 với NumPy. Không dùng sklearn.metrics trừ khi đối chiếu. Nộp vào day-056/.

Bài 1: Ma trận nhầm lẫn và các chỉ số

HàmYêu cầu
confusion_matrix(y, yhat, labels)Ma trận k x k, hàng là nhãn thật, cột là nhãn đoán
precision(y, yhat, pos), recall(...), f1(...)Mẫu số bằng 0 thì trả 0
macro_f1(y, yhat)Trung bình F1 các lớp
report(y, yhat)In bảng precision, recall, F1, support từng lớp
y    = [1,1,1,0,0,0,0,0]
yhat = [1,1,0,1,0,0,0,0]
-> TP=2, FN=1, FP=1, TN=4; precision=0.667, recall=0.667, f1=0.667

Dữ liệu 95 âm, 5 dương, luôn đoán âm -> accuracy 0.95, recall(dương) = 0

Bài 2: Ngưỡng, ROC và PR

Dùng logistic regression ngày 55 trên bộ Breast Cancer.

  1. Quét ngưỡng từ 0 tới 1 bước 0.01. Vẽ precision và recall theo ngưỡng.
  2. Tự cài roc_curve và auc (quy tắc hình thang). Vẽ ROC.
  3. Chọn ngưỡng sao cho recall lớp ác tính ≥ 0.98. In precision tại ngưỡng đó. Viết 2 câu vì sao bài toán y tế ưu tiên recall.

Bài 3: Overfitting và cross-validation (nâng cao)

  1. Sinh dữ liệu y = sin(x) + nhiễu, 30 điểm. Khớp đa thức bậc 1, 3, 9, 15. Vẽ đường cong và in MSE train/test.
  2. Tự cài k_fold(n, k, seed) và cross_val_score(model, X, y, k). Chọn bậc đa thức bằng 5-fold CV.
  3. Vẽ learning curve: MSE train và validation theo kích thước tập train cho bậc 3 và bậc 15.

✅ Tiêu chí hoàn thành

  • Chỉ số khớp sklearn.metrics với sai số 1e-9.
  • Có hình precision-recall theo ngưỡng và ROC, AUC khớp roc_auc_score.
  • Bảng MSE theo bậc đa thức có số thật.
  • Giải thích được vì sao tập test phải "khóa" tới cuối cùng.

❓ Câu hỏi ôn tập

  • 4 ô ma trận nhầm lẫn là gì?
  • Precision khác recall ở đâu?
  • Overfitting nhận biết qua 2 đường nào?
  • Vì sao phải khóa riêng tập test?

🌕 Bạn đã hoàn thành ngày 56. Làm hết bài tập phía trên rồi sang ngày tiếp theo.

Bớt paste mù, hiểu sâu từng dòng mình viết.

180 Days Challenge. 180 ngày cai nghiện vibe code.