Machine Learning · Insper

Dados Desbalanceados

Abordagem avançada

O que cada remédio de fato muda quando a classe de interesse é 2%

O caminho desta parte

  1. O que dá errado2% de fraude: acurácia alta, recall baixo; o problema é o modelo ou o limiar?
  2. Três remédiospesos de classe, limiar deslocado, reamostragem e SMOTE (Synthetic Minority Over-sampling Technique)
  3. Lado a ladocinco abordagens na mesma divisão, uma curva só
  4. Duas armadilhasreamostrar antes da divisão; probabilidades distorcidas
Cada etapa responde a uma pergunta: o que uma classe rara quebra? → o que dá para mudar: a perda, o corte ou as linhas? → o que cada remédio mudou de fato? → como um remédio pode enganar?
Etapa 1 · O que uma classe rara quebra?

O que dá errado

Triagem de fraude simulada: 20.000 transações, cerca de 2% fraudulentas, divisão estratificada.

valor
acurácia do dummy que nunca sinaliza0,9805
acurácia do modelo0,9838
transações sinalizadas em 0,523 de 4.000 (78 fraudes reais)
recall0,231
ROC AUC (área sob a curva ROC)0,930
A acurácia de 98,38% não diz nada: o dummy já tem 98,05%. Mas a ordenação é boa — em 93% dos pares, a fraude recebe o escore maior.

O diagnóstico importa

  • A transação mediana recebe probabilidade 0,003; 60 das 78 fraudes ficam abaixo de 0,5.
  • Isso é honesto: com taxa base de 2%, mesmo uma transação suspeita costuma ser mais provavelmente legítima do que não.
O modelo não é cego. O problema é o limiar e a métrica, não necessariamente o modelo.

Cada remédio age numa parte diferente — alguns mudam o ponto de operação, outros a ordenação — e é fácil confundi-los.

Etapa 2 · O que dá para mudar: a perda, o corte ou as linhas?

Três lugares para intervir

Nível dos dados, do algoritmo e da decisão, cada um apontando para uma etapa do caminho entre as linhas de treino e a decisão, com as ferramentas do imblearn de cada nível

Os dois primeiros níveis mudam o modelo e suas probabilidades; o terceiro só muda a decisão. ✓ = medido nesta aula.

Remédio 1: pesos de classe

\[ w_c = \frac{n}{k \cdot n_c} \qquad w_0 = \frac{12000}{2 \times 11767} = 0{,}510 \qquad w_1 = \frac{12000}{2 \times 233} = 25{,}751 \]
AUCAPsinalizadasrecallprecisão
sem pesos0,9300,459230,2310,783
balanced0,9290,4606730,8210,095

\(n\) linhas, \(k = 2\) classes, \(n_c\) linhas da classe \(c\). AP = precisão média (average precision), o resumo da curva precisão–recall.

As métricas de ordenação quase não se movem. O que se move é o ponto de operação em 0,5. Os pesos não tornaram o modelo melhor em separar fraudes: fizeram-no dizer "fraude" com muito mais frequência.

O que os pesos fizeram com os escores

Histogramas da probabilidade prevista: sem pesos tudo se acumula perto de 0; com pesos todos os escores se deslocam para a direita

Mesmo modelo, mesma separação: todos os escores apenas se deslocaram para a direita.

Na regressão logística as inclinações quase não mudam e o intercepto sobe 3,86 ≈ \(\log(n_0/n_1) = 3{,}92\): class_weight='balanced' é, na prática, um limiar deslocado.

Remédio 2: mover o limiar

Se os pesos deslocam o intercepto, dá para deslocar o limiar diretamente e não retreinar nada:

sinalizadasrecallprecisão
sem pesos, \(t = 0{,}0194\) (prevalência do treino)6850,8330,095
balanced, \(t = 0{,}5\)6730,8210,095
Mesmo ponto de operação, sem retreinar: as duas regras discordam em 42 de 4.000 transações. Muitas vezes este é o remédio mais barato — e o único que pode ser mudado depois da implantação sem mexer no modelo.

Remédio 3: reamostragem

  • Subamostragem: descarta linhas da maioria. Rápida, joga informação fora (11.534 de 11.767).
  • Sobreamostragem: duplica a minoria. Cada fraude se repete ~50 vezes; modelos flexíveis decoram as cópias.
  • SMOTE: cria pontos novos entre um ponto da minoria e um de seus vizinhos da minoria.
