Điểm F1 trong Học máy: Chỉ số cân bằng giữa Precision và Recall
Hiểu cách điểm F1 đánh giá hiệu năng mô hình bằng cách kết hợp precision và recall. Tìm hiểu cách dùng trong phân loại nhị phân và đa lớp, kèm ví dụ Python.
Khi xây dựng các mô hình ứng dụng ML, việc đánh giá hiệu năng mô hình quan trọng không kém quá trình huấn luyện. Tuy accuracy thường là chỉ số mặc định, nhưng nó có thể gây hiểu nhầm, đặc biệt với các tập dữ liệu mất cân bằng khi một lớp chiếm ưu thế.
Điểm F1 là trung bình điều hòa của precision và recall. Nó cân bằng đánh đổi giữa dương tính giả và âm tính giả, đồng thời cung cấp thước đo chính xác hơn về hiệu năng mô hình.
Trong các ứng dụng như phát hiện gian lận, chẩn đoán y khoa, lọc thư rác và phát hiện lỗi, chỉ số accuracy là chưa đủ để phản ánh đầy đủ. Một mô hình có thể đạt accuracy cao, nhưng nếu không phát hiện được các trường hợp hiếm nhưng quan trọng, nó có thể gây hại nhiều hơn lợi. Điểm F1 giúp bao quát rủi ro này. Nếu bạn còn mới với các chỉ số đánh giá, bạn có thể tìm hiểu những kiến thức cơ bản trong Machine Learning Fundamentals in Python trước khi tiếp tục.
Điểm F1 là gì?
Điểm F1 đo lường sự cân bằng giữa precision và recall của một mô hình. Chỉ số này nằm trong khoảng 0 đến 1, trong đó 1 biểu thị precision và recall hoàn hảo, còn 0 ngụ ý hiệu năng kém.
Precision cho biết trong tất cả dự đoán dương tính của mô hình, có bao nhiêu là đúng.
Recall giúp phân tích trong tất cả các trường hợp dương tính thực sự, mô hình phân loại đúng được bao nhiêu.
Điểm F1 kết hợp cả hai thành một con số duy nhất, phạt các mô hình chỉ tốt ở một phía mà kém ở phía còn lại. Ví dụ, một mô hình có recall rất tốt nhưng precision thấp có thể nhặt đúng tất cả trường hợp dương tính, nhưng lại tạo ra quá nhiều dương tính giả. F1 đảm bảo cả hai khía cạnh được xét đồng thời.
Công thức điểm F1 và giải thích
Công thức điểm F1 là:
Trong đó precision được định nghĩa như sau:
Và phương trình cho recall là:
Ở đây, TP = True Positives (dương tính thật), FP = False Positives (dương tính giả), và FN = False Negatives (âm tính giả).
Trung bình điều hòa được dùng thay cho trung bình cộng vì trung bình điều hòa phạt mạnh các chênh lệch lớn. Khi precision cao nhưng recall thấp (hoặc ngược lại), điểm F1 sẽ giảm đáng kể, phản ánh sự mất cân bằng.
F1 so với Accuracy
Accuracy xác định số dự đoán đúng trên tổng số dự đoán:
Mặc dù hữu ích với các tập cân bằng lớp, accuracy gây hiểu nhầm trong các bài toán mất cân bằng lớp.
Ví dụ:
Nếu một hệ thống lọc thư rác có 90% thư rác và 10% thư không rác, một bộ phân loại ngây thơ gán tất cả email là "spam" sẽ đạt accuracy 90% nhưng không bao giờ phân loại đúng thư không rác. Điều đó không hữu ích trong thực tế.
Ở đây, F1 chính xác hơn vì tính đến chi phí của dương tính giả và âm tính giả, điều mà accuracy không xét đến.
Điểm F1 cho phân loại nhị phân và đa lớp
Phân loại nhị phân
Trong phân loại nhị phân, điểm F1 được tính theo lớp dương tính. Ví dụ, trong xét nghiệm y khoa, lớp dương tính có thể đại diện cho “có bệnh”.
Phân loại đa lớp
Trong các bài toán đa lớp, điểm F1 được mở rộng bằng các phương pháp lấy trung bình:
Phương pháp
Mô tả
Phù hợpvới
Macro
Tính F1 độc lập cho từng lớp rồi lấy trung bình.
Tập dữ liệu cân bằng, coi trọng ngang nhau cho mọi lớp.
Weighted
Lấy trung bình điểm F1 có trọng số theo độ hỗ trợ của lớp (số mẫu mỗi lớp).
Tập dữ liệu mất cân bằng.
Micro
Gộp đóng góp của mọi lớp để tính F1 toàn cục.
Tình huống ưu tiên hiệu năng tổng thể.
Tính linh hoạt này khiến điểm F1 có thể áp dụng cho nhiều bài toán phân loại đa dạng.
Cách tính điểm F1 trong Python
Thư viện scikit-learn cung cấp các hàm đơn giản để tính điểm F1.
Ví dụ phân loại nhị phân
Bắt đầu bằng việc đánh giá một bài toán phân loại nhị phân đơn giản với dự đoán là 0 hoặc 1. Hàm f1_score() tính trực tiếp điểm F1 từ nhãn thực và nhãn dự đoán.
from sklearn.metrics import f1_score
# True labels
y_true =[0,1,1,1,0,1,0,1]# Predicted labels
y_pred =[0,1,0,1,0,1,1,1]# Calculate F1 Scoreprint("F1 Score:",round(f1_score(y_true, y_pred, average='binary'),2))Được hỗ trợ bởi
Tiếp theo, bạn có thể mở rộng cách tiếp cận này cho các bài toán đa lớp, nơi mô hình dự đoán nhiều hơn hai lớp. Tham số average kiểm soát cách tổng hợp điểm F1 giữa các lớp — các tùy chọn phổ biến gồm 'macro', 'micro' và 'weighted'.
Khi tính F1 hoặc Fβ trong phân loại đa lớp hoặc đa nhãn, chúng ta cần quyết định cách lấy trung bình điểm trên các lớp. Tham số average trong scikit-learn cung cấp vài tùy chọn:
Binary dùng cho trường hợp hai lớp. Ta tập trung vào lớp dương tính và tính precision, recall và F1 chủ yếu cho lớp đó.
Micro gộp các đóng góp của mọi lớp rồi lấy trung bình để tính chỉ số trung bình. Trên thực tế, nó cộng tổng dương tính thật, âm tính giả và dương tính giả trên tất cả lớp rồi tính precision, recall và F1 dựa trên các tổng này. Micro-averaging hữu ích để nhìn hiệu năng tổng thể bất kể mất cân bằng lớp.
Macro: Ta tính chỉ số cho từng lớp rồi lấy trung bình không trọng số. Cách này không ưu ái lớp nào nên phù hợp khi mọi lớp quan trọng như nhau, ngay cả khi tập dữ liệu mất cân bằng.
Weighted tương tự macro, nhưng không cho trọng số bằng nhau. Nó gán trọng số theo số lượng trường hợp thật của mỗi lớp. Điều này ngụ ý các lớp lớn đóng góp nhiều hơn vào điểm cuối. Weighted averaging hữu ích khi ta muốn góc nhìn cân bằng mà không bỏ qua phân bố lớp.
Samples: Dùng cho bài toán đa nhãn, nơi một mẫu có thể thuộc nhiều lớp. Ở đây, chỉ số được tính cho từng mẫu rồi lấy trung bình trên tất cả mẫu.
Những lựa chọn lấy trung bình này cho phép chúng ta điều chỉnh điểm F1 hoặc Fβ phù hợp với bối cảnh bài toán. Ví dụ, nếu phân loại bệnh hiếm nơi các lớp thiểu số rất quan trọng, macro hoặc Fβ với β > 1 sẽ phù hợp. Nhưng nếu chúng ta muốn độ chính xác theo lớp đồng đều trên tất cả lớp, micro hoặc weighted sẽ cho cái nhìn tốt hơn.
Với nhu cầu nâng cao, scikit-learn cũng cung cấp fbeta_score(), một tổng quát hóa của F1. Hiểu sâu hơn về những công cụ như vậy nằm trong lộ trình nghề nghiệp Machine Learning Scientist in Python.
Tổng quát hóa điểm F1 với điểm Fβ
Điểm Fβ tổng quát hóa điểm F1 tùy theo việc precision hay recall được ưu tiên hơn:
𝛃 > 1 cho trọng số cao hơn cho recall.
𝛃 < 1 nhấn mạnh nhiều hơn vào precision.
Ví dụ
Điểm F2 áp dụng cho chẩn đoán y khoa, nơi bỏ sót bệnh (âm tính giả) tệ hơn báo động nhầm.
Điểm F0.5 phù hợp hơn trong lọc thư rác, nơi dương tính giả (nhầm email thật) tốn kém hơn.
Tình huống sử dụng: Phát hiện tiểu đường với F1 so với Accuracy
Giả sử một tập dữ liệu y khoa mà chỉ 5% bệnh nhân thực sự mắc tiểu đường. Một mô hình được huấn luyện để phát hiện tiểu đường có thể đạt accuracy 95%. Nhưng mức 95% này có thể dễ dàng đạt được bằng cách luôn dự đoán "không tiểu đường" cho tất cả mọi người, khiến mô hình trở nên vô dụng.
Thay vào đó, hãy dùng điểm F1 để đo lường mô hình.
from sklearn.metrics import f1_score, fbeta_score, confusion_matrix
# Suppose these are results from a diabetes detection model
y_true =[0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1]# true outcomes
y_pred =[0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1]# model predictionsprint("Accuracy:",round((sum([yt == yp for yt, yp inzip(y_true, y_pred)])/len(y_true)),2))print("F1 Score:",round(f1_score(y_true, y_pred),2))print("F2 Score (recall-focused):",round(fbeta_score(y_true, y_pred, beta=2),2))Được hỗ trợ bởi
Accuracy:0.88
F1 Score:0.8
F2 Score (recall-focused):0.71Được hỗ trợ bởi
Vì sao chọn F1 hoặc F2 trong trường hợp này?
Accuracy gây hiểu nhầm do sự mất cân bằng lớp nặng nề.
Điểm F1 đảm bảo cả dương tính giả (phân loại nhầm bệnh nhân bình thường là tiểu đường) và âm tính giả (không chẩn đoán ra tiểu đường) đều được tính đến.
Trong trường hợp này, recall rất giá trị vì bỏ sót chẩn đoán có thể ảnh hưởng lớn đến cuộc sống. Do vậy, điểm F2 phù hợp hơn vì nó cho trọng số cao hơn cho recall.
Điều này cho thấy họ nhà F1 cung cấp thước đo thực tiễn và hữu ích hơn accuracy trong các tình huống lâm sàng.
Điểm chính cần nhớ
Điểm F1 nhắc nhở chúng ta rằng đánh giá mô hình không chỉ là cuộc chơi con số. Thực chất là hiểu rõ những đánh đổi đằng sau mỗi dự đoán. Điều này quan trọng vì trong ứng dụng thực tế, bỏ sót một trường hợp quan trọng có thể để lại hậu quả nghiêm trọng.
Khi bạn tiếp tục xây dựng và tinh chỉnh mô hình, phát triển trực giác về các chỉ số như F1 sẽ giúp bạn đưa ra lựa chọn đánh giá hiệu năng phù hợp với bối cảnh. Để nâng cao kỹ năng áp dụng những khái niệm này trên dữ liệu thực, hãy xem lộ trình nghề nghiệp Machine Learning Scientist with Python, nơi bạn sẽ học cách đánh giá, tinh chỉnh và triển khai mô hình hiệu quả trên nhiều tình huống sử dụng.
Tôi là một Chiến lược gia và Nhà đạo đức học về AI, làm việc tại giao điểm giữa khoa học dữ liệu, sản phẩm và kỹ thuật để xây dựng các hệ thống máy học có khả năng mở rộng. Được xếp hạng trong danh sách “Top 200 Nhà đổi mới trong Kinh doanh và Công nghệ” trên thế giới, tôi theo đuổi sứ mệnh dân chủ hóa máy học và giản lược thuật ngữ chuyên môn để mọi người đều có thể tham gia vào quá trình chuyển đổi này.
Câu hỏi thường gặp
Tầm quan trọng của điểm F1 trong học máy là gì?⌄
Điểm F1 là trung bình điều hòa của precision (bao nhiêu dự đoán dương tính là đúng) và recall (phát hiện được bao nhiêu dương tính thực). Nó cung cấp một chỉ số duy nhất phản ánh cả hai loại sai sót.
Vì sao điểm F1 được ưu tiên hơn accuracy trong các tập dữ liệu mất cân bằng?⌄
Accuracy có thể gây hiểu nhầm khi một lớp chiếm ưu thế trong dữ liệu, vì mô hình có thể dự đoán tốt lớp đa số nhưng thất bại ở lớp thiểu số. Điểm F1 tính đến cả dương tính giả và âm tính giả, nhờ đó đánh giá công bằng hơn trong các trường hợp như vậy.
Sự khác nhau giữa điểm F1 và Fβ là gì?⌄
Điểm F1 cho trọng số ngang nhau cho precision và recall, trong khi điểm Fβ cho phép điều chỉnh cân bằng đó. Ví dụ, F2 ưu tiên recall (hữu ích trong chẩn đoán y khoa), còn F0.5 ưu tiên precision (hữu ích trong phát hiện thư rác).
Giá trị điểm F1 như thế nào là tốt?⌄
Điểm F1 gần 1 cho thấy precision và recall mạnh. "Tốt" hay không còn tùy lĩnh vực. Ví dụ, 0.8 có thể là xuất sắc trong y tế nhưng thấp đối với lọc thư rác.
Làm thế nào để tính điểm F1 trong Python?⌄
Điểm F1 có thể được tính dễ dàng bằng hàm f1_score() của scikit-learn. Nó hỗ trợ bối cảnh nhị phân, đa lớp và đa nhãn với tham số average cho các chiến lược tổng hợp khác nhau.
Khi xây dựng các mô hình ứng dụng ML, việc đánh giá hiệu năng mô hình quan trọng không kém quá trình huấn luyện. Tuy accuracy thường là chỉ số mặc định, nhưng nó có thể gây hiểu nhầm, đặc biệt với các tập dữ liệu mất cân bằng khi một lớp chiếm ưu thế.
Điểm F1 là trung bình điều hòa của precision và recall. Nó cân bằng đánh đổi giữa dương tính giả và âm tính giả, đồng thời cung cấp thước đo chính xác hơn về hiệu năng mô hình.
Trong các ứng dụng như phát hiện gian lận, chẩn đoán y khoa, lọc thư rác và phát hiện lỗi, chỉ số accuracy là chưa đủ để phản ánh đầy đủ. Một mô hình có thể đạt accuracy cao, nhưng nếu không phát hiện được các trường hợp hiếm nhưng quan trọng, nó có thể gây hại nhiều hơn lợi. Điểm F1 giúp bao quát rủi ro này. Nếu bạn còn mới với các chỉ số đánh giá, bạn có thể tìm hiểu những kiến thức cơ bản trong Machine Learning Fundamentals in Python trước khi tiếp tục.
Điểm F1 là gì?
Điểm F1 đo lường sự cân bằng giữa precision và recall của một mô hình. Chỉ số này nằm trong khoảng 0 đến 1, trong đó 1 biểu thị precision và recall hoàn hảo, còn 0 ngụ ý hiệu năng kém.
Điểm F1 kết hợp cả hai thành một con số duy nhất, phạt các mô hình chỉ tốt ở một phía mà kém ở phía còn lại. Ví dụ, một mô hình có recall rất tốt nhưng precision thấp có thể nhặt đúng tất cả trường hợp dương tính, nhưng lại tạo ra quá nhiều dương tính giả. F1 đảm bảo cả hai khía cạnh được xét đồng thời.
Công thức điểm F1 và giải thích
Công thức điểm F1 là:
Trong đó precision được định nghĩa như sau:
Và phương trình cho recall là:
Ở đây, TP = True Positives (dương tính thật), FP = False Positives (dương tính giả), và FN = False Negatives (âm tính giả).
Trung bình điều hòa được dùng thay cho trung bình cộng vì trung bình điều hòa phạt mạnh các chênh lệch lớn. Khi precision cao nhưng recall thấp (hoặc ngược lại), điểm F1 sẽ giảm đáng kể, phản ánh sự mất cân bằng.
F1 so với Accuracy
Accuracy xác định số dự đoán đúng trên tổng số dự đoán:
Mặc dù hữu ích với các tập cân bằng lớp, accuracy gây hiểu nhầm trong các bài toán mất cân bằng lớp.
Ví dụ:
Nếu một hệ thống lọc thư rác có 90% thư rác và 10% thư không rác, một bộ phân loại ngây thơ gán tất cả email là "spam" sẽ đạt accuracy 90% nhưng không bao giờ phân loại đúng thư không rác. Điều đó không hữu ích trong thực tế.
Ở đây, F1 chính xác hơn vì tính đến chi phí của dương tính giả và âm tính giả, điều mà accuracy không xét đến.
Điểm F1 cho phân loại nhị phân và đa lớp
Phân loại nhị phân
Trong phân loại nhị phân, điểm F1 được tính theo lớp dương tính. Ví dụ, trong xét nghiệm y khoa, lớp dương tính có thể đại diện cho “có bệnh”.
Phân loại đa lớp
Trong các bài toán đa lớp, điểm F1 được mở rộng bằng các phương pháp lấy trung bình:
Phương pháp
Mô tả
Phù hợp với
Macro
Tính F1 độc lập cho từng lớp rồi lấy trung bình.
Tập dữ liệu cân bằng, coi trọng ngang nhau cho mọi lớp.
Weighted
Lấy trung bình điểm F1 có trọng số theo độ hỗ trợ của lớp (số mẫu mỗi lớp).
Tập dữ liệu mất cân bằng.
Micro
Gộp đóng góp của mọi lớp để tính F1 toàn cục.
Tình huống ưu tiên hiệu năng tổng thể.
Tính linh hoạt này khiến điểm F1 có thể áp dụng cho nhiều bài toán phân loại đa dạng.
Cách tính điểm F1 trong Python
Thư viện
scikit-learncung cấp các hàm đơn giản để tính điểm F1.Ví dụ phân loại nhị phân
Bắt đầu bằng việc đánh giá một bài toán phân loại nhị phân đơn giản với dự đoán là 0 hoặc 1. Hàm
f1_score()tính trực tiếp điểm F1 từ nhãn thực và nhãn dự đoán.Ví dụ phân loại đa lớp
Tiếp theo, bạn có thể mở rộng cách tiếp cận này cho các bài toán đa lớp, nơi mô hình dự đoán nhiều hơn hai lớp. Tham số
averagekiểm soát cách tổng hợp điểm F1 giữa các lớp — các tùy chọn phổ biến gồm'macro','micro'và'weighted'.Khi tính
F1hoặcFβtrong phân loại đa lớp hoặc đa nhãn, chúng ta cần quyết định cách lấy trung bình điểm trên các lớp. Tham số average trong scikit-learn cung cấp vài tùy chọn:Binary dùng cho trường hợp hai lớp. Ta tập trung vào lớp dương tính và tính
precision,recallvàF1chủ yếu cho lớp đó.Micro gộp các đóng góp của mọi lớp rồi lấy trung bình để tính chỉ số trung bình. Trên thực tế, nó cộng tổng dương tính thật, âm tính giả và dương tính giả trên tất cả lớp rồi tính precision, recall và F1 dựa trên các tổng này. Micro-averaging hữu ích để nhìn hiệu năng tổng thể bất kể mất cân bằng lớp.
Macro: Ta tính chỉ số cho từng lớp rồi lấy trung bình không trọng số. Cách này không ưu ái lớp nào nên phù hợp khi mọi lớp quan trọng như nhau, ngay cả khi tập dữ liệu mất cân bằng.
Weighted tương tự macro, nhưng không cho trọng số bằng nhau. Nó gán trọng số theo số lượng trường hợp thật của mỗi lớp. Điều này ngụ ý các lớp lớn đóng góp nhiều hơn vào điểm cuối. Weighted averaging hữu ích khi ta muốn góc nhìn cân bằng mà không bỏ qua phân bố lớp.
Samples: Dùng cho bài toán đa nhãn, nơi một mẫu có thể thuộc nhiều lớp. Ở đây, chỉ số được tính cho từng mẫu rồi lấy trung bình trên tất cả mẫu.
Những lựa chọn lấy trung bình này cho phép chúng ta điều chỉnh điểm F1 hoặc Fβ phù hợp với bối cảnh bài toán. Ví dụ, nếu phân loại bệnh hiếm nơi các lớp thiểu số rất quan trọng, macro hoặc Fβ với β > 1 sẽ phù hợp. Nhưng nếu chúng ta muốn độ chính xác theo lớp đồng đều trên tất cả lớp, micro hoặc weighted sẽ cho cái nhìn tốt hơn.
Với nhu cầu nâng cao, scikit-learn cũng cung cấp
fbeta_score(), một tổng quát hóa của F1. Hiểu sâu hơn về những công cụ như vậy nằm trong lộ trình nghề nghiệp Machine Learning Scientist in Python.Tổng quát hóa điểm F1 với điểm Fβ
Điểm Fβ tổng quát hóa điểm F1 tùy theo việc precision hay recall được ưu tiên hơn:
Ví dụ
Tình huống sử dụng: Phát hiện tiểu đường với F1 so với Accuracy
Giả sử một tập dữ liệu y khoa mà chỉ 5% bệnh nhân thực sự mắc tiểu đường. Một mô hình được huấn luyện để phát hiện tiểu đường có thể đạt accuracy 95%. Nhưng mức 95% này có thể dễ dàng đạt được bằng cách luôn dự đoán "không tiểu đường" cho tất cả mọi người, khiến mô hình trở nên vô dụng.
Thay vào đó, hãy dùng điểm F1 để đo lường mô hình.
Vì sao chọn F1 hoặc F2 trong trường hợp này?
Trong trường hợp này, recall rất giá trị vì bỏ sót chẩn đoán có thể ảnh hưởng lớn đến cuộc sống. Do vậy, điểm F2 phù hợp hơn vì nó cho trọng số cao hơn cho recall.
Điều này cho thấy họ nhà F1 cung cấp thước đo thực tiễn và hữu ích hơn accuracy trong các tình huống lâm sàng.
Điểm chính cần nhớ
Điểm F1 nhắc nhở chúng ta rằng đánh giá mô hình không chỉ là cuộc chơi con số. Thực chất là hiểu rõ những đánh đổi đằng sau mỗi dự đoán. Điều này quan trọng vì trong ứng dụng thực tế, bỏ sót một trường hợp quan trọng có thể để lại hậu quả nghiêm trọng.
Khi bạn tiếp tục xây dựng và tinh chỉnh mô hình, phát triển trực giác về các chỉ số như F1 sẽ giúp bạn đưa ra lựa chọn đánh giá hiệu năng phù hợp với bối cảnh. Để nâng cao kỹ năng áp dụng những khái niệm này trên dữ liệu thực, hãy xem lộ trình nghề nghiệp Machine Learning Scientist with Python, nơi bạn sẽ học cách đánh giá, tinh chỉnh và triển khai mô hình hiệu quả trên nhiều tình huống sử dụng.