Hướng dẫn dùng confusionmatrix r python - use nhầm lẫn matrix r python

Trong các bài toán phân loại, confusion matrix là một bảng đặc biệt được dùng để minh họa hiệu quả của các thuật toán. Bài viết này sẽ cố gắng hiểu hơn về confusion matrix.confusion matrix là một bảng đặc biệt được dùng để minh họa hiệu quả của các thuật toán. Bài viết này sẽ cố gắng hiểu hơn về confusion matrix.

Nội dung chính

  • Confusion matrix (CM) là gì?
  • Cách nhớ confusion matrix
  • Precision / Recall
  • Precision cao / Recall thấp
  • Precision thấp / Recall cao
  • Tại sao cả Precision và Recall đều quan trọng?
  • Khi nào thì một trong hai precision và recall quan trọng hơn cái còn lại?
  • Tại sao Confusion Matrix lại quan trọng?
  • Tới lượt bạn động não
  • F1-score hữu dụng khi nào?
  • Chọn giá trị cho f1-score?
  • Accuracy và Specificity
  • Tài liệu tham khảo

Nội dung chính

  • Confusion matrix (CM) là gì?
  • Cách nhớ confusion matrix
  • Precision / Recall
  • Precision cao / Recall thấp
  • Precision thấp / Recall cao
  • Tại sao cả Precision và Recall đều quan trọng?
  • Khi nào thì một trong hai precision và recall quan trọng hơn cái còn lại?
  • Tại sao Confusion Matrix lại quan trọng?
  • Tới lượt bạn động não
  • F1-score hữu dụng khi nào?
  • Chọn giá trị cho f1-score?
  • Accuracy và Specificity
  • Tài liệu tham khảo

Confusion matrix (CM) là gì?

Để dễ dàng trong việc hiểu hơn về CM, chúng ta hãy xem xét một ví dụ đơn giản. Giả sử ta cần dự đoán kết quả xét nghiệm của 1005 bệnh nhân xem họ có bị ung thư hay không. Dưới đây là những gì mô hình của chúng ta dự đoán:

  • 90 bệnh nhân bị ung thư và tất cả dự đoán này của chúng ta đều đúng.
  • 915 bệnh nhân không bị ung thư nhưng thật ra có tới 910 người lại bị trong thực tế.

Để dễ dàng minh họa các kết quả ở trên, chúng ta sử dụng confusion matrix như dưới đây (Câu hỏi: Bệnh nhân này có bị bệnh ung thư không?):confusion matrix như dưới đây (Câu hỏi: Bệnh nhân này có bị bệnh ung thư không?):

Thực tế (có) (có) Thực tế (không) (không)
Dự đoán (có) (có) 90 (True Positive) 0 (False Positive)
Dự đoán (không) (không) 910 (False Negative) 5 (True Negative)

Có lẽ nó có tên gọi là “confusion matrix” vì khi đọc thông tin và hiểu thông tin mà nó truyền tải, chúng ta có hơi bối rối (confused) một chut, tôi đùa đấy!

Trong bảng trên, có 4 thuật ngữ ta cần để ý đến:

  • True Positive (TP): những bệnh nhân ta đoán là có bệnh đúng là đang mang bệnh. (TP): những bệnh nhân ta đoán là có bệnh đúng là đang mang bệnh.
  • True Negative (TN): những bệnh nhân ta đoán là không có bệnh đúng là đang khỏe mạnh. (TN): những bệnh nhân ta đoán là không có bệnh đúng là đang khỏe mạnh.
  • False Positive (FP): những bệnh nhân ta đoán là có bệnh thật ra đang khỏe mạnh. (FP): những bệnh nhân ta đoán là có bệnh thật ra đang khỏe mạnh.
  • False Negative (FN): những bệnh nhân ta đoán là không có bệnh thật ra đang mang bệnh. (FN): những bệnh nhân ta đoán là không có bệnh thật ra đang mang bệnh.

Bên dưới là một hình minh họa vui cho chúng ta thêm một ví dụ nữa của CM trong việc dự đoán có thai hay không (nguồn).

Câu hỏi: Người này có đang mang thai không?