\[ x_{\text{new}} = x_i + \lambda\,(x_{nn} - x_i) \]
SMOTE num conjunto 2-D de brinquedo: pontos sintéticos sobre segmentos entre pontos da minoria
O SMOTE só olha vizinhos da minoria: ele traça sem problema um segmento atravessando uma região cheia da maioria. E reamostragem só pode tocar o treino — use o imblearn.pipeline, que pula o amostrador no predict.
Etapa 3 · O que cada remédio mudou de fato?

As cinco abordagens, lado a lado

modeloAUCAPR@0,5F1@0,5F1 ajustado\(t\)
sem pesos0,9300,4590,2310,3560,4490,22
pesos balanced0,9290,4600,8210,1700,4390,91
subamostragem0,9310,4640,8330,1660,4670,94
sobreamostragem0,9290,4610,8210,1690,4370,91
SMOTE0,9290,4530,8210,1760,4620,94
  • Ordenação idêntica nas cinco: AUC 0,929–0,931, AP 0,453–0,464. Nenhum remédio ensinou algo novo sobre fraude.
  • R = recall; F1 = média harmônica de precisão e recall.
  • No limiar ajustado (o de melhor F1 na validação) as diferenças somem: F1 entre 0,44 e 0,47. Mesmo ponto de operação, números diferentes no mostrador.
Reamostragem e pesos basicamente movem o ponto de operação; mover o limiar faz o mesmo, de graça.

Cinco remédios, uma curva

As curvas precisão–recall dos cinco remédios quase coincidem; em 0,5 eles ficam em pontas opostas da curva; nos limiares ajustados na validação, os cinco se reencontram
Mesma ordenação, mesma curva. Os remédios mudam onde o 0,5 corta; com um limiar ajustado para cada modelo, os cinco caem no mesmo trecho.
Etapa 4 · Como um remédio pode enganar?

A ordem importa: dividir, depois reamostrar

Ordem errada: sobreamostrar tudo e depois dividir, com um teste de 50% de fraudes e cópias do treino; ordem certa: dividir primeiro e sobreamostrar só o treino dentro do pipeline

Armadilha 1: reamostrar antes de dividir

amostrador + modeloerrado: R / Pcerto: R / P
sobreamostragem + k-NN (5 vizinhos)1,00 / 0,960,42 / 0,20
sobreamostragem + logística0,82 / 0,840,82 / 0,09
SMOTE + k-NN1,00 / 0,920,56 / 0,12
  • o teste está contaminado: cada fraude existe ~50 vezes, então quase toda fraude do "teste" tem cópias idênticas no treino; o k-NN as encontra;
  • o teste não tem mais a prevalência real: 50% de fraudes em vez de 2%, então a precisão de 0,84 não diz nada sobre produção.

Armadilha 2: probabilidades distorcidas

probabilidade média
taxa real de fraude no teste0,0195
modelo sem pesos0,0206
pesos balanced0,2370
SMOTE0,2227
balanced, corrigido0,0208
Pesos e reamostragem dizem ao modelo que as fraudes são 50% do mundo e ele acredita. Para uma ordenação ou uma decisão num limiar ajustado, tudo bem. Se você precisa do número em si (uma perda esperada, um risco mostrado a um médico, a fórmula \(t^*\)), não. Na logística a correção é exata: multiplique as chances por \(n_1/n_0\).

Uma ordem sensata de ataque

Nenhuma reamostragem inventa informação que os dados não têm.
Lab avançado · cerca de 35 min, em duplas

Remédios, limiar e o único teste: passos 6 a 11

  • Mesmo notebook do Colab, a partir do passo 6. Sessão nova? Ambiente de execução → Executar anteriores.
  • A meta foi declarada no começo do lab fundamental: recall ≥ 0,80 nos casos malignos, com a melhor precisão.
  • Simulações: o limiar que imita os pesos (passo 6) e comparar no limiar justo (passo 8).
  • Passos 9 a 11: escolher modelo e limiar, o teste único e a escada grosseira de um k-NN.

Ritmo: passos 6 e 7 com a simulação em 15 min; passo 8 e a simulação em 10 min; passos 9 a 11 em 10 min.