Modelagem de Eventos Desbalanceados / Raros

O que significa “modelagem de eventos raros / desbalanceados (imbalanced / rare event modeling)”

Modelagem de eventos raros / desbalanceados refere-se a cenários de aprendizado de máquina (machine learning) em que os resultados que importam são raros, assimétricos ou distribuídos com uma cauda longa (long tail). Padrões comuns incluem:

  • Positivos raros: classificação binária (binary classification) em que a classe positiva é extremamente incomum (ex.: fraude, câncer, falha de máquina).
  • Multiclasse de cauda longa: existem muitas classes, mas a maioria dos exemplos de treino pertence a poucas classes “de cabeça (head)” enquanto muitas classes “de cauda (tail)” têm pouquíssimos exemplos.
  • Sinais esparsos (sparse signals): os padrões informativos são fracos ou ocorrem apenas em um pequeno subconjunto de atributos, entidades ou períodos de tempo (ex.: previsão de taxa de cliques (click-through prediction), padrões de anomalia, comportamentos raros de usuários).

Esses problemas são desafiadores porque objetivos de treinamento e métricas de avaliação padrão frequentemente otimizam o comportamento da maioria, produzindo modelos que parecem bons no papel (ex.: alta acurácia (accuracy)), mas falham na tarefa que você realmente quer resolver.

Este artigo foca em estratégias que funcionam na prática, ao mesmo tempo em que as fundamenta na teoria subjacente.

Por que o desbalanceamento quebra o aprendizado de máquina “padrão”

A acurácia se torna enganosa

Se positivos ocorrem em 0,1% das vezes, um classificador (classifier) que sempre prevê negativo alcança 99,9% de acurácia — e ainda assim é inútil. Para eventos raros, você normalmente se importa com:

  • capturar o máximo possível de positivos (revocação (recall)),
  • enquanto mantém alarmes falsos administráveis (precisão (precision)),
  • frequentemente sob restrições explícitas de custo.

Veja Avaliação para princípios mais amplos de avaliação.

A taxa base importa (e interage com limiares)

Muitos modelos produzem escores ou probabilidades. Mesmo com um bom modelo, o limiar de decisão (decision threshold) determina se você chama algo de positivo.

Se seu modelo produz uma probabilidade calibrada (calibrated probability) (p = P(y=1\mid x)), e você tem custos:

  • (C_{FP}): custo de falso positivo
  • (C_{FN}): custo de falso negativo

Então a regra de decisão ótima de Bayes (Bayes-optimal decision rule) é:

Predizer positivo se: [ p > \frac{C_{FP}}{C_{FP}+C_{FN}} ]

Isso destaca dois pontos práticos:

  1. O limiar correto raramente é 0,5 para eventos raros.
  2. A escolha de limiares deve ser feita com base em restrições de negócio/operacionais, não em padrões arbitrários.

Limiarização e calibração estão intimamente relacionadas; veja Calibração de Probabilidade.

O treinamento pode ser dominado por negativos

Muitos algoritmos de aprendizagem minimizam uma perda média sobre as amostras. Com 1 positivo para cada 10.000 negativos, os gradientes (gradients) são dominados por negativos, a menos que você os contrabalanceie. Isso pode levar a:

  • fronteiras de decisão (decision boundaries) subtreinadas próximas aos positivos,
  • estimativas de probabilidade ruins,
  • modelos que “desistem” e preveem escores baixos em todo lugar.

Cenários típicos de aplicação

  • Detecção de fraude: positivos são raros, adversariais e mudam ao longo do tempo (deriva (drift)).
  • Triagem médica: falsos negativos são custosos; a prevalência varia por população.
  • Manutenção preditiva: falhas são raras; censura e estrutura temporal importam.
  • Taxa de cliques em anúncios (CTR): positivos esparsos, atributos com cauda pesada (usuários/itens), necessidade de calibração.
  • Moderação de conteúdo: violações de política em cauda longa, muitos subtipos com poucos exemplos cada.

Cada domínio adiciona restrições (latência, interpretabilidade, capacidade de revisão), que devem orientar a escolha de modelo e a avaliação.

Avaliação para eventos raros: o que medir

Métricas da matriz de confusão (mas usadas corretamente)