Giải thích hình ví dụ vui ở trên

  • True Postive: Rõ ràng trong hình là một phụ nữ có thai vá bác sĩ nói cho cô ấy biết là cô ấy đang có thai. Điều này chứng tỏ dự đoán của bác sĩ là chính xác so với thực tế. Nói cách khác: dự đoán “có” của bác sĩ (Positive) là “đúng” (True).: Rõ ràng trong hình là một phụ nữ có thai vá bác sĩ nói cho cô ấy biết là cô ấy đang có thai. Điều này chứng tỏ dự đoán của bác sĩ là chính xác so với thực tế. Nói cách khác: dự đoán “có” của bác sĩ (Positive) là “đúng” (True).
  • False Negative: Bác sĩ dự đoán chị kia không có thai nhưng thực tế lại có. Đây là một ví dụ của Sai lầm loại II. Nói cách khác: dự đoán “không” của bác sĩ (Negative) là “sai” (False).: Bác sĩ dự đoán chị kia không có thai nhưng thực tế lại có. Đây là một ví dụ của Sai lầm loại II. Nói cách khác: dự đoán “không” của bác sĩ (Negative) là “sai” (False).
  • False Positive: Đàn ông không thể có thai được trong khi bác sĩ lại bảo anh ta có. Đây là Sai lầm loại I. Nói cách khác: dự đoán “có” của bác sĩ (Positive) là “sai” (False).: Đàn ông không thể có thai được trong khi bác sĩ lại bảo anh ta có. Đây là Sai lầm loại I. Nói cách khác: dự đoán “có” của bác sĩ (Positive) là “sai” (False).
  • True Negative: Bác sĩ bảo anh kia không có thai, điều này hiển nhiên đúng. Nói cách khác: dự đoán “không” của bác sĩ (False) là “đúng” (True).: Bác sĩ bảo anh kia không có thai, điều này hiển nhiên đúng. Nói cách khác: dự đoán “không” của bác sĩ (False) là “đúng” (True).

Cách nhớ confusion matrix

Trong bảng trên, lúc thì True, lúc thì False, lúc thì Positive, lúc thì Negative. Vậy làm sao chúng ta có thể nhớ được chính xác cái nào là cái nào và ở vị trí nào trong ma trân trên? Dưới đây là một mánh nhỏ để nhớ dựa vào tên gọi của các thuật ngữ.

  • True/False ý chỉ những gì chúng ta dự đoán đã đúng hay chưa (true or false)./False ý chỉ những gì chúng ta dự đoán đã đúng hay chưa (true or false).
  • Positive/Negative ý chỉ những gì chúng ta dự đoán (có hoặc không)./Negative ý chỉ những gì chúng ta dự đoán (có hoặc không).

Nói khác đi, nếu chúng ta thấy chữ “True”, điều đó nghĩa là tất cả những gì chúng ta dự đoán đều đúng hết cả. Nếu chúng ta dự đoán 90 bệnh nhân có bệnh (TP) thì đúng là trong thực tế 90 bệnh nhân đó đang mang bệnh. Còn nếu chúng ta dự đoán có 5 bệnh nhân không mang bệnh (TN) thì trong thực tế đúng là họ đang rất khỏe mạnh.

Ngược lại, nếu ta thấy chữ “False” có nghĩa là những gì chúng ta dự đoán trật hết. Những bệnh nhân ta đoán là có bệnh thì lại không trong thực tế và ngược lại.

Precision / Recall

Với CM, chúng ta sẽ tính được hai đại lượng quan trọng là Precision và Recall.PrecisionRecall.

Precision: đây là tỷ lệ giữa những người thật sự có bệnh so với tất cả các ca được dự đoán là có bệnh. Nói cách khác, có bao nhiêu dự đoán “positive” là thật sự “true” trong thực tế?: đây là tỷ lệ giữa những người thật sự có bệnh so với tất cả các ca được dự đoán là có bệnh. Nói cách khác, có bao nhiêu dự đoán “positive” là thật sự “true” trong thực tế?

$$\begin{align}\mathrm {precision} = \dfrac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FP}} = \dfrac{90}{90+0} = 100\%.\end{align}$$
\begin{align}
\mathrm {precision} = \dfrac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FP}} = \dfrac{90}{90+0} = 100\%.
\end{align}
$$

Rõ ràng, ta chỉ dự đoán 90 người có bệnh và trong thực tế những người này đúng là đang bị bệnh thât. Vậy ra, 100% số người ta dự đoán có bệnh là chính xác!

Recall (đôi khi còn được gọi là Sensitivity): trong những người thực sự có bệnh, bao nhiêu trong số họ được dự đoán đúng bởi mô hình của chúng ta? Nói cách khác, có bao nhiêu dự đoán “positive” đúng là do mô hình của chúng ta đưa ra? (đôi khi còn được gọi là Sensitivity): trong những người thực sự có bệnh, bao nhiêu trong số họ được dự đoán đúng bởi mô hình của chúng ta? Nói cách khác, có bao nhiêu dự đoán “positive” đúng là do mô hình của chúng ta đưa ra?

$$\begin{align}\mathrm {recall} = \dfrac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FN}} = \dfrac{90}{90+910} = 9\%.\end{align}$$
\begin{align}
\mathrm {recall} = \dfrac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FN}} = \dfrac{90}{90+910} = 9\%.
\end{align}
$$

Rõ ràng, ta chỉ dự đoán 90 người có bệnh trong khi có tới 1000 người trong thực tế mắc bệnh. Vậy ra, mô hình của chúng ta chỉ có thể dự đoán được 9% số lượng người có bệnh trong thực tế.

Bên dưới là confusion matrix sau khi đã thêm vào precision và recall.

Thực tế (có) (có) Thực tế (không) (không)
Dự đoán (có) (có) 90 0 Precision = 100% = 100%
Dự đoán (không) (không) 910 5
Recall = 9% = 9%

Chúng ta có thể hiểu gì về Precision và Recall? Nếu một trong hai cái này có giá trị cao còn cái kia có giá trị thấp (hoặc ngược lại) thì sao? Ý nghĩa của chúng như thế nào?

Precision cao / Recall thấp

Nhìn lại ví dụ ở bảng trên, nếu chúng ta chỉ dựa vào Precision, mô hình của chúng ta thật sự rất tốt (Precision = 100%). Tất cả các ca có bệnh mà chúng ta dự đoán đều chính xác.

Tuy nhiên ngó lại Recall (9%), có tới 910 bệnh nhân bị dự đoán sai và họ không được điều trị. 91% số ca bị nhiễm bệnh sẽ cầm chắc cái chết. Mô hình của chúng ta hoàn toàn rất tệ trong trường hợp này!

Precision thấp / Recall cao

Nếu ngược lại thì sao? Giả sử confusion matrix là bảng dưới đây (câu hỏi: Bệnh nhân có mắc ung thư không?).

Thực tế (có) (có) Thực tế (không) (không)
Dự đoán (có) (có) 90 910 Precision = 100% = 9%
Dự đoán (không) (không) 10 5
Recall = 9% = 90%

Chúng ta có thể hiểu gì về Precision và Recall? Nếu một trong hai cái này có giá trị cao còn cái kia có giá trị thấp (hoặc ngược lại) thì sao? Ý nghĩa của chúng như thế nào?

Precision cao / Recall thấp

Nhìn lại ví dụ ở bảng trên, nếu chúng ta chỉ dựa vào Precision, mô hình của chúng ta thật sự rất tốt (Precision = 100%). Tất cả các ca có bệnh mà chúng ta dự đoán đều chính xác. cho chúng ta biết những “dự đoán có” của chúng ta chính xác bao nhiêu (Liệu trong 1000 người ta dự đoán mắc bệnh thì có mấy người thật sự bị?). Tuy nhiên sẽ có một câu hỏi nảy ra trong đầu chúng ta là “Liệu chúng ta có dự đoán thiếu kết quả nào không?” (Ta có bỏ sót bệnh nhân nào đang mắc bệnh mà không dự đoán không?). Recall sẽ cung cấp câu trả lời cho câu hỏi này!

Tuy nhiên ngó lại Recall (9%), có tới 910 bệnh nhân bị dự đoán sai và họ không được điều trị. 91% số ca bị nhiễm bệnh sẽ cầm chắc cái chết. Mô hình của chúng ta hoàn toàn rất tệ trong trường hợp này!

