Receiver Operating Characteristic (ROC) Curve
Đường cong đặc trưng hoạt động của bộ thu (ROC) biểu diễn tỷ lệ dương tính thật theo tỷ lệ dương tính giả tại mọi ngưỡng. Tìm hiểu cách đọc đường cong, AUC và mã nguồn.
Đường cong đặc tính hoạt động của bộ thu (ROC) là biểu đồ thể hiện khả năng phân tách hai lớp của bộ phân loại nhị phân ở mọi ngưỡng quyết định có thể. Đường cong biểu diễn tỷ lệ dương tính thật trên trục y so với tỷ lệ dương tính giả trên trục x, với một điểm cho mỗi ngưỡng áp dụng lên điểm số của model, nhờ đó một biểu đồ duy nhất thể hiện mọi sự đánh đổi giữa phát hiện ca dương tính và tạo báo động giả. Diện tích dưới đường cong, tức diện tích dưới đường cong (AUC), cô đọng biểu đồ đó thành một con số không phụ thuộc ngưỡng. Tên gọi bắt nguồn từ kỹ thuật radar trong Thế chiến II, khi chỉ số này đo khả năng phân biệt máy bay địch với nhiễu của các nhân viên vận hành bộ thu radar; sau đó phương pháp được ứng dụng rộng rãi trong y học, tâm lý học và machine learning (ML).
Cách xây dựng đường cong ROC#
Mỗi điểm trên đường cong được tạo từ một ma trận nhầm lẫn tính ở một ngưỡng:
- Tỷ lệ dương tính thật (TPR), còn gọi là recall hoặc độ nhạy: TP / (TP + FN), tỷ lệ các trường hợp dương tính thực tế được model gắn cờ.
- Tỷ lệ dương tính giả (FPR): FP / (FP + TN), tỷ lệ các trường hợp âm tính thực tế bị gắn cờ nhầm. FPR bằng 1 trừ độ đặc hiệu.
Quét ngưỡng từ cao xuống thấp sẽ vẽ đường cong từ (0, 0), khi không có gì bị gắn cờ, đến (1, 1), khi mọi thứ đều bị gắn cờ. Bộ phân loại xếp hạng mọi trường hợp dương tính cao hơn mọi trường hợp âm tính sẽ đi qua góc trên bên trái; model đoán ngẫu nhiên sẽ đi theo đường chéo, còn đường cong nằm dưới đường chéo cho thấy điểm số bị đảo ngược. AUC bằng xác suất một trường hợp dương tính được chọn ngẫu nhiên nhận điểm cao hơn một trường hợp âm tính được chọn ngẫu nhiên, vì vậy 0.5 tương ứng với ngẫu nhiên và 1.0 là phân tách hoàn hảo. Việc xây dựng đường cong đòi hỏi điểm số liên tục, chẳng hạn xác suất dự đoán hoặc giá trị độ tin cậy, vì nhãn 0/1 cứng chỉ cho một điểm duy nhất. Ví dụ sau huấn luyện bộ phân loại hồi quy logistic trên tập dữ liệu mất cân bằng và tính đường cong bằng roc_curve của scikit-learn:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, roc_curve
from sklearn.model_selection import train_test_split
# Binary task where 10% of samples are positive
X, y = make_classification(n_samples=5000, weights=[0.9], class_sep=0.8, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
# ROC analysis needs continuous scores, not hard 0/1 predictions
scores = LogisticRegression().fit(X_train, y_train).predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, scores)
print(f"AUC: {roc_auc_score(y_test, scores):.3f}")
# Each threshold is one point on the curve: higher recall costs more false alarms
for target in (0.80, 0.95):
i = np.argmax(tpr >= target) # first point that reaches the target TPR
print(f"Threshold {thresholds[i]:.2f}: TPR {tpr[i]:.2f}, FPR {fpr[i]:.2f}")Model đạt AUC 0.963. Ở ngưỡng 0.44, model tìm được 82% trường hợp dương tính với FPR là 0.01; để đạt recall 95%, cần hạ ngưỡng xuống 0.02, khi đó FPR tăng vọt lên 0.26. Trên tập kiểm thử này gồm 130 trường hợp dương tính và 1.120 trường hợp âm tính, việc phát hiện thêm 18 trường hợp dương tính phải trả giá bằng 279 báo động giả.
Lựa chọn điểm vận hành#
Đường cong cho thấy chi phí của từng ngưỡng, còn ứng dụng quyết định mức chi phí nào có thể chấp nhận:
- Sàng lọc y tế: Bỏ sót một khối u gây hậu quả nghiêm trọng hơn nhiều so với chụp kiểm tra tiếp theo, vì vậy công cụ sàng lọc hoạt động ở điểm TPR cao và chấp nhận nhiều dương tính giả hơn để bác sĩ chẩn đoán hình ảnh xem xét.
- Phát hiện gian lận: Mỗi khoản thanh toán hợp lệ bị chặn đều gây phiền hà cho khách hàng, vì vậy ngân hàng chọn điểm phát hiện phần lớn giao dịch gian lận trong khi giữ FPR ở mức mà đội ngũ xét duyệt và khách hàng có thể chấp nhận.
- Chi phí bằng nhau: Khi cả hai loại lỗi có chi phí như nhau, thống kê J của Youden, bằng TPR trừ FPR, chọn điểm xa đường chéo nhất về phía trên.
Các model phân loại Ultralytics YOLO26 trả về xác suất cho mọi lớp trong results[0].probs.data, tức các điểm số liên tục cần thiết cho phân tích ROC; do đó, thu thập xác suất của một lớp trên tập xác thực đã gắn nhãn sẽ tạo ra đường cong ROC một-với-phần-còn-lại cho lớp đó và một ngưỡng được chọn dựa trên chi phí triển khai.
Đường cong ROC và các công cụ liên quan#
Đường cong precision-recall biểu diễn precision theo recall thay vì TPR theo FPR. Vì TPR và FPR đều được tính trong phạm vi từng lớp, đường cong ROC giữ nguyên khi tỷ lệ trường hợp dương tính giảm, còn precision thì giảm. Khi trường hợp dương tính hiếm, như trong sàng lọc gian lận hoặc phát hiện bất thường, FPR nhỏ vẫn có thể tạo ra số báo động giả nhiều hơn số phát hiện đúng; một nghiên cứu trên PLOS ONE về tập dữ liệu mất cân bằng nhận thấy biểu đồ precision-recall hữu ích hơn trong trường hợp đó. Phát hiện đối tượng được đánh giá bằng đường cong precision-recall và độ chính xác trung bình (mAP) vì lý do tương tự: các vùng nền được tính là âm tính thật không có giới hạn, nên FPR không có mẫu số cố định.
- Độ chính xác và điểm F1: Các con số đơn lẻ được đo ở một ngưỡng, trong khi đường cong ROC và AUC của đường cong tóm tắt mọi ngưỡng.
- Phân loại ảnh nhiều lớp: Mỗi lớp có một đường cong ROC một-với-phần-còn-lại, và các AUC của từng lớp được tính trung bình thành điểm macro hoặc điểm có trọng số theo tỷ lệ xuất hiện;
roc_auc_scorecủa scikit-learn thực hiện việc này bằngmulti_class="ovr".