Para classificação binária desbalanceada, sempre comece com a Matriz de Confusão e métricas derivadas:

  • Precisão: dos positivos previstos, quantos são realmente positivos?
  • Revocação (TPR): dos positivos reais, quantos capturamos?
  • F1: média harmônica de precisão/revocação (útil, mas esconde trade-offs)
  • Especificidade (TNR): dos negativos reais, quantos rejeitamos corretamente?

Precisão e revocação são centrais; veja Precisão e Revocação.

PR-AUC frequentemente é mais informativo do que ROC-AUC

  • ROC-AUC pode parecer enganosamente alto sob desbalanceamento extremo porque a taxa de falso positivo divide por um número enorme de negativos.
  • PR-AUC (Average Precision) foca na qualidade dos positivos previstos e geralmente é mais sensível ao desempenho em eventos raros.

Quando positivos são muito raros, também reporte pontos operacionais:

  • precisão a uma revocação fixa (ex.: “precisão quando a revocação é 80%”),
  • revocação a uma precisão fixa (ex.: “revocação quando a precisão é 95%”),
  • falsos positivos por dia / por 10.000 decisões.

Métricas de ranqueamento e avaliação top‑K

Em muitos sistemas, você só investiga os principais alertas. Então métricas como:

  • Precisão@K
  • Revocação@K
  • Elevação (lift) (precisão relativa à taxa base)

ficam mais alinhadas ao uso real do que limiares globais.

Divisões corretas importam mais do que o normal

Eventos raros frequentemente envolvem vazamento (leakage) e deriva:

  • Use divisões estratificadas (stratified splits) para cenários i.i.d., mas com cuidado: a estratificação pode esconder problemas temporais.
  • Para problemas dependentes do tempo (fraude, falhas), use divisões baseadas em tempo (time-based splits) e avalie em dados futuros.
  • Evite reamostragem antes de dividir — a superamostragem pode vazar positivos duplicados para o conjunto de teste.

Veja Seleção de Modelos para fluxos de avaliação (validação cruzada (cross-validation), ajuste (tuning), controle de vazamento).

Fundamentos centrados em dados: por que eventos raros são, em grande parte, um problema de dados

Em cenários de eventos raros, melhorias de modelo frequentemente entram em platô rapidamente, a menos que você melhore a qualidade e a cobertura dos dados:

  • Ruído de rótulos (label noise): um pequeno número absoluto de positivos rotulados incorretamente pode dominar a classe positiva.
  • Positivos ausentes: alguns “negativos” podem, na verdade, ser positivos não rotulados (comum em fraude/moderação).
  • Lacunas de cobertura: subtipos de cauda podem estar ausentes do treino.
  • Ciclos de retroalimentação (feedback loops): o modelo muda o que é observado/verificado.

Um bom fluxo de trabalho costuma ser: diagnosticar → melhorar rótulos/cobertura → retreinar, como enfatizado em IA Centrada em Dados.

Estratégias de modelagem para positivos raros (binário)

1) Aprendizado sensível a custo (cost-sensitive learning) (pesos de classe)

A maioria dos classificadores suporta ponderação de classe, efetivamente dizendo à função de perda (loss function) que positivos importam mais.

Para regressão logística (logistic regression), a perda ponderada aproxima a otimização do custo esperado (sob suposições) e pode contrabalançar a dominância de gradiente.

Dicas práticas

  • Comece com class_weight="balanced" (escala pesos inversamente à frequência de classe), depois ajuste.
  • Pesos mudam a fronteira de decisão efetiva; você ainda deve ajustar limiares em um conjunto de validação.
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import average_precision_score

clf = LogisticRegression(class_weight="balanced", max_iter=2000)
clf.fit(X_train, y_train)

scores = clf.predict_proba(X_val)[:, 1]
ap = average_precision_score(y_val, scores)
print("Validation AP:", ap)

2) Reamostragem: subamostragem, superamostragem e SMOTE (com ressalvas)

Subamostragem de negativos

  • Prós: treino mais rápido, pode melhorar o foco em positivos.
  • Contras: descarta informação; pode distorcer a calibração de probabilidade.