Precision thấp / Recall cao Bạn muốn xây dựng một hệ thống gợi ý sản phẩm trực tuyến. Dự đoán “Positive” trong trường hợp này chính là “Những sản phẩm thật sự thu hút khách hàng“. Mô hình của bạn sẽ hiển thị những sản phẩm liên quan đến sản phẩm mà họ đang xem để họ có thể mua thêm nhiều sản phẩm khác trên trang web bán hàng của bạn (Amazon, Tiki, Lazada,… chẳng hạn).

  • Nếu ngược lại thì sao? Giả sử confusion matrix là bảng dưới đây (câu hỏi: Bệnh nhân có mắc ung thư không?).precision quá cao trong khi recall lại thấp, những gợi ý của bạn đúng là thu hút được khách hàng nhưng bạn lại bỏ qua quá nhiều sản phẩm tiềm năng khác cũng có khả năng thu hút họ không kém.
  • Precision = 9% precision thấp trong khi recall cao thì bạn sẽ chắc chắn tất cả các sản phẩm tiềm năng sẽ được giới thiệu đến khách hàng. Tuy nhiên, những sản phẩm thừa mứa và vô vị khác cũng sẽ chen chân vào đây và khiến cho khách hàng của bạn không mấy mặn mà, họ có thể đổi sang trang khác để mua!

Recall = 90%

Trong trường hợp này Precision rất nhỏ nếu đem so với Recall (9% so với 90%). Chúng ta đã dự đoán sai quá nhiều người lành thành người bệnh. Tuy nhiên có vẻ như dự đoán sai này “ít tác hại” hơn là trường hợp trước đó. 90% trường hợp này có thể “bị” hóa trị nhầm nhưng ít ra là có thể họ vẫn sống, trong khi ở trường hợp precision cao/recall thấp, số lượng người không được điều trị quá cao và cầm chắc cái chết sớm!

Thực tế (có) (có) Thực tế (không) (không)
Dự đoán (có) (có) Precision = 100% Dự đoán (không) Recall = 9%
Dự đoán (không) (không) Recall = 9% Chúng ta có thể hiểu gì về Precision và Recall? Nếu một trong hai cái này có giá trị cao còn cái kia có giá trị thấp (hoặc ngược lại) thì sao? Ý nghĩa của chúng như thế nào?
Precision cao / Recall thấp

Nhìn lại ví dụ ở bảng trên, nếu chúng ta chỉ dựa vào Precision, mô hình của chúng ta thật sự rất tốt (Precision = 100%). Tất cả các ca có bệnh mà chúng ta dự đoán đều chính xác. (không muốn quá nhiều “dự đoán có” của chúng ta sai so với thực thế). Ví dụ như khi phân loại email spam (Câu hỏi: Email nhận được có là spam hay không?). Khi ấy, FP được hiểu là “Một email bình thường bị đánh dấu là spam“. Nếu precision thấp, hay FP cao, có rất nhiều email quan trọng sẽ bị xóa. Còn nếu recall thấp, hay FN cao, chúng ta sẽ nhận nhiều email spam nhưng cái này không quá nguy hiểm bằng việc nhiều email quan trọng bị xóa.

Tuy nhiên ngó lại Recall (9%), có tới 910 bệnh nhân bị dự đoán sai và họ không được điều trị. 91% số ca bị nhiễm bệnh sẽ cầm chắc cái chết. Mô hình của chúng ta hoàn toàn rất tệ trong trường hợp này! (không muốn có quá nhiều “dự đoán không” bị sai so với thực tế). Ví dụ như trường hợp dự đoán bệnh ta nói suốt bài này. Một ví dụ khác là dự đoán tình trạng gian lận trong ngành ngân hàng (Câu hỏi: Giao dịch này có khả nghi hay không?). Khi ấy FN là “Một giao dịch được xem là không khả nghi nhưng thực tế lại khả nghi“. Hệ quả có thể rất nghiêm trọng cho ngành ngân hàng! Nếu precision thấp, hay FP cao, có thể chúng ta sẽ cảnh báo sai cho ngân hàng và khiến họ tốn thêm thời gian để kiểm tra hơn nhưng suy cho cùng họ không tổn thất về mặt tài sản. Còn ngược lại, nếu FN cao, ảnh hưởng sẽ vô cùng lớn về mặt tài sản!

Tại sao Confusion Matrix lại quan trọng?

Giả sử bạn muốn kiểm tra mô hình và thuật toán của mình coi có tốt chưa bằng cách áp dụng nó vào dữ liệu được khảo sát từ toàn những người không nhiễm bệnh! (không có ai bị bệnh cả).toàn những người không nhiễm bệnh! (không có ai bị bệnh cả).

