Một mô hình machine learning có độ chính xác 98% nghe thật ấn tượng–nhưng có đúng vậy không? Khi bạn xử lý các sự kiện hiếm như gian lận hay bệnh tật, độ chính xác thường tạo ra cảm giác an toàn giả tạo.
Đó là lúc precision và recall phát huy tác dụng. Trong bài viết này, chúng ta sẽ xem cách hai chỉ số này vượt ra ngoài độ chính xác đơn thuần để đo không chỉ tần suất bạn dự đoán đúng, mà còn chính xác là bạn sai như thế nào.
Nếu bạn muốn vượt qua lý thuyết và làm chủ phân loại, khóa học Fraud Detection in Python là bước tiếp theo hoàn hảo.
Vì sao độ chính xác là chưa đủ
Trong hầu hết tình huống, độ chính xác là chỉ số tự nhiên để đo lường mức độ một mô hình thống kê hoặc machine learning dự đoán nhãn tốt đến đâu. Nó được tính bằng cách so sánh số trường hợp dự đoán đúng với tổng số quan sát.
Nói chung, nếu một mô hình liên tục xác định nhãn đúng với độ chính xác cao, nó hoạt động tốt. Tuy nhiên, các tập dữ liệu mất cân bằng, trong đó một lớp có nhiều mẫu vượt trội so với lớp còn lại, làm sai lệch độ chính xác. Những tập dữ liệu như vậy rất phổ biến trong phát hiện gian lận hoặc chẩn đoán bệnh.
Giả sử một mô hình phân loại gian lận với độ chính xác 98%. Lúc đầu, con số này có vẻ tuyệt vời. Nhưng nếu gian lận chỉ chiếm 2% giao dịch trong tập dữ liệu thì sao? Trong trường hợp này, một mô hình có thể luôn chọn "không gian lận" và vẫn đạt 98% độ chính xác trong khi không bắt được vụ gian lận nào, điều này không phải mục tiêu của chúng ta.
Rõ ràng, những tình huống như vậy đòi hỏi các chỉ số tinh tế hơn. Hai chỉ số thường dùng là precision và recall.
Precision và Recall là gì?
Tóm tắt ngắn gọn:
Precision (Chất lượng): Đo mức độ đáng tin cậy của các dự đoán dương tính. Nếu mô hình nói "gian lận", thì có thực sự là gian lận không?
Recall (Số lượng): Đo mức độ bạn bao phủ các trường hợp dương tính thực sự. Mô hình có bắt được hết gian lận không, hay có trường hợp lọt lưới?
Để hiểu cách tính các chỉ số này, trước hết chúng ta cần định nghĩa thuật ngữ dùng trong ma trận nhầm lẫn.
Dương tính thật, dương tính giả, và âm tính
Xem xét một công ty thẻ tín dụng sử dụng mô hình machine learning để phát hiện giao dịch gian lận. Giả sử trong mẫu 10.000 giao dịch, có 9.800 giao dịch hợp lệ và 200 trường hợp gian lận.
Để đo hiệu quả của mô hình, hãy chỉ định một trong hai nhãn "gian lận" hoặc "không gian lận" là trường hợp dương tính và nhãn còn lại là âm tính. Vì các trường hợp gian lận là mối quan tâm, hãy gán chúng là "dương tính". (Điều này dĩ nhiên không ngụ ý gian lận là tích cực về mặt đạo đức; nhãn “dương tính” chỉ cho biết ta quan tâm đến trường hợp nào.)
Khi mô hình chạy, các giao dịch có điểm rủi ro trên một ngưỡng xác suất nhất định, giả sử 70%, được coi là gian lận. Các trường hợp được dự đoán là gian lận sẽ được so sánh với các trường hợp thực sự là gian lận.
Để sắp xếp dữ liệu này rõ ràng, chúng ta dùng cách gọi tên sau.
Dương tính thật (TP): 160 trường hợp gian lận được dự đoán đúng là gian lận.
Âm tính thật (TN): 9500 trường hợp được xác định đúng là không gian lận.
Dương tính giả (FP): 300 trường hợp bị gắn cờ nhầm là gian lận.
Âm tính giả (FN): 40 trường hợp bị gán nhầm là không gian lận.
Chữ cái thứ hai (P hoặc N) cho biết dự đoán là dương hay âm, và chữ cái đầu cho biết dự đoán đó đúng (T) hay sai (F).
"Dương tính giả" nghĩa là hệ thống dự đoán trường hợp là dương tính nhưng thực tế là âm tính. Chẳng hạn, âm tính giả là trường hợp được dự đoán âm tính nhưng thực tế là dương tính.
Ma trận nhầm lẫn
Tất cả thông tin này thường được hiển thị trong ma trận nhầm lẫn, nơi theo dõi tần suất mô hình nhầm lẫn dự đoán sai với kết quả thực (FN, FP). Ma trận nhầm lẫn giúp ta phân biệt giữa những gì mô hình dự đoán và điều thực sự xảy ra. Ma trận của ví dụ của chúng ta như sau:
Gian lận thực (dương tính thực)
Hợp lệ thực (âm tính thực)
Dự đoán gian lận (dương tính dự đoán)
160 (TP)
300 (FP)
Dự đoán hợp lệ (âm tính dự đoán)
40 (FN)
9500 (TN)
Bây giờ, hãy xem tổng theo hàng và cột. Tổng hàng cho biết tổng số trường hợp dự đoán, và tổng cột cho biết tổng số trường hợp thực.
Gian lận thực (dương tính thực)
Hợp lệ thực (âm tính thực)
Dự đoán gian lận (dương tính dự đoán)
160 (TP)
300 (FP)
460 (TP + FP) Tổng dương tính dự đoán
Dự đoán hợp lệ (âm tính dự đoán)
40 (FN)
9500 (TN)
9540 (FN + TN) Tổng âm tính dự đoán
200 (TP + FN) Tổng dương tính thực
9800 (FP + TN) Tổng âm tính thực
10,000
Như vậy các tổng này biểu thị điều gì?
Tổng hàng đầu tiên (460) biểu thị tổng số trường hợp dự đoán gian lận (TP + FP).
Tổng hàng thứ hai (9.540) biểu thị tổng số trường hợp dự đoán hợp lệ (FN + TN).
Tổng cột đầu tiên (200) biểu thị tổng số trường hợp gian lận thực (TP + FN).
Tổng cột thứ hai (9.800) biểu thị tổng số trường hợp hợp lệ thực (FP + TN).
Tổng cộng (10.000) bằng kích thước mẫu của chúng ta.
Precision là gì?
Precision đo chất lượng dự đoán dương tính. Nó cho biết có bao nhiêu trường hợp được dự đoán là dương tính thực sự là dương tính.
Một mô hình có precision cao nghĩa là rất ít báo động nhầm. Nếu mô hình nói điều gì đó là đúng, thì khả năng cao là đúng. Ví dụ, nếu một trò chơi trực tuyến cấm người chơi vì gian lận, việc đó cần phải đúng. Quá nhiều lệnh cấm oan sẽ làm người dùng hợp lệ xa lánh và dẫn đến đánh giá tiêu cực.
Theo thuật ngữ ở trên, precision bằng tỷ lệ giữa dương tính thật trên dương tính dự đoán.
Trong ví dụ trên, precision là 160/460, khoảng 34,8%.
Recall là gì?
Recall đo mức độ bao phủ. Nó cho thấy có bao nhiêu trường hợp dương tính thực sự được dự đoán đúng. Được định nghĩa là tỷ lệ giữa dương tính thật trên tổng dương tính thực.
Hãy xét chẩn đoán ung thư cho bước theo dõi ban đầu. Nên thiên về chẩn đoán quá mức hay thiếu chẩn đoán? Đa số sẽ đồng ý với phương án đầu.
Với sàng lọc sớm, nhận cảnh báo nhầm có thể gây sốc. Nhưng việc được thông báo bạn không mắc ung thư trong khi thực tế có, đặc biệt có thể bỏ lỡ điều trị cứu mạng, là thảm họa.
Trong ví dụ trên, recall là 160/200, tức 80%.
Sự đánh đổi giữa Precision và Recall
Giữa precision và recall tồn tại mối quan hệ kéo co. Thông thường, khi precision tăng thì recall giảm, và ngược lại.
Để thấy vì sao, hãy quay lại ví dụ gian lận.
Phần lớn gian lận đã bị bắt, nhưng có nhiều dương tính giả. Giả sử do khiếu nại của khách hàng, ban quản lý quyết định tăng ngưỡng quyết định từ 0,7 lên 0,8. Để một giao dịch bị gắn cờ là gian lận, giờ đây nó phải có điểm ít nhất 0,8 thay vì 0,7.
Điều này làm mô hình thận trọng hơn. Nó dự đoán gian lận ít hơn. Ít giao dịch bị gắn cờ nhầm là gian lận hơn, nhưng phải trả giá bằng việc nhiều trường hợp gian lận thực sự lọt lưới hơn. Sau khi đổi ngưỡng, số dương tính giả giảm từ 300 xuống 60, nhưng số âm tính giả tăng từ 40 lên 80.
Ma trận nhầm lẫn của mô hình mới như sau:
Gian lận thực (dương tính thực)
Hợp lệ thực (âm tính thực)
Dự đoán gian lận (dương tính dự đoán)
120 (TP)
60 (FP)
180 (TP + FP) Tổng dương tính dự đoán
Dự đoán hợp lệ (âm tính dự đoán)
80 (FN)
9740 (TN)
9820 (FN + TN) Tổng âm tính dự đoán
200 (TP + FN) Tổng dương tính thực
9800 (FP + TN) Tổng âm tính thực
10,000
Như ta thấy, 120 trong số 180 trường hợp dự đoán gian lận thực sự là gian lận, nên precision tăng từ 34,8% lên 66,7%.
Cái giá cho precision tăng là recall giảm: 120 trong 200 trường hợp gian lận được dự đoán đúng, nghĩa là recall giảm từ 80% xuống còn 60%.
Mô hình giờ bắt ít vụ gian lận hơn tổng thể, nhưng khi gắn cờ gian lận thì tự tin hơn nhiều. Điều này cho thấy tầm quan trọng của việc cân bằng cả hai chỉ số, mà ta sẽ bàn ngay sau đây.
Biểu đồ này vẽ precision trên trục y và recall trên trục x cho mọi ngưỡng quyết định có thể (từ 0 đến 1). Khi bạn hạ ngưỡng để thu được nhiều trường hợp dương tính hơn (tăng recall), bạn tất yếu sẽ gắn cờ nhiều cảnh báo nhầm hơn (giảm precision).
Mô hình "hoàn hảo" sẽ chạm góc trên bên phải (100% precision và recall), nhưng trong thực tế, bạn phải chọn một điểm trên đường cong này phù hợp với yêu cầu kinh doanh cụ thể.
Trong ví dụ gian lận, chúng ta có một mô hình xuất ra điểm gian lận cho mỗi giao dịch. Nếu điểm của giao dịch ít nhất bằng ngưỡng, thì nó bị gắn cờ gian lận. Khi hạ ngưỡng, ta có nhiều dương tính dự đoán hơn, thường bắt được nhiều dương tính thật hơn (tăng recall) nhưng cũng có nhiều báo động nhầm hơn (giảm precision).
Hãy xem điều này trông như thế nào trong thực tế. Giả sử công ty bạn xử lý 10.000 giao dịch mỗi ngày. Vì tỷ lệ gian lận ước tính là 2%, bạn kỳ vọng 200 giao dịch gian lận mỗi ngày. Cũng giả sử đội vận hành gian lận có thể xem xét 200 giao dịch bị gắn cờ (dương tính dự đoán) mỗi ngày.
Bạn đánh giá vài ngưỡng và thu được kết quả sau:
Với ngưỡng 0,9, có 100 dương tính dự đoán, precision 0,8 (80 gian lận thực, 20 báo động nhầm), và recall 0,4 (bắt 80/200 vụ gian lận). Bạn đang dùng dưới công suất vì chỉ gắn cờ 100/ngày trong khi có thể xem 200/ngày.
Với ngưỡng 0,5, có 500 dương tính dự đoán, precision 0,35 (175 gian lận thực, 325 báo động nhầm), và recall 0,875 (bắt 175/200 vụ). Ở ngưỡng này bạn vượt công suất, vì không thể xem 500 trường hợp bị gắn cờ.
Với ngưỡng 0,7, có 200 dương tính dự đoán, precision 0,6 (120 gian lận thực, 80 báo động nhầm), và recall 0,6 (bắt 120/200 vụ). Có lẽ đây là ngưỡng bạn sẽ dùng, vì tận dụng đủ công suất đồng thời vẫn có recall tương đối 0,6.
Đường cong cho bạn biết mức precision có thể đạt được tại một mức recall nhất định (và ngược lại).
Khi nào dùng Precision so với Recall
Do mối quan hệ đánh đổi giữa precision và recall, chỉ số đúng phụ thuộc vào bài toán cụ thể của bạn.
Khi nào dùng precision
Precision và dương tính giả có quan hệ nghịch. Do đó, một mô hình có precision cao là mô hình phân biệt đúng giữa dương tính thật và dương tính giả. Nó đáng tin cậy.
Tối ưu cho precision khi chi phí của dương tính giả cao. Ví dụ:
Hành động không thể đảo ngược: Hệ thống tư pháp tự động hoặc cấm tài khoản. Buộc tội người vô tội hoặc xóa vĩnh viễn tài khoản do lỗi mô hình (dương tính giả) gây tổn hại không thể khắc phục.
Can thiệp chi phí cao: Khoan dầu hoặc dừng dây chuyền lắp ráp nhà máy. Nếu hành động theo dự đoán dương tính tốn hàng triệu đô la, bạn cần chắc chắn trước khi tiến hành.
Lọc thư rác: Hộp thư email. Thấy email rác (âm tính giả) thì phiền, nhưng mất một email quan trọng vì bị vào mục rác (dương tính giả) thì không chấp nhận được.
Khi nào dùng recall
Tương tự, recall và âm tính giả có quan hệ nghịch. Nhiều âm tính giả dẫn đến recall thấp. Theo đó, một mô hình có recall cao phân biệt đúng giữa dương tính thật và âm tính giả. Nó an toàn.
Nếu quan trọng hơn là không bỏ sót trường hợp thực sự thay vì chấp nhận báo động nhầm, bạn nên ưu tiên recall hơn precision. Ví dụ:
An toàn y tế: Sàng lọc bệnh (ví dụ ung thư hoặc nhiễm trùng huyết). Bỏ sót bệnh nhân có thể gây chết người, trong khi báo động nhầm dẫn đến xét nghiệm thêm, là chi phí chấp nhận được.
An ninh mạng: Phát hiện malware hoặc xâm nhập mạng. Tốt hơn là gắn cờ một vài đăng nhập vô tội là đáng ngờ còn hơn để một hacker lọt vào mà không bị phát hiện.
Chất lượng sản xuất: Phát hiện lỗi. Giao sản phẩm lỗi (âm tính giả) gây rủi ro an toàn và hủy hoại danh tiếng, nên tốt hơn là loại bỏ vài món sát ngưỡng còn hơn để lọt một món hỏng.
Điểm F1 để cân bằng Precision và Recall
Nếu bạn chưa chắc nên tối ưu mô hình cho precision hay recall, hoặc đơn giản muốn tính đến cả hai, bạn có thể tham khảo điểm F1.
Điểm F1 được định nghĩa là trung bình điều hòa của precision và recall, dùng khi bạn muốn hướng đến cân bằng giữa hai chỉ số.
Nếu precision và recall bằng nhau, điểm F1 bằng chính giá trị đó. Tuy nhiên, nếu một trong hai tiến gần về 0, F1 cũng sẽ rất thấp.
Trong ví dụ trên, precision là 66,7% và recall là 60%. Dùng công thức nêu trên, ta được điểm F1 khoảng 63,2%:
Bảng sau so sánh điểm F1 với độ chính xác, precision và recall.
Chỉ số
Câu hỏi trả lời
Khi nào tối ưu theo chỉ số này
Ví dụ
Độ chính xác
"Tổng thể chúng ta đúng thường xuyên đến mức nào?"
Các lớp cân bằng và chi phí FP và FN tương tự nhau.
Phân loại chữ số.
Precision
"Trong tất cả dương tính dự đoán, chúng ta đúng bao nhiêu lần?"
Khi FP đắt đỏ, mang tính trừng phạt, hoặc gây khó chịu cho khách hàng.
Chặn gian lận, cấm người dùng, và can thiệp y tế xâm lấn.
Recall
"Trong tất cả dương tính thực, chúng ta gắn cờ được bao nhiêu?"
Âm tính giả là không thể chấp nhận.
Sàng lọc y tế, phát hiện xâm nhập.
F1
"Cân bằng giữa precision và recall là gì?"
Bạn quan tâm cả hai: dương tính và báo động nhầm.
Chọn mô hình sớm cho các bài toán mất cân bằng.
Tính Precision và Recall trong Python
Có nhiều cách tính precision, recall, và F1-score trong Python. Sau đây, tôi sẽ giới thiệu hai cách: áp dụng trực tiếp công thức và dùng các hàm chuyên dụng trong gói scikit-learn.
Tính precision và recall bằng công thức
Nếu bạn biết các con số trong ma trận nhầm lẫn, bạn có thể dễ dàng tính các chỉ số bằng công thức đã nêu.
Kết quả đầu ra của đoạn mã này khớp với các phép tính trước đó của chúng ta.
Tính precision và recall bằng scikit-learn
Bạn cũng có thể dùng thư viện scikit-learn để tính các chỉ số trực tiếp từ dữ liệu. Trong ví dụ sau, chúng ta mô phỏng y_true và y_predicted. Sau đó tính precision bằng phương thức precision_score(y_true, y_false). Ta tính recall và điểm F1 tương tự. Cuối cùng, chúng ta in kết quả.
import numpy as np
from sklearn.metrics import precision_score, recall_score, f1_score
# Simulate Data (y_true and y_pred)
TP, FP, FN, TN =120,60,80,9740
y_true = np.array(TP *[1]+ FP *[0]+ FN *[1]+ TN *[0])
y_pred = np.array(TP *[1]+ FP *[1]+ FN *[0]+ TN *[0])# Compute metrics with scikit-learn
precision = precision_score(y_true, y_pred, zero_division=0)
recall = recall_score(y_true, y_pred, zero_division=0)
f1 = f1_score(y_true, y_pred, zero_division=0)# Print aligned output using f-strings (no manual spaces, no colon)print(f"{'Precision':<10}{precision:.1%}")print(f"{'Recall':<10}{recall:.1%}")print(f"{'F1':<10}{f1:.1%}")Được hỗ trợ bởi
Như kỳ vọng, các con số này trùng khớp với các phép tính trước đó.
Kết luận
Dù độ chính xác là điểm khởi đầu hữu ích, nó thường che giấu những chi tiết bạn cần để hiểu vì sao mô hình thất bại. Precision và recall cho bạn bức tranh rõ hơn bằng cách buộc bạn nhìn vào sự đánh đổi giữa báo động nhầm và bỏ sót.
Cuối cùng, chọn chỉ số đúng không chỉ là bài toán toán học; đó là quyết định thực tế về loại sai sót nào hệ thống của bạn có thể chấp nhận.
Precision đo chất lượng các dự đoán dương tính. Nó cho biết có bao nhiêu trường hợp được dự đoán là dương tính thực sự là dương tính và được định nghĩa là tỷ lệ giữa dương tính thật trên dương tính dự đoán.
Recall đo mức độ bao phủ. Nó cho thấy có bao nhiêu dương tính thực được dự đoán đúng. Được định nghĩa là tỷ lệ giữa dương tính thật trên tổng dương tính thực.
Tôi nên tối ưu chỉ số nào để giảm dương tính giả?⌄
Precision. Precision thấp cho thấy mô hình gắn quá nhiều mục là dương tính trong khi thực tế không phải.
Tôi nên tối ưu chỉ số nào để giảm âm tính giả?⌄
Recall. Recall thấp cho thấy các dương tính thực bị lọt lưới.
Chỉ số nào quan trọng hơn trong chẩn đoán y khoa?⌄
Recall. Có thể chấp nhận một số báo động nhầm nếu điều đó giúp giảm bớt chẩn đoán bỏ sót.
Chỉ số nào quan trọng hơn trong bộ lọc thư rác?⌄
Precision. Phân loại nhầm email rác thì phiền, nhưng mất một email quan trọng là không thể chấp nhận.
Mark Pedigo, PhD, là một nhà khoa học dữ liệu xuất sắc với chuyên môn về khoa học dữ liệu trong y tế, lập trình và giáo dục. Với bằng Tiến sĩ Toán học, Cử nhân Khoa học Máy tính và Chứng chỉ Chuyên nghiệp về AI, Mark kết hợp hiểu biết kỹ thuật với khả năng giải quyết vấn đề thực tiễn. Sự nghiệp của anh bao gồm các vai trò trong phát hiện gian lận, dự đoán tử vong ở trẻ sơ sinh và dự báo tài chính, cùng với những đóng góp cho phần mềm ước tính chi phí của NASA. Là một nhà giáo dục, anh đã giảng dạy tại DataCamp và Đại học Washington ở St. Louis, đồng thời cố vấn cho các lập trình viên trẻ. Trong thời gian rảnh, Mark thích hoạt động ngoài trời ở Minnesota cùng vợ là Mandy và chú chó Harley, và chơi piano jazz.
Một mô hình machine learning có độ chính xác 98% nghe thật ấn tượng–nhưng có đúng vậy không? Khi bạn xử lý các sự kiện hiếm như gian lận hay bệnh tật, độ chính xác thường tạo ra cảm giác an toàn giả tạo.
Đó là lúc precision và recall phát huy tác dụng. Trong bài viết này, chúng ta sẽ xem cách hai chỉ số này vượt ra ngoài độ chính xác đơn thuần để đo không chỉ tần suất bạn dự đoán đúng, mà còn chính xác là bạn sai như thế nào.
Nếu bạn muốn vượt qua lý thuyết và làm chủ phân loại, khóa học Fraud Detection in Python là bước tiếp theo hoàn hảo.
Vì sao độ chính xác là chưa đủ
Trong hầu hết tình huống, độ chính xác là chỉ số tự nhiên để đo lường mức độ một mô hình thống kê hoặc machine learning dự đoán nhãn tốt đến đâu. Nó được tính bằng cách so sánh số trường hợp dự đoán đúng với tổng số quan sát.
Nói chung, nếu một mô hình liên tục xác định nhãn đúng với độ chính xác cao, nó hoạt động tốt. Tuy nhiên, các tập dữ liệu mất cân bằng, trong đó một lớp có nhiều mẫu vượt trội so với lớp còn lại, làm sai lệch độ chính xác. Những tập dữ liệu như vậy rất phổ biến trong phát hiện gian lận hoặc chẩn đoán bệnh.
Giả sử một mô hình phân loại gian lận với độ chính xác 98%. Lúc đầu, con số này có vẻ tuyệt vời. Nhưng nếu gian lận chỉ chiếm 2% giao dịch trong tập dữ liệu thì sao? Trong trường hợp này, một mô hình có thể luôn chọn "không gian lận" và vẫn đạt 98% độ chính xác trong khi không bắt được vụ gian lận nào, điều này không phải mục tiêu của chúng ta.
Rõ ràng, những tình huống như vậy đòi hỏi các chỉ số tinh tế hơn. Hai chỉ số thường dùng là precision và recall.
Precision và Recall là gì?
Tóm tắt ngắn gọn:
Để hiểu cách tính các chỉ số này, trước hết chúng ta cần định nghĩa thuật ngữ dùng trong ma trận nhầm lẫn.
Dương tính thật, dương tính giả, và âm tính
Xem xét một công ty thẻ tín dụng sử dụng mô hình machine learning để phát hiện giao dịch gian lận. Giả sử trong mẫu 10.000 giao dịch, có 9.800 giao dịch hợp lệ và 200 trường hợp gian lận.
Để đo hiệu quả của mô hình, hãy chỉ định một trong hai nhãn "gian lận" hoặc "không gian lận" là trường hợp dương tính và nhãn còn lại là âm tính. Vì các trường hợp gian lận là mối quan tâm, hãy gán chúng là "dương tính". (Điều này dĩ nhiên không ngụ ý gian lận là tích cực về mặt đạo đức; nhãn “dương tính” chỉ cho biết ta quan tâm đến trường hợp nào.)
Khi mô hình chạy, các giao dịch có điểm rủi ro trên một ngưỡng xác suất nhất định, giả sử 70%, được coi là gian lận. Các trường hợp được dự đoán là gian lận sẽ được so sánh với các trường hợp thực sự là gian lận.
Để sắp xếp dữ liệu này rõ ràng, chúng ta dùng cách gọi tên sau.
Chữ cái thứ hai (P hoặc N) cho biết dự đoán là dương hay âm, và chữ cái đầu cho biết dự đoán đó đúng (T) hay sai (F).
"Dương tính giả" nghĩa là hệ thống dự đoán trường hợp là dương tính nhưng thực tế là âm tính. Chẳng hạn, âm tính giả là trường hợp được dự đoán âm tính nhưng thực tế là dương tính.
Ma trận nhầm lẫn
Tất cả thông tin này thường được hiển thị trong ma trận nhầm lẫn, nơi theo dõi tần suất mô hình nhầm lẫn dự đoán sai với kết quả thực (FN, FP). Ma trận nhầm lẫn giúp ta phân biệt giữa những gì mô hình dự đoán và điều thực sự xảy ra. Ma trận của ví dụ của chúng ta như sau:
Gian lận thực (dương tính thực)
Hợp lệ thực (âm tính thực)
Dự đoán gian lận (dương tính dự đoán)
160 (TP)
300 (FP)
Dự đoán hợp lệ (âm tính dự đoán)
40 (FN)
9500 (TN)
Bây giờ, hãy xem tổng theo hàng và cột. Tổng hàng cho biết tổng số trường hợp dự đoán, và tổng cột cho biết tổng số trường hợp thực.
Gian lận thực (dương tính thực)
Hợp lệ thực (âm tính thực)
Dự đoán gian lận (dương tính dự đoán)
160 (TP)
300 (FP)
460 (TP + FP) Tổng dương tính dự đoán
Dự đoán hợp lệ (âm tính dự đoán)
40 (FN)
9500 (TN)
9540 (FN + TN) Tổng âm tính dự đoán
200 (TP + FN) Tổng dương tính thực
9800 (FP + TN) Tổng âm tính thực
10,000
Như vậy các tổng này biểu thị điều gì?
Precision là gì?
Precision đo chất lượng dự đoán dương tính. Nó cho biết có bao nhiêu trường hợp được dự đoán là dương tính thực sự là dương tính.
Một mô hình có precision cao nghĩa là rất ít báo động nhầm. Nếu mô hình nói điều gì đó là đúng, thì khả năng cao là đúng. Ví dụ, nếu một trò chơi trực tuyến cấm người chơi vì gian lận, việc đó cần phải đúng. Quá nhiều lệnh cấm oan sẽ làm người dùng hợp lệ xa lánh và dẫn đến đánh giá tiêu cực.
Theo thuật ngữ ở trên, precision bằng tỷ lệ giữa dương tính thật trên dương tính dự đoán.
Trong ví dụ trên, precision là 160/460, khoảng 34,8%.
Recall là gì?
Recall đo mức độ bao phủ. Nó cho thấy có bao nhiêu trường hợp dương tính thực sự được dự đoán đúng. Được định nghĩa là tỷ lệ giữa dương tính thật trên tổng dương tính thực.
Hãy xét chẩn đoán ung thư cho bước theo dõi ban đầu. Nên thiên về chẩn đoán quá mức hay thiếu chẩn đoán? Đa số sẽ đồng ý với phương án đầu.
Với sàng lọc sớm, nhận cảnh báo nhầm có thể gây sốc. Nhưng việc được thông báo bạn không mắc ung thư trong khi thực tế có, đặc biệt có thể bỏ lỡ điều trị cứu mạng, là thảm họa.
Trong ví dụ trên, recall là 160/200, tức 80%.
Sự đánh đổi giữa Precision và Recall
Giữa precision và recall tồn tại mối quan hệ kéo co. Thông thường, khi precision tăng thì recall giảm, và ngược lại.
Để thấy vì sao, hãy quay lại ví dụ gian lận.
Phần lớn gian lận đã bị bắt, nhưng có nhiều dương tính giả. Giả sử do khiếu nại của khách hàng, ban quản lý quyết định tăng ngưỡng quyết định từ 0,7 lên 0,8. Để một giao dịch bị gắn cờ là gian lận, giờ đây nó phải có điểm ít nhất 0,8 thay vì 0,7.
Điều này làm mô hình thận trọng hơn. Nó dự đoán gian lận ít hơn. Ít giao dịch bị gắn cờ nhầm là gian lận hơn, nhưng phải trả giá bằng việc nhiều trường hợp gian lận thực sự lọt lưới hơn. Sau khi đổi ngưỡng, số dương tính giả giảm từ 300 xuống 60, nhưng số âm tính giả tăng từ 40 lên 80.
Ma trận nhầm lẫn của mô hình mới như sau:
Gian lận thực (dương tính thực)
Hợp lệ thực (âm tính thực)
Dự đoán gian lận (dương tính dự đoán)
120 (TP)
60 (FP)
180 (TP + FP) Tổng dương tính dự đoán
Dự đoán hợp lệ (âm tính dự đoán)
80 (FN)
9740 (TN)
9820 (FN + TN) Tổng âm tính dự đoán
200 (TP + FN) Tổng dương tính thực
9800 (FP + TN) Tổng âm tính thực
10,000
Như ta thấy, 120 trong số 180 trường hợp dự đoán gian lận thực sự là gian lận, nên precision tăng từ 34,8% lên 66,7%.
Cái giá cho precision tăng là recall giảm: 120 trong 200 trường hợp gian lận được dự đoán đúng, nghĩa là recall giảm từ 80% xuống còn 60%.
Mô hình giờ bắt ít vụ gian lận hơn tổng thể, nhưng khi gắn cờ gian lận thì tự tin hơn nhiều. Điều này cho thấy tầm quan trọng của việc cân bằng cả hai chỉ số, mà ta sẽ bàn ngay sau đây.
Đường cong precision-recall
Để trực quan hóa sự đánh đổi giữa precision và recall, các nhà khoa học dữ liệu dùng đường cong Precision-Recall (PR).
Biểu đồ này vẽ precision trên trục y và recall trên trục x cho mọi ngưỡng quyết định có thể (từ 0 đến 1). Khi bạn hạ ngưỡng để thu được nhiều trường hợp dương tính hơn (tăng recall), bạn tất yếu sẽ gắn cờ nhiều cảnh báo nhầm hơn (giảm precision).
Mô hình "hoàn hảo" sẽ chạm góc trên bên phải (100% precision và recall), nhưng trong thực tế, bạn phải chọn một điểm trên đường cong này phù hợp với yêu cầu kinh doanh cụ thể.
Trong ví dụ gian lận, chúng ta có một mô hình xuất ra điểm gian lận cho mỗi giao dịch. Nếu điểm của giao dịch ít nhất bằng ngưỡng, thì nó bị gắn cờ gian lận. Khi hạ ngưỡng, ta có nhiều dương tính dự đoán hơn, thường bắt được nhiều dương tính thật hơn (tăng recall) nhưng cũng có nhiều báo động nhầm hơn (giảm precision).
Hãy xem điều này trông như thế nào trong thực tế. Giả sử công ty bạn xử lý 10.000 giao dịch mỗi ngày. Vì tỷ lệ gian lận ước tính là 2%, bạn kỳ vọng 200 giao dịch gian lận mỗi ngày. Cũng giả sử đội vận hành gian lận có thể xem xét 200 giao dịch bị gắn cờ (dương tính dự đoán) mỗi ngày.
Bạn đánh giá vài ngưỡng và thu được kết quả sau:
Đường cong cho bạn biết mức precision có thể đạt được tại một mức recall nhất định (và ngược lại).
Khi nào dùng Precision so với Recall
Do mối quan hệ đánh đổi giữa precision và recall, chỉ số đúng phụ thuộc vào bài toán cụ thể của bạn.
Khi nào dùng precision
Precision và dương tính giả có quan hệ nghịch. Do đó, một mô hình có precision cao là mô hình phân biệt đúng giữa dương tính thật và dương tính giả. Nó đáng tin cậy.
Tối ưu cho precision khi chi phí của dương tính giả cao. Ví dụ:
Khi nào dùng recall
Tương tự, recall và âm tính giả có quan hệ nghịch. Nhiều âm tính giả dẫn đến recall thấp. Theo đó, một mô hình có recall cao phân biệt đúng giữa dương tính thật và âm tính giả. Nó an toàn.
Nếu quan trọng hơn là không bỏ sót trường hợp thực sự thay vì chấp nhận báo động nhầm, bạn nên ưu tiên recall hơn precision. Ví dụ:
Điểm F1 để cân bằng Precision và Recall
Nếu bạn chưa chắc nên tối ưu mô hình cho precision hay recall, hoặc đơn giản muốn tính đến cả hai, bạn có thể tham khảo điểm F1.
Điểm F1 được định nghĩa là trung bình điều hòa của precision và recall, dùng khi bạn muốn hướng đến cân bằng giữa hai chỉ số.
Nếu precision và recall bằng nhau, điểm F1 bằng chính giá trị đó. Tuy nhiên, nếu một trong hai tiến gần về 0, F1 cũng sẽ rất thấp.
Trong ví dụ trên, precision là 66,7% và recall là 60%. Dùng công thức nêu trên, ta được điểm F1 khoảng 63,2%:
Bảng sau so sánh điểm F1 với độ chính xác, precision và recall.
Chỉ số
Câu hỏi trả lời
Khi nào tối ưu theo chỉ số này
Ví dụ
Độ chính xác
"Tổng thể chúng ta đúng thường xuyên đến mức nào?"
Các lớp cân bằng và chi phí FP và FN tương tự nhau.
Phân loại chữ số.
Precision
"Trong tất cả dương tính dự đoán, chúng ta đúng bao nhiêu lần?"
Khi FP đắt đỏ, mang tính trừng phạt, hoặc gây khó chịu cho khách hàng.
Chặn gian lận, cấm người dùng, và can thiệp y tế xâm lấn.
Recall
"Trong tất cả dương tính thực, chúng ta gắn cờ được bao nhiêu?"
Âm tính giả là không thể chấp nhận.
Sàng lọc y tế, phát hiện xâm nhập.
F1
"Cân bằng giữa precision và recall là gì?"
Bạn quan tâm cả hai: dương tính và báo động nhầm.
Chọn mô hình sớm cho các bài toán mất cân bằng.
Tính Precision và Recall trong Python
Có nhiều cách tính precision, recall, và F1-score trong Python. Sau đây, tôi sẽ giới thiệu hai cách: áp dụng trực tiếp công thức và dùng các hàm chuyên dụng trong gói
scikit-learn.Tính precision và recall bằng công thức
Nếu bạn biết các con số trong ma trận nhầm lẫn, bạn có thể dễ dàng tính các chỉ số bằng công thức đã nêu.
Kết quả đầu ra của đoạn mã này khớp với các phép tính trước đó của chúng ta.
Tính precision và recall bằng scikit-learn
Bạn cũng có thể dùng thư viện scikit-learn để tính các chỉ số trực tiếp từ dữ liệu. Trong ví dụ sau, chúng ta mô phỏng
y_truevày_predicted. Sau đó tính precision bằng phương thứcprecision_score(y_true, y_false). Ta tính recall và điểm F1 tương tự. Cuối cùng, chúng ta in kết quả.Như kỳ vọng, các con số này trùng khớp với các phép tính trước đó.
Kết luận
Dù độ chính xác là điểm khởi đầu hữu ích, nó thường che giấu những chi tiết bạn cần để hiểu vì sao mô hình thất bại. Precision và recall cho bạn bức tranh rõ hơn bằng cách buộc bạn nhìn vào sự đánh đổi giữa báo động nhầm và bỏ sót.
Cuối cùng, chọn chỉ số đúng không chỉ là bài toán toán học; đó là quyết định thực tế về loại sai sót nào hệ thống của bạn có thể chấp nhận.
Sẵn sàng tự xây dựng mô hình machine learning? Hãy bắt đầu với lộ trình kỹ năng Machine Learning Fundamentals in Python ngay hôm nay!