Superamostragem de positivos

  • Prós: simples, mantém todos os negativos.
  • Contras: duplicatas podem superajustar (overfit); pode causar vazamento se feita antes da divisão.

SMOTE e variantes

  • Criam positivos sintéticos interpolando entre vizinhos positivos.
  • Frequentemente útil para dados tabulares, menos para dados estruturados complexos (texto, imagens), a menos que aplicado com cuidado.
from imblearn.over_sampling import SMOTE
from sklearn.ensemble import RandomForestClassifier

smote = SMOTE()
X_res, y_res = smote.fit_resample(X_train, y_train)

rf = RandomForestClassifier(n_estimators=300, random_state=0)
rf.fit(X_res, y_res)

Regra prática

  • Use reamostragem principalmente para ajudar o aprendiz a encontrar fronteiras de decisão.
  • Use calibração/ajuste de limiar separados após o treino se você precisar de probabilidades.

3) Perda focal (focal loss) e ênfase em exemplos difíceis (hard-example emphasis) (comum em aprendizado profundo)

Para redes profundas (deep networks), a perda focal reduz a contribuição de negativos fáceis e foca o treinamento em exemplos difíceis. Ela é popular em tarefas de detecção densa (dense detection tasks) e em qualquer configuração com dominância extrema de negativos.

Este é um exemplo de modificar o objetivo em vez dos dados.

Relacionado: perdas balanceadas por classe (class-balanced losses), ajuste de logit (logit adjustment) e perdas baseadas em margem (margin-based losses) são muito usados em reconhecimento de cauda longa (long-tail recognition) (veja abaixo).

4) Sistemas em duas etapas: geração de candidatos (candidate generation) + verificação (verification)

Um padrão comum em produção é:

  1. Filtro de alta revocação (barato): gerar um conjunto de candidatos manejável.
  2. Modelo de alta precisão (caro): reescorear candidatos com atributos mais ricos.

Isso pode ser mais eficaz do que tentar fazer um único modelo fazer tudo, e se alinha naturalmente a restrições operacionais como capacidade de investigação.

5) Detecção de anomalias (anomaly detection) e modelagem de uma classe (one-class modeling) (quando positivos são desconhecidos)

Se positivos são extremamente raros ou mal rotulados, você pode modelar o comportamento “normal” e sinalizar desvios:

  • SVM de uma classe (One-class SVM)
  • Floresta de Isolamento (Isolation Forest)
  • Detecção de anomalias baseada em autoencoders (autoencoder-based anomaly detection)

Essas abordagens funcionam melhor quando:

  • negativos são bem definidos e estáveis,
  • anomalias são genuinamente “diferentes”,
  • você consegue tolerar taxas mais altas de falsos positivos inicialmente.

Veja Detecção de Anomalias.

6) Aprendizado positivo-não rotulado (positive-unlabeled (PU) learning) (quando negativos contêm positivos ocultos)

Em muitos sistemas reais, apenas positivos são rotulados de forma confiável (ex.: fraude confirmada), enquanto “negativos” são apenas não investigados.

PU learning trata os dados como:

  • positivos rotulados
  • não rotulados (mistura de positivos e negativos)

Isso evita treinar o modelo para prever “negativo” com confiança apenas porque algo ainda não foi pego. Técnicas de PU frequentemente exigem suposições sobre o mecanismo de rotulagem ou uma estimativa da priori de classe (class prior).

Isso se conecta a Aprendizado Semissupervisionado.

Modelagem de cauda longa (multiclasse ou multirrótulo)

Problemas de cauda longa aparecem em:

  • categorização de produtos (muitas categorias raras),
  • classificação de entidades ou intenções,
  • rótulos de moderação de granulação fina.

Os desafios diferem do desbalanceamento binário: você precisa preservar o desempenho nas classes de cabeça enquanto melhora as classes de cauda com poucos exemplos.

Estratégias que frequentemente funcionam

Reponderação / rebalanceamento (reweighting / rebalancing)

  • Pesos baseados na frequência de classe (frequência inversa, número efetivo de amostras (effective number of samples)).
  • Cuidado: ponderação agressiva pode prejudicar o desempenho da cabeça e a calibração.

Ajuste de logit

  • Ajustar logits com base em prioris de classe para contrabalançar o viés em direção às classes de cabeça.
  • Útil quando a distribuição de treino difere das prioris de implantação (deployment priors).

Treinamento desacoplado (decoupled training)

  • Treinar representações em todos os dados e, depois, treinar uma cabeça do classificador (classifier head) com rebalanceamento (comum na literatura de cauda longa em visão).
  • Motivado pela ideia de que o aprendizado de representações (representation learning) se beneficia de dados abundantes da cabeça, enquanto o aprendizado do classificador precisa de correção para a cauda.

Rótulos hierárquicos

  • Se você tem uma taxonomia (“animal → cachorro → raça”), a classificação hierárquica compartilha força estatística.
  • Mesmo abordagens simples (prever grosso e depois fino) podem ajudar rótulos de cauda.

Aprendizado de métricas (metric learning) / recuperação (retrieval)

  • Para caudas extremas, a recuperação por vizinho mais próximo (nearest-neighbor retrieval) no espaço de embeddings (embeddings) pode superar classificadores paramétricos (parametric classifiers) — especialmente quando novas classes de cauda aparecem (cenários de mundo aberto (open-world settings)).
  • Frequentemente combinado com codificadores de Redes Neurais e aprendizado contrastivo (contrastive learning).

Táticas de dados para caudas longas

  • Coletar exemplos direcionados para classes de cauda (curadoria ativa).
  • Usar aumento de dados (augmentation) (paráfrases de texto, transformações de imagem) com cuidado; ajuda mais quando preserva a semântica do rótulo.
  • Auditar rótulos de cauda para inconsistência — classes de cauda frequentemente têm a pior qualidade de rótulo.

Sinais esparsos: quando o padrão é fraco ou de alta dimensionalidade

Problemas de sinais esparsos são comuns em aprendizado de máquina tabular com muitos atributos e poucos fatores realmente determinantes.

Ferramentas comuns:

  • Regularização (regularization): L1 / Elastic Net (Elastic Net) para reduzir atributos de ruído (veja Engenharia de Atributos para armadilhas de vazamento/codificação).
  • Métodos baseados em árvores (tree-based methods) (ex.: Boosting de Gradiente) podem capturar interações esparsas, mas ainda podem precisar de pesos de classe.
  • Hashing de atributos (feature hashing) / embeddings para categóricas de alta cardinalidade (cenários tipo CTR), com tratamento cuidadoso de categorias raras.
  • Agregação temporal (temporal aggregation): para dados de eventos, uma boa definição de janelas (windowing) pode transformar sinais esparsos em atributos estáveis (contagens, taxas, recência).

Sinais esparsos também amplificam a importância de divisões corretas de avaliação; sobreajuste (overfitting) pode parecer progresso quando há poucos positivos.

Calibração de probabilidade e mudança de priori

Probabilidades de eventos raros frequentemente são usadas a jusante para ranqueamento, triagem ou estimativa de custo. Dois problemas surgem:

  1. Reamostragem e ponderação podem distorcer probabilidades.
  2. A taxa de positivos (prevalência) pode mudar entre treino e implantação (mudança de priori (prior shift)).

Respostas comuns:

  • Calibrar probabilidades em um conjunto de validação que reflita a implantação (escalonamento de Platt (Platt scaling), regressão isotônica (isotonic regression)). Veja Calibração de Probabilidade.
  • Se você deliberadamente subamostra negativos para treinar, acompanhe as taxas de amostragem para poder corrigir as chances (odds) previstas (especialmente para modelos logísticos).
  • Monitore a calibração ao longo do tempo; deriva é comum em aplicações de eventos raros.

Fluxo de trabalho prático: uma receita repetível

Etapa 1: Defina o objetivo operacional

Exemplos:

  • “Investigar 500 alertas/dia; maximizar a fraude real capturada.”
  • “Atingir 95% de revocação com o mínimo de falsos positivos.”
  • “A qualidade do ranking top-100 importa, não o desempenho com limiar global.”

Isso determina se você deve otimizar PR-AUC, Precisão@K, revocação com taxa fixa de falsos positivos, etc.

Etapa 2: Construa uma linha de base com forte higiene de avaliação

  • Estratégia correta de divisão (temporal, se necessário).
  • Reporte métricas de linha de base incluindo curvas PR e top‑K.
  • Adicione intervalos de confiança (confidence intervals) ou execuções repetidas (repeated runs) quando positivos são minúsculos (a variância (variance) é alta).

Etapa 3: Escolha uma estratégia de desbalanceamento (comece simples)

Uma boa progressão padrão:

  1. Pesos de classe
  2. Ajuste de limiar para a métrica escolhida
  3. Tente reamostragem se o aprendizado da fronteira de decisão estiver fraco
  4. Considere perda focal / objetivos especializados para aprendizado profundo
  5. Considere PU learning / detecção de anomalias se os rótulos estiverem incompletos

Etapa 4: Ajuste limiares nos dados de validação (não no teste)

Uma varredura simples de limiar (threshold sweep) costuma ser extremamente eficaz:

import numpy as np
from sklearn.metrics import precision_recall_curve

scores = model.predict_proba(X_val)[:, 1]
prec, rec, thr = precision_recall_curve(y_val, scores)

# Example: pick threshold achieving at least 0.80 recall with best precision
target_recall = 0.80
mask = rec >= target_recall
best_idx = np.argmax(prec[mask])
best_thr = thr[mask][best_idx]
print("Chosen threshold:", best_thr)

Etapa 5: Itere melhorias de dados

Especialmente para eventos raros:

  • revisar falsos positivos/negativos,
  • corrigir inconsistências de rótulos,
  • adicionar cobertura para subtipos ausentes,
  • melhorar definições de atributos e controles de vazamento.

Isso se conecta diretamente a IA Centrada em Dados.

Armadilhas comuns

  • Otimizar acurácia (ou apenas ROC-AUC) e colocar em produção um modelo inútil.
  • Superamostrar antes de dividir, causando vazamento entre treino e teste (train–test leakage).
  • Ignorar calibração, e então usar escores como probabilidades em decisões a jusante.
  • Usar um limiar fixo de 0,5 apesar de desbalanceamento extremo de classe.
  • Não considerar deriva: mecanismos de eventos raros mudam; os negativos de ontem podem não representar os de amanhã.
  • Tratar não rotulados como negativos quando o processo de rotulagem é incompleto (cenário PU).
  • Sobreajustar devido a contagens minúsculas de positivos: poucos exemplos podem dominar a parada antecipada (early stopping) e as escolhas de hiperparâmetros (hyperparameter choices).

Escolhendo modelos: o que tende a funcionar bem

Não existe uma única família de modelos “melhor”, mas estes padrões são comuns:

  • Modelos lineares (linear models) (ex.: Regressão Logística) com bons atributos e pesos de classe são linhas de base fortes; também são mais fáceis de calibrar.
  • Árvores com boosting de gradiente (gradient-boosted trees) frequentemente são excelentes para problemas tabulares de eventos raros; lidam bem com não linearidade e interações.
  • Aprendizado profundo (deep learning) brilha quando você tem dados não estruturados (texto/imagens) ou conjuntos de dados enormes (CTR), mas requer desenho cuidadoso de perda, amostragem e calibração.

Veja Modelos para uma visão mais ampla de famílias de modelos.

Resumo

A modelagem de eventos raros / desbalanceados é menos sobre um único truque e mais sobre alinhar todo o pipeline — dados, objetivos, avaliação e decisões — ao fato de que positivos são raros e custosos.

Principais conclusões:

  • Use métricas focadas em PR e avaliação operacional (top‑K, revocação com orçamento fixo de falsos positivos).
  • Trate o desbalanceamento com pesos de classe, reamostragem ou perdas especializadas; ajuste limiares explicitamente.
  • Espere problemas de dados (ruído de rótulos, positivos ausentes, deriva) e invista em iteração centrada em dados.
  • Para caudas longas, combine rebalanceamento com aprendizado de representações e considere hierarquias ou métodos de recuperação.
  • Trate saídas de probabilidade com cuidado: calibre e monitore mudança de priori.

Quando feito corretamente, a modelagem de eventos raros transforma problemas de “agulha no palheiro” em sistemas de decisão confiáveis que são mensuráveis, ajustáveis e sustentáveis em produção.