Classificação & Métricas
A classificação é o aprendizado supervisionado com alvo categórico: spam/não spam, inadimplente/pagador, doente/saudável, ou uma dentre muitas classes (dígito 0–9). As Partes IV e V constroem um portfólio de classificadores; esta aula constrói a ferramenta de que você precisa antes de qualquer um deles — saber como medir se um classificador é bom. Escolher a métrica errada não é um detalhe: silenciosamente otimiza o comportamento errado.
A matriz de confusão
Para um problema binário, chame uma classe de positiva (geralmente a rara/interessante: fraude, doença) e a outra de negativa. Toda previsão cai em uma de quatro células:
| Previsto positivo | Previsto negativo | |
|---|---|---|
| Realmente positivo | VP (verdadeiro positivo) | FN (falso negativo) — escape |
| Realmente negativo | FP (falso positivo) — alarme falso | VN (verdadeiro negativo) |
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
confusion_matrix(y_test, y_pred) # linhas = verdade, colunas = previsão
ConfusionMatrixDisplay.from_estimator(model, X_test, y_test)
Os dois tipos de erro geralmente têm custos muito diferentes: um câncer não detectado (FN) não é o mesmo que um exame de acompanhamento desnecessário (FP); uma transação legítima bloqueada (FP) não é o mesmo que uma fraude aprovada (FN). As métricas existem para pesá-los explicitamente.
Acurácia — e por que ela mente
A acurácia responde "que fração das previsões estava certa?" — razoável quando as classes são balanceadas e os erros custam o mesmo. Mas com classes desbalanceadas ela degenera. Fraude é 0,5% das transações? A regra burra "tudo é legítimo" pontua 99,5% de acurácia enquanto pega zero fraude.
O paradoxo da acurácia
Em problemas desbalanceados, alta acurácia pode descrever um modelo inútil. Sempre compare com a baseline da classe majoritária (DummyClassifier) e recorra às métricas abaixo.
Precisão e revocação
Ambas focam na classe positiva, respondendo a perguntas diferentes:
- Precisão — dos casos que sinalizei, quantos eram reais? Precisão alta = poucos alarmes falsos;
- Revocação (sensibilidade) — dos casos reais, quantos eu peguei? Revocação alta = poucos escapes.
Elas puxam em direções opostas: sinalize mais agressivamente e a revocação sobe enquanto a precisão cai; sinalize com cautela e o inverso. Qual priorizar é uma decisão de domínio:
| Aplicação | Erro custoso | Priorizar |
|---|---|---|
| Rastreio de câncer | deixar de detectar um paciente (FN) | revocação |
| Filtro de spam | perder um e-mail real (FP) | precisão |
| Triagem de fraude para revisão humana | desperdiçar tempo do analista (FP) vs fraude não detectada (FN) | equilíbrio — depende da capacidade |
F1: um número quando você precisa de um só
A média harmônica de precisão e revocação:
A média harmônica pune o desequilíbrio: precisão 1,0 com revocação 0,02 dá \(F_1 \approx 0.04\), não a média aritmética 0,51 — você não consegue comprar um bom F1 maximizando um lado só. O \(F_\beta\) geral pesa a revocação \(\beta\) vezes mais que a precisão (\(F_2\) para rastreio, \(F_{0.5}\) para spam).
Multiclasse
A matriz de confusão se generaliza para \(k \times k\) — as células fora da diagonal revelam quais classes são confundidas (diagnósticos úteis: o modelo está misturando 4 e 9?). Precisão/revocação/F1 por classe são combinados por:
- média macro — média sobre as classes, todas iguais (classes pequenas contam integralmente);
- média ponderada (weighted) — média ponderada pela frequência da classe;
- média micro — calculada a partir das contagens agregadas (igual à acurácia em problemas de rótulo único).
Em dados multiclasse desbalanceados, reporte o macro-F1: ele expõe falhas em classes raras que as médias ponderadas escondem.
Escores, limiares e calibração
A maioria dos classificadores produz um escore ou probabilidade, e o rótulo vem de um limiar (padrão 0,5):
proba = model.predict_proba(X_test)[:, 1]
y_pred = (proba >= 0.5).astype(int) # o limiar é uma escolha!
Mover o limiar troca precisão por revocação — abaixe-o para pegar mais positivos (revocação ↑, precisão ↓), aumente-o para alarmes mais limpos. O limiar é uma decisão de negócio aplicada após o treino, e avaliar um modelo em todos os limiares é exatamente o que as curvas ROC e precisão–revocação fazem — o tema de ROC-AUC & Dados Desbalanceados.
Quando as próprias probabilidades previstas importam (precificação de risco, ordenação de triagem), verifique a calibração: entre os casos previstos como "70%", cerca de 70% acabam sendo positivos? (sklearn.calibration.CalibrationDisplay).
Material de aula
Notebook da aula (em português)
Notebook prático usado em sala — Aula 13 — Classificação de Dados: abrir no Colab