Nếu mô hình của bạn “lười biếng”, không phân tích gì mà chỉ đưa ra duy nhất một kết quả là “khỏe mạnh” cho mọi trường hợp. Khi áp dụng vào dữ liệu ở trên, bạn sẽ được 100% kết quả là không nhiễm bệnh. Há chẳng phải bạn sẽ tự hào nói với mọi người rằng “À há, mô hình của tui dự đoán đúng 100% luôn này!” (vì rõ ràng trong cuộc khảo sát, chả có ai bệnh cả). Mô hình của bạn có đáng tin chưa?chỉ đưa ra duy nhất một kết quả là “khỏe mạnh” cho mọi trường hợp. Khi áp dụng vào dữ liệu ở trên, bạn sẽ được 100% kết quả là không nhiễm bệnh. Há chẳng phải bạn sẽ tự hào nói với mọi người rằng “À há, mô hình của tui dự đoán đúng 100% luôn này!” (vì rõ ràng trong cuộc khảo sát, chả có ai bệnh cả). Mô hình của bạn có đáng tin chưa?

Làm sao mà đáng tin được! Rủi bạn áp dụng mô hình này vào một bộ dữ liệu khác trong đó chỉ có 5% số người là khỏe mạnh trong thực tế. Sau khi chạy thuật toán, mô hình của bạn nói là 100% người đều khỏe mạnh. Thật tai hại vì 95% người bị nhiễm sẽ nghĩ rằng họ đang khỏe mạnh và không điều trị gì cả!

Nhờ vào CM, chúng ta có thể có cái nhìn tổng quan về tính hiệu quả mà mô hình chúng ta đem lại. Chúng ta sẽ biết được giá trị cụ thể của Precision và Recall để từ đó có những điều chỉnh và đánh giá phù hợp hơn.

Tới lượt bạn động não

Giả sử chúng ta có một hệ thống phân loại email (hình dưới). Hệ thống của chúng ta sẽ thiết lập một ngưỡng nhất định (classification threshold). Những email nằmg bên phải ngưỡng này sẽ bị đánh dấu là spam, còn những email bằm bên trái thì đánh dấu là “không spam”.

Câu hỏi: Email này có phải là spam không?

Theo bạn, giá trị của precision và recall trong trường hợp này là bao nhiêu? Nếu chúng ta tăng giá trị ngưỡng ban đầu (classification threshold dịch về bên phải) thì giá trị của recall sẽ tăng, giảm hay không thay đổi?

Hãy suy nghĩ thật kỹ và kiểm tra xem câu trả lời của mình có đúng chưa so với các đáp án ở đây. Bạn cũng có thể thử trả lời vài câu hỏi khác cũng khá hay tại đây.

F1-Score

Chúng ta thấy rằng cả precision và recall đều quan trọng. Có lúc thì cái này quan trọng hơn cái kia. Vậy trong thực tế, ta sẽ lấy cái nào làm cái chính? Ta phải điều chỉnh sao cho cả hai cái này thật sự hợp lý? Thật khó trả lời cho các câu hỏi này! Đó là lý do vì sao f1-score ra đời!

Với f1-score, chúng ta chỉ cần quan tâm đến một chỉ số duy nhất (thay vì hai – precision và recall). F1-score được tính thông qua precision và recall bởi công thức sau đây:

$$F_{1} = \left({\frac {\mathrm {recall} ^{-1}+\mathrm {precision} ^{-1}}{2}}\right)^{-1}=2\times {\frac {\mathrm {precision} \cdot \mathrm {recall} }{\mathrm {precision} +\mathrm {recall} }}.$$
F_{1} = \left({\frac {\mathrm {recall} ^{-1}+\mathrm {precision} ^{-1}}{2}}\right)^{-1}=2\times {\frac {\mathrm {precision} \cdot \mathrm {recall} }{\mathrm {precision} +\mathrm {recall} }}.
$$

Nhắc lại,

Thực tế (có) (có) Thực tế (không) (không)
Dự đoán (có) (có) TP FP Precision
Dự đoán (không) (không) FN TN
Recall

và,

$$\begin{align} \mathrm {precision} = \dfrac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FP}}, \quad \mathrm {recall} = \dfrac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FN}} \end{align}$$
\begin{align}
\mathrm {precision} = \dfrac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FP}}, \quad
\mathrm {recall} = \dfrac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FN}}
\end{align}
$$

