O que não te contam sobre métricas de classificação binária
Você muito provavelmente sabe (ou ao menos ouviu falar) sobre métricas de avaliação de classificadores como acurácia, precisão, recall e f1-score. Mas, você sabia que tem certos tipos de problemas que elas não são indicadas? Além disso, você já ouviu falar na MCC, NPV ou specificity? Pois é, eu também fiquei muito tempo sem conhecer essas métricas e já avaliei errado alguns classificadores no passado por conta disso. Então, nesse artigo, nós veremos:
- uma breve explicação prática sobre as métricas mais conhecidas - pra que você nunca mais tenha dúvidas sobre elas;
- quando utilizar e, principalmente, NÃO utilizar cada métrica
- qual a métrica mais recomendada pra avaliação de classificadores
Preparados? Vamos lá…
Acurácia
A acurácia é, com certeza, a métrica mais conhecida. Basicamente, representa o quanto você acertou naquele dataset em relação a todas as classes. Apesar de ser muito utilizada, não é indicada quando seu dataset é desbalanceado.
Ou seja, supondo que temos um banco cuja saída seja homem/mulher e nesse banco temos 80% mulheres e 20% homens. Se o seu algoritmo chutar que todo mundo é mulher, ele acerta 80% dos casos facilmente. O mesmo vale pra datasets com múltiplas classes. Por exemplo, um banco de animais com 40% cachorros, 50% gatos e 10% pássaros. Novamente, se seu algoritmo aprender a diferenciar gatos de cachorro somente, ele acertará 90% das vezes.
Portanto, a acurácia só pode ser considerada uma métrica válida quando o seu banco for balanceado. Ou seja, quando a distribuição das classes (sejam 2 ou mais) for consideravelmente uniforme. Eu, particularmente, não gosto muito de acurácia, pois essa premissa é bem difícil de ocorrer na vida real.
Precisão, Recall e F1-score (ou F-measure)
- Recall: o quão bom o algoritmo é em acertar a classe positiva. Ou seja: “Das amostras positivas, quantas o algoritmo acertou?”
- Precisão: o quanto você confia na predição da classe positiva. Ou seja: “Das amostra que meu algoritmo disse que eram positivas, quantas realmente são?”
Além de problemas de classificação, precisão e recall são muito usadas em sistemas de detecção. Por exemplo, imagine que temos um algoritmo que detecta faces. Parafraseando as definições anteriores, precisão e recall seriam definidas assim:
- Recall: "das faces gabaritadas, quantas o algoritmo detectou?"
- Precisão: "das detecções que meu algoritmo disse que eram face, quantas realmente são?"
Dando um exemplo prático, imagine que em uma imagem com 10 faces, nosso algoritmo retornou 5 detecções, sendo 3 realmente faces (TP) e 2 detecções errôneas. Nesse caso, temos um recall de 30% (ele detectou 3 das 10 faces na imagem) e uma precisão de 60% (das 5 detecções, 3 estavam corretas).
Então, pra que serve a f-measure (ou f1-score)? Imagine que nessa mesma imagem, um outro algoritmo retornasse 2 detecções e tais detecções são realmente faces. Nesse caso, o recall é 20% (2/10) e a precisão é 100% (todas as 2 detecções são realmente faces). Qual algoritmo é melhor, então? O que tem recall de 30% e precisão de 60%, ou o outro com recall de 20% e precisão de 100%?
Pra decidir isso, nós usamos a f-measure, que representa uma média harmônica da Precisão e Recall. Por que harmônica? Ao contrário da média aritmética, pra aumentar a f1-score, ambas Precisão e Recall devem ser maiores também.
Essas métricas são indicadas quando a sua classe positiva for mais importante que a negativa. Se você olhar pras fórmulas, Precisão e Recall não consideram os verdadeiros negativos (TN). Ou seja, elas só avaliam se o seu algoritmo é bom em acertar as amostras positivas. E isso nem sempre é bom.
Em problemas de detecção, como o do exemplo, isso faz total sentido. Pare pra pensar: como definir verdadeiros negativos (TN) num problema de detecção? Além de ser díficil definir, TN nesses casos não faz muito sentido. Um algoritmo de detecção que é bom em não detectar o que não é um objeto de interesse? No mínimo, confuso…
Por outro lado, em alguns problemas de classificação, a classe negativa tem muito mais importância que a classe positiva. Pra esses casos, é que existem a NPV e Specificity.
Negative Predictive Value (NPV), Specificity
As métricas Specificity e NPV são equivalentes a Recall e Precisão, só que pra classe negativa:
- Specificity: o quão bom o algoritmo é em acertar a classe negativa. Ou seja: “Das amostras negativas, quantas o algoritmo acertou?”
- NPV: o quanto você confia na predição da classe negativa. Ou seja: “Das amostra que meu algoritmo disse que eram negativas, quantas realmente são?”
Como dito, essas métricas são indicadas quando a classe negativa tem mais importância na prática que a classe positiva. Imagine, por exemplo, um problema de classificação onde queremos saber se um paciente está saudável (positivo) ou doente (negativo). Ou então, queremos saber se uma certa transação é genuína (positiva) ou fraudulenta (negativa). Nesses casos, você pode (e deve) calcular a NPV e Specificity. Além disso, é fácil adaptar a F-measure com essas métricas.
F-Beta
A F-beta é uma generalização da f1. Ela introduz um termo Beta que pondera o quanto recall é mais importante do que a precisão no cálculo da métrica. Repare que, quando Beta=1, temos a fórmula original da f1-score.
Um outro valor muito comum é Beta=2, conhecida como a f2-score. Nesse caso, estamos dizendo pra métrica que recall tem um peso maior que a precisão. Ou seja, obter um bom recall é mais importante pro classificador do que a precisão. Isso é util em problemas onde queremos ter certeza que o nosso classificador é bom em identificar a classe positiva, mesmo que pra isso ele acabe gerando mais falsos positivos. No exemplo do detector de faces, o nosso detector iria se preocupar em detectar o máximo possível de faces verdadeiras, mas provavelmente também teríamos mais falsos positivos (detecções que não são faces).
Assim como na f1, repare que é fácil adaptar a f-beta pra usar NPV e Specificity no lugar de Precisão e Recall, respectivamente.
Matthews Correlation Coefficient (MCC)
Eu deixei essa métrica pro final de propósito, pois ela é minha métrica favorita e a que eu calculo sempre nos problemas de classificação que estou tentando resolver. Sabe por que?
Primeiro por que ela é uma métrica que leva em consideração todas as possibilidades de um problema de classificação binária (TP, TN, FP e FN). Segundo, ela é robusta a bancos desbalanceados. E, terceiro, o resultado dela é um coeficiente normalizado entre -1 e 1 que é de fácil interpretação. Como assim? Vou explicar:
- -1: quanto mais próximo de -1 sua MCC, pior está o seu classificador. Ou seja, ele está errando mais do que acerta.
- +1: por outro lado, quanto mais próximo de +1, melhor está o seu classificador. Ou seja, ele está acertando mais do que erra.
- 0: quando o coeficiente é próximo de 0, isso mostra que o classificador está apenas “chutando” a(s) classe(s) mais frequente(s).
Ou seja, independentemente se o seu problema é desbalanceado ou da importância das suas classes positiva/negativa, a MCC é uma métrica que avalia bem o resultado do seu classificador.
Resumo da Ópera
- Só use acurácia quando a distribuição das classes do seu banco for uniforme. Mesmo assim, também calcule (ou dê preferência) a outras métricas.
- Calcule Precisão, Recall e F-measure quando a classe positiva for mais importante pra você do que a negativa. Use a F-measure pra decidir entre 2 ou mais classificadores.
- Quando a classe negativa for mais importante, use NPV e Specificity.
- Com a F-beta, você pode ponderar Precisão e Recall (ou mesmo NPV e Specificity).
- Sempre calcule a MCC. Ela é robusta a bancos desbalanceados, seu coeficiente é interpretável e lhe dá uma noção melhor de como está seu classificador.
E é isso. Espero que tenham gostado. E se esse artigo foi útil pra você também, não esquece de dar aplausos 👏👏. Me siga no Medium pra mais posts como esse. Você também pode conferir mais sobre o meu trabalho em: