Lidando com Classificação Desbalanceada

A maioria dos problemas de classificação do mundo real é desbalanceada. Fraude, doenças, churn e defeitos são raros por natureza. Os classificadores padrão perseguem a precisão, então eles silenciosamente ignoram a classe que você mais se importa. Durante anos, a técnica SMOTE foi a solução mais utilizada para lidar com o desbalanceamento. No entanto, a SMOTE muitas vezes falha nos dados desordenados e de alta dimensionalidade que os sistemas de produção realmente veem. Este guia vai além da SMOTE. Você aprenderá sobre aprendizado sensível ao custo, funções de perda modernas, conjuntos balanceados, detecção de anomalias e as métricas que expõem o que realmente funciona.

O desbalanceamento de classes descreve uma distribuição inclinada entre as classes de destino que você deseja prever. O grupo menor é a classe minoritária, e o grupo maior é a classe majoritária. Normalmente, expressamos a inclinação como uma razão de desbalanceamento, como 100:1. Uma razão de 100:1 significa que um caso raro aparece para cada cem casos comuns. A classe minoritária é quase sempre a que tem valor comercial. Transações fraudulentas, tumores malignos e clientes que abandonam são raros, mas caros para serem perdidos. Portanto, o custo dos erros é assimétrico, e essa assimetria deve orientar todas as suas escolhas de modelagem.

O desbalanceamento é a regra, não a exceção, em aprendizado de máquina aplicado. A classe rara é o sinal, e a classe comum é o ruído de fundo. Os seguintes domínios compartilham essa estrutura, e cada um recompensa o manejo cuidadoso da classe minoritária. A precisão mede a parcela de previsões corretas em todas as classes igualmente. Isso soa razoável até que uma classe domine o conjunto de dados. Com uma classe majoritária de 98%, um modelo pode atingir 98% de precisão prevendo nada útil. Ele simplesmente rotula cada caso como a classe majoritária e nunca encontra o evento raro.

Isso é por que a precisão mente em dados desbalanceados. Um alto escore pode esconder um modelo que é completamente cego para a classe minoritária. Você precisa de métricas que se concentrem na classe rara, como precisão, recall e PR-AUC. Voltaremos a essas métricas em detalhes mais tarde. Antes de comparar técnicas, precisamos de um conjunto de dados consistente e um baseline claro. Um playground compartilhado nos permite julgar cada método em igualdade de condições. Vamos criar um conjunto de dados sintéticos de fraude com desbalanceamento pesado. Em seguida, treinaremos um classificador ingênuo para mostrar exatamente como a precisão engana.

Geramos um conjunto de dados binário com 20.000 amostras e uma classe minoritária de cerca de 2%. Isso imita um cenário de fraude ou evento raro realista sem precisar de dados privados. Usar dados sintéticos mantém os exemplos reproduzíveis em qualquer máquina. Você pode substituir seu próprio conjunto de dados mais tarde com quase nenhuma alteração de código. Os exemplos dependem de uma pilha padrão pequena do ecossistema Python. Cada biblioteca desempenha um papel específico no fluxo de trabalho de aprendizado desbalanceado. Instale-as com pip antes de executar qualquer código abaixo.

Primeiro, criamos o conjunto de dados e inspecionamos sua distribuição de classes. Sempre olhe para as contagens brutas antes de modelar qualquer coisa. Também dividimos os dados com estratificação para preservar a razão de desbalanceamento. A divisão estratificada mantém a parcela minoritária consistente em conjuntos de treinamento e teste.

Agora, treinamos uma regressão logística simples sem lidar com o desbalanceamento. Em seguida, comparamos sua precisão com seu recall na classe minoritária. A lacuna entre esses dois números é o coração do problema. Observe como uma alta precisão esconde um modelo quase inútil. O modelo alcança 97,8% de precisão, mas captura apenas 12,9% dos casos de fraude. Um modelo que prevê cegamente “não fraude” alcança 97,5% de precisão. Portanto, nosso modelo treinado mal supera a previsão aleatória. Esse resultado único motiva todas as técnicas no restante do guia.

A SMOTE é a resposta mais famosa ao desbalanceamento de classes, então ela merece um resumo justo. Ela lida com o desbalanceamento no nível dos dados, inventando novos exemplos da classe minoritária. Entender como ela funciona explica seu apelo e seus modos de falha. Vamos revisar o mecanismo antes de testá-la.

A SMOTE significa Técnica de Sobre-amostragem de Minorias Sintéticas. Em vez de copiar pontos minoritários, ela cria novos pontos por interpolação. Ela seleciona uma amostra minoritária, encontra seus vizinhos minoritários mais próximos e desenha um novo ponto entre eles. Isso preenche a região minoritária em vez de simplesmente duplicar linhas existentes.

O objetivo é um conjunto de treinamento mais equilibrado sem sobre-duplicação simples. Em teoria, o classificador vê uma distribuição minoritária mais rica. Na prática, a qualidade desses pontos sintéticos depende fortemente dos dados. Essa dependência é exatamente onde a SMOTE começa a lutar.

Pesquisadores construíram muitas variantes da SMOTE para corrigir suas fraquezas. Cada uma muda como ou onde as amostras sintéticas são criadas. As variantes mais comuns estão disponíveis diretamente na biblioteca imbalanced-learn. Aqui, aplicamos a SMOTE dentro de um pipeline adequado e verificamos os resultados. Resamostramos apenas os dados de treinamento, nunca os dados de teste. Observe as contagens de classes antes e depois e o deslocamento nos escores. Preste atenção especial ao que acontece com a precisão e o recall.

A SMOTE eleva o recall, mas não é uma solução mágica.