Thêm nữa, khi chúng ta thay đổi định nghĩa của “positive” (hay thay đổi câu hỏi của vấn đề) thì giá trị của f1-score cũng sẽ thay đổi theo. Lý do là bởi TP trong công thức của precision và recall sẽ chuyển thành TN. Điều đó có nghĩa là bạn phải rất thận trọng trong việc chọn định nghĩa cho “positive” (hay chọn câu hỏi đặt vấn đề). Một khi bạn đã định nghĩa “positive”, f1-score sẽ phụ thuộc vào định nghĩa này.

Ví dụ cho việc ta thay đổi cách đặt câu hỏi?

Ví dụ, thay vì hỏi “Bệnh nhân có bị ung thư không?“, khi ấy TP chính là “Dự đoán có của chúng ta thật sự mắc ung thư“. Tuy nhiên khi thay đổi câu hỏi thành “Bệnh nhân có khỏe không?“, khi ấy “Dự đoán có của chúng ta thật sự mắc ung thư” lại chính là “Dự đoán không khỏe của chúng ta thật sự đang mắc bệnh.“, hay TN.

Bảng đầu tiên với câu hỏi “Bệnh nhân có bị ung thư không?“Bệnh nhân có bị ung thư không?

Thực tế (có) (có) Thực tế (không) (không)
Dự đoán (có) (có) 90 0 TP = 100%
Dự đoán (không) (không) 910 5
FN = 9%

TN Bệnh nhân có khỏe mạnh không?

Thực tế (có) (có) Thực tế (không) (không)
Dự đoán (có) (có) 5 910 TP = 0.55%
Dự đoán (không) (không) 0 90
FN = 100%

TN

Recall

  • và,
  • $$\begin{align} \mathrm {precision} = \dfrac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FP}}, \quad \mathrm {recall} = \dfrac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FN}} \end{align}$$
  • Thêm nữa, khi chúng ta thay đổi định nghĩa của “positive” (hay thay đổi câu hỏi của vấn đề) thì giá trị của f1-score cũng sẽ thay đổi theo. Lý do là bởi TP trong công thức của precision và recall sẽ chuyển thành TN. Điều đó có nghĩa là bạn phải rất thận trọng trong việc chọn định nghĩa cho “positive” (hay chọn câu hỏi đặt vấn đề). Một khi bạn đã định nghĩa “positive”, f1-score sẽ phụ thuộc vào định nghĩa này.

Chọn giá trị cho f1-score?

Dễ nhận thấy, giá trị của f1-score rơi vào khoảng $(0,1]$. Thông thường, f1-score nhận giá trị càng cao, độ phân lớp và mô hình của chúng ta càng tốt!

  • Trường hợp tốt nhất: cả precision và recall đều được 100%, $f1=1$. Khi ấy mọi dự đoán “có” và “không” của chúng ta đều chính xác so với thực tế (ta là thần).
  • Trường hợp một trong hai precision và recall nhận giá trị rất bé gần 0, f1 cũng sẽ rất bé gần 0. Khi ấy mô hình của chúng ta chắc chắn có vấn đề!

Ngoài ra còn có một vài ví dụ khác cho f1-score như bảng dưới (trích từ course ML của Andrew NG)

Precision Recall F1-score
Mô hình 1 0.5 0.4 0.444
Mô hình 2 0.7 0.1 0.175
Mô hình 3 0.02 1 0.0392

Theo như bảng trên, dù Mô hình 2 có precision khá cao (0.7) nhưng f1-score vẫn khá thấp nếu đem so với Mô hình 1 (với precision và recall chỉ ở mức trung bình là 0.5 và 0.4). Trường hợp Mô hình 3 là chúng ta cho mô hình luôn luôn dự đoán “có bệnh”, khi ấy f1-score cực kỳ thấp!

Vậy khi chúng ta quan tâm một trong hai recall và precision hơn thì sao? Khi ấy ta cần xét đến công thức tổng quát hơn của f1-score như bên dưới (gọi là $F_{\beta}$) (nguồn): Khi ấy ta cần xét đến công thức tổng quát hơn của f1-score như bên dưới (gọi là $F_{\beta}$) (nguồn):

$$F_{\beta} = ( 1 + \beta^2)\frac{\text{precision}\cdot\text{recall}}{\beta^2\cdot\text{precision} + \text{recall}}$$
F_{\beta} = ( 1 + \beta^2)\frac{\text{precision}\cdot\text{recall}}{\beta^2\cdot\text{precision} + \text{recall}}
$$

Dễ nhận thấy, f1-score chỉ là trường hợp đặc biệt khi $\beta=1$.

  • Nếu chúng ta coi trọng precision hơn recall, ta chọn $\betaprecision hơn recall, ta chọn $\beta<1$ (thường chọn $\beta=0.5)$.
  • Ngược lại, nếu recall được coi trọng hơn precision, ta chọn $\beta>1$ (thường chọn $\beta=2$).recall được coi trọng hơn precision, ta chọn $\beta>1$ (thường chọn $\beta=2$).

Accuracy và Specificity

Thật ra, ngoài f1-score, còn có rất nhiều cách và chỉ số khác bạn có thể dùng để đánh giá xem mô hình của bạn có thật sự tốt chưa. Dưới góc nhìn của các thành phần CM, ta còn có các chỉ số accuracy và specificity.accuracyspecificity.

Accuracy: Trong tất cả các dự đoán của chúng ta, tỷ lệ dự đoán đúng là bao nhiêu? Nếu dữ liệu của chúng ta cân đối (lượng người được khảo sát có và không có bệnh gần ngang nhau), ta có thể chỉ cần dùng chỉ số accuracy này thôi là đủ để đánh giá mô hình của chúng ta.: Trong tất cả các dự đoán của chúng ta, tỷ lệ dự đoán đúng là bao nhiêu? Nếu dữ liệu của chúng ta cân đối (lượng người được khảo sát có và không có bệnh gần ngang nhau), ta có thể chỉ cần dùng chỉ số accuracy này thôi là đủ để đánh giá mô hình của chúng ta.

$$\mathrm{accuracy} = \dfrac{TP + TN}{TP + TN + FP + FN}$$
\mathrm{accuracy} = \dfrac{TP + TN}{TP + TN + FP + FN}
$$

Specificity: Có bao nhiêu “kết quả không” đến từ dự đoán của chúng ta? Chúng ta chọn specificity khi chúng ta quan tâm đến giá trị của TN và không muốn cảnh báo sai về những trường hợp FP. Ví dụ, khi chạy một phần mềm kiểm tra những người bán ma túy (Câu hỏi: Trường hợp này có bán không?) Nếu câu trả lời là “có” thì ta phải bắt giam họ ngay. Khi ấy FP là “Những người tốt bị hiểu lầm là đang bán ma trúy”. Chúng ta muốn specificity cao, hay FP càng thấp càng tốt, vì ta không muốn bắt giam người vô tội! : Có bao nhiêu “kết quả không” đến từ dự đoán của chúng ta? Chúng ta chọn specificity khi chúng ta quan tâm đến giá trị của TN và không muốn cảnh báo sai về những trường hợp FP. Ví dụ, khi chạy một phần mềm kiểm tra những người bán ma túy (Câu hỏi: Trường hợp này có bán không?) Nếu câu trả lời là “có” thì ta phải bắt giam họ ngay. Khi ấy FP là “Những người tốt bị hiểu lầm là đang bán ma trúy”. Chúng ta muốn specificity cao, hay FP càng thấp càng tốt, vì ta không muốn bắt giam người vô tội!

$$\mathrm{specificity} = \dfrac{TN}{FP + TN}$$
\mathrm{specificity} = \dfrac{TN}{FP + TN}
$$

Tài liệu tham khảo

  1. Classification: Precision and Recall – Google Developers, Machine Learning Crash Course.Google Developers, Machine Learning Crash Course.
  2. Classification: Check Your Understanding (Accuracy, Precision, Recall) – Google Developers, Machine Learning Crash Course.Google Developers, Machine Learning Crash Course.
  3. F-measure versus Accuracy – NLP blog.NLP blog.
  4. Accuracy, Precision, Recall or F1? – Koo Ping Shung, Towards Data Science.Koo Ping Shung, Towards Data Science.
  5. Dealing with Imbalanced data: undersampling, oversampling and proper cross-validation – Marco Altini.Marco Altini.
  6. Accuracy, Recall, Precision, F-Score & Specificity, which to optimize on? – Salma Ghoneim, Towards Data Science.Salma Ghoneim, Towards Data Science.

Hình đại diện lấy từ trang towardsdatascience.com.