Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Métricas | Comparando Modelos
Classificação com Python

Métricas

Deslize para mostrar o menu

Até este ponto, utilizamos a acurácia como principal métrica para avaliar o desempenho do modelo. No entanto, a acurácia possui algumas limitações. Agora, vamos discutir suas desvantagens e apresentar métricas adicionais – baseadas em TP, TN, FP e FN – que ajudam a abordar essas questões.

ConfusionMatrix

Acurácia

Acurácia representa a proporção de previsões corretas:

accuracy=correctcorrect+incorrect=TP+TNTP+TN+FP+FN\text{accuracy} = \frac{\text{correct}}{\text{correct} + \text{incorrect}} = \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} + \textcolor{red}{\text{FN}}}

No entanto, a acurácia possui suas limitações. Por exemplo, imagine que você está tentando prever se um paciente tem uma doença rara. O conjunto de dados contém 99,9% de pacientes saudáveis e apenas 0,1% com a doença. Nesse caso, sempre prever que o paciente está saudável resultaria em uma acurácia de 0,999 – mesmo que esse modelo seja completamente inútil.

Conjuntos de dados como esse são chamados de desequilibrados, e nesses casos, a acurácia balanceada é uma métrica mais adequada.

Acurácia balanceada

A acurácia balanceada calcula separadamente a proporção de predições positivas corretas e a proporção de predições negativas corretas, depois faz a média entre elas. Essa abordagem atribui igual importância para cada classe, independentemente do quão desequilibrado esteja o conjunto de dados.

balanced_accuracy=12TPP+12TNNaccuracy=TP+TNP+N\begin{aligned} \text{balanced\_accuracy} &= \frac12 \cdot \frac{\textcolor{green}{\text{TP}}}{\text{P}} + \frac12 \cdot \frac{\textcolor{green}{\text{TN}}}{\text{N}}\\ \text{accuracy} &= \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\text{P} + \text{N}} \end{aligned}

Onde

  • P=TP+FN\text{P} = \textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}} – número total de instâncias positivas (classe 1);
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} – número total de instâncias negativas (classe 0).

No exemplo da doença rara, a acurácia balanceada de um modelo que sempre prevê "saudável" seria 0,5 – destacando efetivamente o problema. Assim, essa questão é abordada.

No entanto, a acurácia balanceada ainda não diferencia entre erro tipo 1 e erro tipo 2 – assim como a acurácia comum. É nesse ponto que entram a precisão e o recall.

Precisão

A métrica de precisão indica quantos dos valores que o modelo previu como positivos eram realmente positivos. É a proporção de verdadeiros positivos em relação a todas as previsões positivas feitas pelo modelo:

precision=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

Ao utilizar a métrica de precisão, é possível entender com que frequência ocorre um erro do tipo 1. Alta precisão significa que erros do tipo 1 são raros, enquanto baixa precisão indica que esses erros acontecem com frequência.

Revocação

A métrica de revocação mostra a proporção de casos positivos reais que o modelo previu corretamente:

recall=TPTP+FN\text{recall} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}}}

A métrica de recall ajuda a entender com que frequência ocorre um erro do tipo 2. Recall alto significa que erros do tipo 2 são raros, enquanto recall baixo indica que eles acontecem com frequência.

No entanto, tanto precisão quanto recall possuem limitações. Por exemplo, um modelo que prevê apenas a classe positiva (1) alcançará recall perfeito, mas sua precisão será baixa. Por outro lado, um modelo que prevê corretamente apenas uma instância positiva e classifica todo o restante como negativo terá precisão perfeita, mas recall péssimo.

Isso mostra que, embora seja fácil construir um modelo com precisão perfeita ou recall perfeito, é muito mais difícil criar um que tenha bom desempenho em ambos. Por isso, é importante considerar ambas as métricas – e, felizmente, existe uma métrica que as combina.

F1 Score

O F1 score é a média harmônica entre precisão e recall. A média harmônica é preferida em relação à média aritmética porque penaliza situações em que um dos valores (precisão ou recall) é baixo, tornando-se uma medida mais equilibrada do desempenho do modelo.

F1=21precision+1recall=2precisionrecallprecision+recall\text{F1} = \frac{2}{\frac{1}{\text{precision}} + \frac{1}{\text{recall}}} = \frac{2 \cdot \text{precision} \cdot \text{recall}}{\text{precision} + \text{recall}}

O F1 score combina tanto precisão quanto recall em uma única métrica. Ele só será alto se ambos, precisão e recall, forem relativamente altos, tornando-se uma medida útil quando é necessário equilibrar ambos os tipos de erro.

A escolha da métrica adequada depende da tarefa específica. Acurácia (ou acurácia balanceada para conjuntos de dados desbalanceados) é intuitiva e fornece uma noção geral do desempenho global do modelo. Se for necessário um entendimento mais detalhado sobre os tipos de erros cometidos pelo modelo, precisão auxilia na identificação de erros do tipo 1, enquanto revocação destaca erros do tipo 2. O F1 score indica o quão equilibrado o modelo está em relação aos erros do tipo 1 e tipo 2.

Resumo das Métricas
Note
Estude Mais

Outra métrica comumente utilizada é o ROC/AUC, sobre a qual você pode ler mais em este artigo.

Métricas em Python

O Scikit-learn fornece implementações para todas essas métricas no módulo sklearn.metrics:

from sklearn.metrics import accuracy_score, balanced_accuracy_score, precision_score, recall_score, f1_score

accuracy = accuracy_score(y_true, y_pred)
balanced_accuracy = balanced_accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

Se desejar obter métricas como precisão, recall e F1-score de uma só vez, o sklearn oferece a função classification_report():

12345678910111213
import pandas as pd import seaborn as sns from sklearn.metrics import classification_report from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Display a classification report print(classification_report(y_test, y_pred))
Note
Nota

Support refere-se ao número de ocorrências reais de cada classe no conjunto de teste. Macro avg calcula a média de cada métrica (precisão, recall, F1) igualmente para todas as classes, sem considerar o desbalanceamento entre elas. Weighted avg também faz a média das métricas entre todas as classes, mas atribui mais peso às classes com mais instâncias (com base no support).

question mark

Qual métrica de avaliação fornece um equilíbrio entre precisão e revocação, apresentando um único valor que reflete ambos?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 5. Capítulo 2
some-alt