Trong lĩnh vực học máy (machine learning), đặc biệt với các mô hình phân loại, chúng ta thường đánh giá hiệu suất của mô hình bằng một số chỉ số như Accuracy, Precision, Recall. Tuy nhiên, những con số này được tính dựa trên một cấu trúc nền tảng quan trọng: Confusion Matrix.
Vậy confusion matrix là gì, vì sao nó quan trọng, và làm thế nào để hiểu rõ ý nghĩa từng phần? Bài viết này sẽ giải thích confusion matrix một cách dễ hiểu nhất, kèm ví dụ cụ thể, hình ảnh minh họa, và cả công thức tính từng chỉ số quan trọng.
Confusion matrix là gì?
Confusion matrix (ma trận nhầm lẫn) là một bảng biểu dùng để mô tả hiệu suất của mô hình phân loại. Nó cho thấy chi tiết mô hình đã dự đoán đúng – sai như thế nào trên từng lớp cụ thể.
Cấu trúc cơ bản (Phân loại nhị phân)
Khi bài toán phân loại có 2 lớp (ví dụ: Spam vs Không Spam), confusion matrix là một bảng 2×2 như sau:
| Dự đoán: Có | Dự đoán: Không | |
|---|---|---|
| Thực tế: Có | TP (True Positive) | FN (False Negative) |
| Thực tế: Không | FP (False Positive) | TN (True Negative) |
Ý nghĩa từng ô:
- TP: Mô hình dự đoán đúng trường hợp có (ví dụ: đúng là spam)
- TN: Dự đoán đúng trường hợp không (ví dụ: không spam)
- FP: Dự đoán nhầm là có, thực tế là không (gây báo động giả)
- FN: Dự đoán nhầm là không, trong khi thực tế là có (bỏ sót)
Ví dụ minh họa confusion matrix
Giả sử bạn xây mô hình phát hiện email spam. Có 100 email:
- 60 là spam
- 40 là không spam
Mô hình dự đoán như sau:
| Dự đoán: Spam | Dự đoán: Không Spam | |
| Thực tế: Spam (60) | 50 (TP) | 10 (FN) |
| Thực tế: Không Spam (40) | 5 (FP) | 35 (TN) |
Từ đó bạn dễ dàng phân tích hiệu suất mô hình một cách trực quan, thay vì chỉ dựa vào con số accuracy.
Các chỉ số quan trọng từ confusion matrix
Từ confusion matrix, ta có thể tính được nhiều chỉ số đánh giá mô hình:
Accuracy (Độ chính xác tổng thể)
Accuracy = (TP + TN) / (TP + TN + FP + FN)
Là tỷ lệ phần trăm mô hình dự đoán đúng.
→ Ví dụ: (50 + 35) / 100 = 85%
Precision (Độ chính xác khi dự đoán có)
Precision = TP / (TP + FP)
Cho biết trong tất cả những lần mô hình dự đoán là spam, bao nhiêu là thật sự spam.
→ Ví dụ: 50 / (50 + 5) = 90.9%
Recall (Độ bao phủ)
Recall = TP / (TP + FN)
Trong tất cả email thật sự là spam, mô hình bắt được bao nhiêu.
→ Ví dụ: 50 / (50 + 10) = 83.3%
F1-Score (Cân bằng precision & recall)
F1 = 2 * (Precision * Recall) / (Precision + Recall)
→ Kết quả: ~87%
F1 rất hữu ích khi bạn muốn cân bằng giữa việc không bỏ sót và không cảnh báo nhầm.
Khi nào dùng chỉ số nào?
| Tình huống cần cân nhắc | Ưu tiên dùng chỉ số |
| Muốn tránh báo động giả (false alarm) | Precision |
| Muốn phát hiện đầy đủ (không bỏ sót) | Recall |
| Cân bằng cả 2 | F1-Score |
| Đánh giá tổng thể | Accuracy |
Confusion matrix cho bài toán nhiều lớp (multiclass)
Khi mô hình phân loại hơn 2 lớp (ví dụ: phân loại cảm xúc thành [Vui, Buồn, Giận]), confusion matrix mở rộng thành ma trận NxN:
| Dự đoán: Vui | Dự đoán: Buồn | Dự đoán: Giận | |
| Thực tế: Vui | 30 | 5 | 2 |
| Thực tế: Buồn | 3 | 40 | 4 |
| Thực tế: Giận | 1 | 6 | 35 |
Cách tính precision, recall vẫn tương tự cho từng lớp. Các thư viện như scikit-learn hỗ trợ tính trung bình (macro, micro, weighted) để đánh giá toàn bộ mô hình.
Cách vẽ confusion matrix bằng Python
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier # Ví dụ đơn giản: X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) model = RandomForestClassifier().fit(X_train, y_train) y_pred = model.predict(X_test) cm = confusion_matrix(y_test, y_pred) disp = ConfusionMatrixDisplay(confusion_matrix=cm) disp.plot()
Kết luận
Confusion matrix là công cụ cốt lõi giúp bạn đánh giá hiệu quả của mọi mô hình phân loại – từ đơn giản đến phức tạp. Nó cho bạn cái nhìn sâu hơn ngoài accuracy, giúp hiểu rõ mô hình sai ở đâu, sai kiểu gì, và làm thế nào để cải thiện.
Việc thành thạo confusion matrix cũng là chìa khóa để hiểu và trình bày kết quả mô hình một cách thuyết phục, đặc biệt trong các báo cáo kỹ thuật, nghiên cứu hay khi xây dựng mô hình AI thực tế.
Bạn có thể mở rộng việc áp dụng confusion matrix cho bài toán phân loại cảm xúc, phân loại bình luận tích cực/tiêu cực, phát hiện gian lận, phân loại ảnh… và dễ dàng đánh giá mô hình theo từng tiêu chí mong muốn.
Nếu bạn cần một bài viết hướng dẫn xây dựng hệ thống phân loại và visualization confusion matrix bằng Streamlit hoặc FastAPI, mình sẵn sàng viết tiếp.

