ML Atlas

Machine learning do zero · Aula 2.2 · 9 de 33 aulas prontas · 10 min

Avaliando um classificador: além da acurácia

Em resumo

A acurácia esconde quais erros um modelo comete. A matriz de confusão, a precisão e o recall mostram o equilíbrio que um limiar cria em dados de tumores.

Aquecimento Duas perguntas de aulas anteriores. Um minuto, e a aula nunca fica bloqueada.
Da aula 2.1: Classificação: traçando uma fronteira O que a regressão logística devolve antes de qualquer limiar ser aplicado?

Ver a resposta

Resposta certa: Uma probabilidade entre 0 e 1 para uma das classes

A sigmoide transforma a soma ponderada numa probabilidade, e o limiar transforma essa probabilidade numa decisão.

Da aula 1.6: Descida de gradiente: aprender em pequenos passos A perda sobe mais a cada passo. Qual é a causa mais provável?

Ver a resposta

Resposta certa: A taxa de aprendizado é grande demais, e cada passo ultrapassa o mínimo

Com um passo grande demais, os parâmetros pulam o vale e caem num ponto cada vez mais alto, e o erro cresce.

Um alarme de fumaça que nunca toca jamais erra com um incêndio falso. Um alarme que dispara toda vez que você faz torrada jamais deixa passar um incêndio de verdade. Qual é o melhor? Nenhum dos dois — e um único número de acurácia nem diria qual deles você tem. Esta lição é sobre contar erros de um jeito que mostre o tipo deles, não só a quantidade.

Preveja, depois confira Você quer detectar pelo menos 95% dos tumores malignos (recall de pelo menos 95%). Qual é o maior limiar do controle que garante isso?
Qual é o seu grau de certeza?

Experimento interativo

Este experimento interativo funciona em um navegador com JavaScript ativado. O texto ao redor descreve o que ele mostra.

Ver a resposta

Resposta certa: 0,1

Com limiar 0,1 o recall é 96,9% (62 dos 64 tumores malignos detectados), com 0,2 só 92,2% e com 0,5 82,8%. Você paga com falsos alarmes: 20 biópsias saudáveis marcadas como malignas com 0,1, contra 3 com 0,5.

Experimente

  • Mova o controle do limiar para a esquerda. Veja os falsos negativos da matriz de confusão diminuírem e os falsos positivos aumentarem, e o recall e a precisão andarem em sentidos opostos.
  • Mova o controle do limiar para a direita e veja o contrário acontecer. Fique de olho na acurácia: ela diz que tipo de erro você está cometendo?
  • Encontre o limiar mais alto em que nenhum tumor maligno é perdido. Veja quantos tumores benignos são marcados por engano nesse ponto.
  • Escolha o limiar que você usaria num exame de rastreamento e diga numa frase por quê.

A ideia em poucas palavras

Vamos ver agora, em palavras simples, o que você acabou de manipular.

Voltemos aos 569 tumores de mama da lição 1. Um modelo dá a cada tumor uma pontuação: quanto mais alta, maior a chance de ser maligno. Um limiar transforma a pontuação numa decisão. Cada decisão então cai numa de quatro casas:

previsto malignoprevisto benigno
realmente malignoverdadeiro positivo (VP)falso negativo (FN)
realmente benignofalso positivo (FP)verdadeiro negativo (VN)

Essa tabela é a matriz de confusão. A diagonal guarda as decisões corretas. As outras duas casas guardam dois tipos de erro muito diferentes: um falso positivo é um alarme falso (uma paciente saudável encaminhada para mais exames), e um falso negativo é um caso perdido (um câncer mandado para casa).

O alarme de fumaça mostra bem isso. O alarme mudo não tem falsos positivos e tem muitos falsos negativos. O alarme da torrada tem o contrário. Um bom alarme equilibra os dois de acordo com o custo de cada erro.

Por que funciona

Dois números resumem a matriz muito melhor que a acurácia:

precisão = VP / (VP + FP) recall = VP / (VP + FN)

O recall (revocação ou sensibilidade) responde: de todos os tumores malignos, que fração pegamos? A precisão responde: de todos os tumores que chamamos de malignos, que fração realmente era? O recall trata de não deixar escapar; a precisão, de não dar alarme falso.

O limiar controla o equilíbrio entre os dois. Baixe o limiar e mais tumores são marcados como malignos: você pega mais cânceres (o recall sobe), mas também marca mais tumores benignos (a precisão costuma cair). Suba o limiar e acontece o contrário. Nenhum limiar consegue maximizar os dois, a não ser que o modelo separe as classes perfeitamente. Escolher um limiar, portanto, não é um detalhe técnico, mas uma decisão de valores: quantos alarmes falsos você aceita para não perder um câncer?

A acurácia mistura as quatro casas num único número e esconde essa escolha. Ela também esconde o desbalanceamento de classes. Como 357 dos 569 tumores são benignos, um modelo que chama tudo de benigno acerta quase dois terços sem pegar nenhum câncer — recall zero. Esse é o paradoxo da acurácia: um modelo pode parecer razoável pela acurácia e ser inútil para aquilo para que foi construído.

Erro comum

O erro mais comum é relatar só a acurácia, principalmente em dados desbalanceados, em que uma classe é muito mais rara que a outra. O segundo é manter o limiar padrão de 0,5 sem perguntar quanto custam os erros. Um exame de rastreamento, em que um caso perdido pode ser fatal e um alarme falso significa um exame extra, normalmente deve ter um limiar mais baixo que um exame que leva a uma cirurgia. Uma terceira armadilha é confundir precisão e recall; lembrar as perguntas que eles respondem — “dos que eu marquei” versus “dos que existem” — ajuda mais que decorar fórmulas.

Até aqui avaliamos modelos num único conjunto de teste fixo. Mas um modelo pode brilhar nos dados com que aprendeu e ir mal em todo o resto. Na próxima lição provocamos isso de propósito: o overfitting.

Pegue o erro da IA

Foi assim que um chatbot respondeu. Uma frase está errada. Qual?

Pergunta: Com limiar 0,1, meu classificador de tumores encontra 62 dos 64 tumores malignos, mas também marca 20 benignos. Como devo interpretar isso?

Resposta do chatbot

Mostrar a frase errada

A frase errada: E como a precisão é a fração de todos os tumores malignos que o modelo pega, ela é igualmente alta aqui.

Essa é a definição de recall. A precisão responde à outra pergunta — dos tumores marcados, quantos são realmente malignos — e com limiar 0,1 os 20 falsos alarmes a puxam para baixo, enquanto com 0,5 há só 3.

Quiz

Três perguntas para você se testar. Escolha uma resposta ou abra a resposta embaixo de cada pergunta. No teclado: as setas escolhem, Enter ou Espaço confirma.

1. Um modelo de rastreamento deixa passar muitos cânceres, mas quase nunca dá alarme falso. Qual número está baixo?
Ver a resposta

Resposta certa: O recall, isto é, a fração dos cânceres detectados

O recall é a fração de positivos reais que foram pegos, então muitos casos perdidos significam recall baixo.

2. Você baixa o limiar de decisão. O que costuma acontecer?
Ver a resposta

Resposta certa: O recall sobe e a precisão cai

Um limiar mais baixo marca mais casos como positivos, pegando mais verdadeiros positivos, mas também acrescentando falsos positivos.

3. Por que a acurácia pode enganar nos dados de tumores?
Ver a resposta

Resposta certa: Porque os tumores benignos são maioria, então um modelo pode ter boa nota perdendo todos os cânceres

Com classes desbalanceadas, a resposta majoritária sozinha já produz uma acurácia respeitável e recall zero.

Pontos-chave

  • A matriz de confusão divide as decisões em verdadeiros e falsos positivos e negativos.
  • O recall é a fração de positivos reais pegos; a precisão é a fração de casos marcados que são reais.
  • O limiar troca recall por precisão, e o equilíbrio certo depende do custo de cada erro.
  • A acurácia esconde o tipo de erro e pode parecer boa em dados desbalanceados mesmo perdendo todos os positivos.

Mais a fundo: fórmula, código, prática

A matemática

Um limiar t transforma uma pontuação em decisão: prever maligno quando score ≥ t. Contar as quatro caixas dá as métricas:

  • accuracy = (TP + TN) / n, a proporção de todas as decisões que estão certas;
  • precision = TP / (TP + FP), a proporção de alarmes que são reais;
  • recall = TP / (TP + FN), a proporção de casos reais que foram detectados;
  • F1 = 2 · precision · recall / (precision + recall), a média harmônica das duas, que continua baixa se qualquer uma for baixa.

Baixar t só pode acrescentar alarmes, então TP e FP nunca caem e FN nunca sobe. Por isso o recall nunca cai quando t diminui, enquanto a precisão normalmente cai. Um modelo que sempre responde “benigno” tem TP = 0, então seu recall é 0, e sua acurácia é apenas a proporção da classe majoritária: 357 / 569.

No código (Python)

Os 569 tumores da lição, com as 10 variáveis “mean” do lab, uma regressão logística com escalonamento e uma divisão de teste estratificada de 30% (171 biópsias, random_state=1). As contagens do próprio lab (TP / FN / FP) são 53 / 11 / 3 no limiar 0,5 e 62 / 2 / 20 em 0,1. Esta divisão não é a do lab, então as contagens diferem um pouco:

from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

X, b = load_breast_cancer(return_X_y=True, as_frame=True)
X = X.filter(like="mean ")  # as 10 variáveis "mean", como no lab
y = 1 - b  # no sklearn 0 = maligno; inverte-se para que 1 = maligno
print(f"tumours {len(y)}, benign {(y == 0).sum()}, always-benign accuracy {(y == 0).mean():.3f}")
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.3, stratify=y, random_state=1)
score = make_pipeline(StandardScaler(), LogisticRegression()).fit(Xtr, ytr).predict_proba(Xte)[:, 1]
for t in (0.5, 0.1):
    flag = score >= t
    tp, fp, fn = (flag & (yte == 1)).sum(), (flag & (yte == 0)).sum(), (~flag & (yte == 1)).sum()
    print(f"t={t}: TP {tp} FN {fn} FP {fp} precision {tp / (tp + fp):.3f} recall {tp / (tp + fn):.3f}")

Saída

tumours 569, benign 357, always-benign accuracy 0.627
t=0.5: TP 53 FN 11 FP 2 precision 0.964 recall 0.828
t=0.1: TP 61 FN 3 FP 13 precision 0.824 recall 0.953

Em 0,5 o recall é 0,828 aqui, como no lab, mas em 0,1 é 0,953 contra os 96,9% do lab, e os alarmes falsos são 13 em vez de 20. O recall muda de uma divisão para outra, que é justamente o ponto da lição 2. Baixar o limiar de 0,5 para 0,1 ainda aumenta o recall e diminui a precisão, como diz a lição. A baseline de “sempre benigno” parece decente pela acurácia e não encontra nenhum câncer.

Para quem pratica
  • Informe a precisão e o recall (ou a matriz de confusão inteira) ao lado da acurácia, e diga sempre qual classe é a “positiva”.
  • Escolha o limiar com dados de validação, a partir do custo de cada erro, não por hábito. O 0,5 padrão é só uma convenção.
  • Calcule sempre a baseline de prever a classe majoritária. Se sua acurácia estiver perto dela, o modelo aprendeu pouco.
  • Recall e precisão em um limiar são um ponto de uma curva. Para comparar dois modelos com justiça, compare-os no mesmo recall ou olhe a curva precisão-recall inteira.
  • Uma pontuação é apenas um ranking, a menos que seja calibrada. Não leia 0,3 como “30% de chance” sem verificar a calibração.

Vá mais fundo no Atlas

Verbetes da enciclopédia sobre as ideias desta aula: