Desbalanceamento e viés: quando 99% de acurácia é um modelo inútil
- ⬜🏪 Feature Store: a divergência entre treino e serviço(AWS ML Engineer Associate (MLA-C01))
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Desbalanceamento: quando 99% de acurácia é um modelo inútil
Num conjunto de detecção de fraude com 1% de casos positivos, um modelo que responde "não é fraude" para tudo acerta 99% das vezes. A acurácia não está errada — ela está medindo a coisa errada. É o exemplo canônico de por que a métrica precisa ser escolhida antes do modelo, e cai em quase toda prova de ML.
| Métrica | Responde | Use quando |
|---|---|---|
| Precisão | Dos que apontei como positivo, quantos eram? | Falso positivo é caro — bloquear cliente legítimo |
| Revocação | Dos positivos que existiam, quantos achei? | Falso negativo é caro — deixar passar fraude ou diagnóstico |
| F1 | Média harmônica das duas | As duas importam e você quer um número só |
| AUC-ROC | Separa bem as classes em qualquer limiar? | Comparar modelos, com classes não muito desbalanceadas |
| AUC-PR | Idem, focando na classe rara | Desbalanceamento forte — é a que a prova prefere |
A pergunta que escolhe a métrica não é técnica
É "qual erro custa mais caro?". Num filtro de spam, marcar e-mail legítimo como spam custa mais que deixar spam passar — otimize precisão. Num exame de triagem de câncer, deixar passar um caso custa incomparavelmente mais que um falso alarme — otimize revocação. Quem escolhe a métrica sem responder isso está otimizando por hábito.
As três formas de tratar desbalanceamento
- Reamostragem: replicar a classe rara ou reduzir a comum. Simples, e com um risco conhecido — replicar aumenta o sobreajuste sobre os poucos exemplos raros que você tem.
- Geração sintética: criar exemplos novos da classe rara interpolando os existentes. Ajuda quando a classe rara tem estrutura; atrapalha quando os poucos exemplos são ruidosos, porque o ruído é interpolado junto.
- Peso de classe: dizer ao algoritmo que errar na classe rara custa mais. É a intervenção de menor efeito colateral, porque não inventa nem descarta dado, e costuma ser a resposta certa quando a prova pede "sem alterar o conjunto de dados".
Faça a separação ANTES de reamostrar
Reamostrar e depois separar coloca cópias do mesmo registro no treino e na validação — a validação fica quase perfeita desde a primeira época, e o número perde o sentido. É a terceira forma de vazamento, e é a mais fácil de cometer sem perceber, porque a ordem parece indiferente.
from sklearn.metrics import average_precision_score, precision_recall_curve
from sklearn.utils.class_weight import compute_class_weight
import numpy as np
# Peso de classe: não inventa nem descarta registro. É a intervenção de menor
# efeito colateral, e a resposta quando o requisito diz "sem alterar o conjunto".
pesos = compute_class_weight(class_weight="balanced", classes=np.unique(y_tr), y=y_tr)
modelo.set_params(class_weight=dict(zip(np.unique(y_tr), pesos)))
modelo.fit(X_tr, y_tr)
prob = modelo.predict_proba(X_val)[:, 1]
# AUC-PR, não AUC-ROC: com 0,8% de positivos, a ROC parece boa mesmo quando o
# modelo é inútil, porque o eixo de falso positivo é dominado pela classe comum.
print("AUC-PR:", average_precision_score(y_val, prob))
# O limiar é decisão de NEGÓCIO, não o 0,5 padrão. Escolha pelo custo do erro:
p, r, limiares = precision_recall_curve(y_val, prob)
alvo = np.argmax(r >= 0.90) # exigir 90% de revocação...
print("limiar:", limiares[alvo], "precisão resultante:", p[alvo]) # ...e ver o preçoUm modelo de detecção de fraude tem 99,2% de acurácia. A base tem 0,8% de fraudes. Qual métrica revela se ele presta?
Viés: as três perguntas que o SageMaker Clarify responde
- Viés PRÉ-treinamento — o conjunto de dados já representa mal algum grupo? Isso é medido antes de existir modelo, e é onde a correção é mais barata.
- Viés PÓS-treinamento — o modelo trata grupos de forma diferente, mesmo com dado equilibrado? Aqui o viés veio do algoritmo ou de atributo correlacionado ao grupo.
- Explicabilidade — quais atributos empurraram ESTA previsão? É o que permite responder a um cliente ou a um regulador por que a decisão foi aquela.
Remover o atributo sensível não remove o viés
Tirar a coluna de gênero ou etnia dá a sensação de neutralidade e quase nunca funciona: CEP, nome, profissão e histórico de compra frequentemente correlacionam com o atributo removido, e o modelo reconstrói o grupo por procuração. Por isso a medição pós-treinamento existe — sem ela, você não sabe se removeu o viés ou apenas a sua capacidade de enxergá-lo.
Uma equipe removeu a coluna de gênero do conjunto de treino para eliminar viés. O Clarify pós-treinamento ainda aponta diferença de tratamento entre grupos. Por quê?
Um filtro antifraude bloqueia compras. Bloquear cliente legítimo gera reclamação e cancelamento. Qual métrica priorizar?
Próximo passo
Com dado íntegro, representativo e com a métrica escolhida, começa o domínio 2. A primeira decisão dele é a mais consequente e a menos técnica: treinar algo seu, usar um modelo pronto, ou não treinar nada.
Perguntas frequentes
❓ Qual métrica usar quando as classes estão desbalanceadas?
❓ Reamostragem, dados sintéticos ou peso de classe: o que usar em dados desbalanceados?
❓ Remover o atributo sensível elimina o viés do modelo?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…