Mudança de Dataset
O que é deslocamento de conjunto de dados?
Deslocamento de conjunto de dados (dataset shift) (frequentemente chamado de deslocamento de distribuição (distribution shift)) acontece quando a distribuição dos dados que um modelo vê em produção difere da distribuição na qual ele foi treinado. Formalmente, se exemplos de treinamento são extraídos de uma distribuição conjunta (P_{\text{train}}(X, Y)), mas os dados de implantação vêm de (P_{\text{prod}}(X, Y)), então ocorre deslocamento de conjunto de dados quando:
[ P_{\text{prod}}(X, Y) \neq P_{\text{train}}(X, Y) ]
Isso importa porque a maioria dos procedimentos de treinamento em aprendizado de máquina (machine learning) — especialmente a minimização de risco empírico (empirical risk minimization, ERM) — assume implicitamente que os dados de treino e teste são i.i.d. (independentes e identicamente distribuídos; independent and identically distributed). Quando essa suposição falha, o modelo pode generalizar mal, levando a piora de acurácia, probabilidades não confiáveis, resultados injustos ou comportamento inseguro.
Um exemplo concreto
Suponha que você treine um classificador de fotos para detectar “trabalhador da construção” vs “não” usando imagens tiradas principalmente durante o dia (distribuição de treinamento). Em produção, o sistema é implantado à noite com câmeras de baixa luminosidade (distribuição de produção). Mesmo que o conceito subjacente “como é a aparência de um trabalhador da construção” não tenha mudado, a distribuição de entrada (input distribution) mudou — levando a mais erros.
O deslocamento de conjunto de dados é uma preocupação central em sistemas de Qualidade de Dados e Deriva (Data Quality & Drift) porque ele costuma ser sutil, contínuo e com impacto no negócio.
Por que o deslocamento de conjunto de dados degrada o desempenho (intuição e teoria)
Um modelo supervisionado normalmente minimiza a perda esperada (expected loss) na distribuição de treinamento:
[ \mathbb{E}{(X,Y)\sim P{\text{train}}}\left[\ell(f(X), Y)\right] ]
Mas o que realmente importa é o desempenho em produção:
[ \mathbb{E}{(X,Y)\sim P{\text{prod}}}\left[\ell(f(X), Y)\right] ]
Se as duas expectativas são avaliadas sob distribuições diferentes, então um modelo “ótimo” para o treinamento pode ser subótimo (ou até inseguro) em produção. Na prática, o deslocamento de conjunto de dados pode:
- Levar dados de produção a regiões do espaço de características com menos suporte de treinamento (extrapolação (extrapolation)).
- Quebrar correlações nas quais o modelo se apoiava (características espúrias (spurious features)).
- Alterar taxas-base ou limiares de decisão necessários para uma métrica-alvo (trade-offs de precisão/recall (precision/recall tradeoffs)).
- Tornar as probabilidades previstas mal calibradas (miscalibrated) (por exemplo, um score 0,9 deixa de significar ~90% de chance).
Tipos comuns de deslocamento de conjunto de dados
Deslocamento de conjunto de dados é um termo “guarda-chuva”; os subtipos mais comuns são definidos por quais partes da distribuição conjunta mudam.
Seja (X) as entradas/características e (Y) os rótulos/alvos.
Deslocamento de covariáveis (covariate shift) (deslocamento da distribuição de entrada)
Definição: (P(X)) muda, mas (P(Y \mid X)) permanece igual.
[ P_{\text{prod}}(X) \neq P_{\text{train}}(X) \quad \text{and} \quad P_{\text{prod}}(Y\mid X) = P_{\text{train}}(Y\mid X) ]
Intuição: O “mundo” é o mesmo, mas você está vendo uma mistura diferente de entradas.
Exemplos
- Detecção de spam: Novos tipos de templates de e-mail aparecem (frequências de palavras diferentes), mas “o que constitui spam dadas as palavras” é majoritariamente estável.
- Imagem médica: Um hospital atualiza os scanners. As distribuições de pixels mudam, mas o mapeamento de anatomia para diagnóstico permanece, em princípio, inalterado.
- Recomendadores: Uma nova interface muda o que usuários clicam (características observadas diferentes), mas a preferência do usuário condicionada às características ainda pode ser similar.
Notas: O deslocamento de covariáveis é um dos deslocamentos mais estudados porque admite uma mitigação direta via ponderação por importância (importance weighting) (ver abaixo), embora a suposição de (P(Y\mid X)) inalterado muitas vezes seja verdadeira apenas aproximadamente.
Deslocamento de rótulos (label shift) (deslocamento de probabilidade a priori)
Definição: A marginal dos rótulos (P(Y)) muda, mas a distribuição de características condicionada à classe (P(X \mid Y)) permanece igual.
[ P_{\text{prod}}(Y) \neq P_{\text{train}}(Y) \quad \text{and} \quad P_{\text{prod}}(X\mid Y) = P_{\text{train}}(X\mid Y) ]
Intuição: A prevalência dos resultados muda, mas como uma classe “se parece” não muda.
Exemplos
- Detecção de fraude: Durante feriados, a taxa de fraude aumenta (mais fraude no total), mas padrões por caso de fraude permanecem similares.
- Triagem de doenças: A prevalência muda entre regiões ou estações, mas sintomas condicionados à doença são estáveis.
- Moderação de conteúdo: Um evento súbito aumenta a proporção de conteúdo abusivo.
Por que prejudica: Mesmo com um modelo de verossimilhança perfeito, mudanças nos priors alteram o limiar de decisão ótimo. Isso também altera métricas como precisão em um limiar fixo.
Deriva de conceito (concept drift) (mudanças na relação da tarefa)
Definição: A distribuição condicional (P(Y \mid X)) muda. Isso é frequentemente o que as pessoas querem dizer com “o conceito mudou”.
[ P_{\text{prod}}(Y\mid X) \neq P_{\text{train}}(Y\mid X) ]
Intuição: As regras do mundo mudaram (ou sua definição de rótulo mudou).
Exemplos
- Predição de cliques em anúncios: O comportamento do usuário evolui, concorrentes mudam preços, e o que impulsiona cliques muda.
- Fraude: Atacantes se adaptam a sistemas de detecção, mudando o mapeamento de características de transações para fraude.
- Mudanças de política: Uma política de aprovação de empréstimos ou diretriz de rotulagem muda, alterando a relação entre entradas e rótulos.
A deriva de conceito é importante o suficiente para merecer tratamento separado; veja o artigo dedicado Deriva de Conceito.
Outros deslocamentos relacionados (vale a pena conhecer)
- Deslocamento de covariáveis condicional / deslocamento de domínio (domain shift): Tanto (P(X)) quanto (P(Y\mid X)) podem mudar, por exemplo, nova câmera + novo ambiente.
- Viés de seleção / ausente-não-ao-acaso (missing-not-at-random): Os dados que você observa são filtrados (por exemplo, apenas usuários que dão opt-in), mudando distribuições.
- Efeitos temporais / sazonais: Não necessariamente “ruins”, mas devem ser modelados/monitorados corretamente (por exemplo, fins de semana vs dias úteis).
Como detectar e monitorar deslocamento de conjunto de dados
A detecção de deslocamento depende de quais sinais você consegue acessar em produção:
- Monitoramento sem rótulos (unlabeled monitoring): Você tem (X) (e as saídas do modelo), mas ainda não tem o (Y) verdadeiro (comum em sistemas reais).
- Monitoramento com rótulos (labeled monitoring): Você eventualmente recebe rótulos (com atraso), permitindo acompanhar desempenho diretamente.
Um sistema de monitoramento robusto normalmente combina ambos.
1) Monitorar distribuições de características (deriva sem rótulos)
Acompanhe se as distribuições de características em produção diferem das do treinamento (ou de uma linha de base recente). Abordagens comuns:
- Testes/métricas univariadas (por característica):
- Teste de Kolmogorov–Smirnov (KS) para características contínuas
- Teste qui-quadrado para características categóricas
- Population Stability Index (PSI) (popular em risco de crédito)
- Estatísticas-resumo (média/variância/quantis), taxas de ausência de valores (missingness), mudanças de cardinalidade (cardinality)
- Testes/métricas multivariadas (capturam interações):
- Discrepância Máxima de Médias (Maximum Mean Discrepancy, MMD)
- Distância de energia (Energy distance)
- Distância de Wasserstein (Wasserstein distance) (transporte ótimo (optimal transport))
- Deriva em incorporações aprendidas (ver abaixo)
Exemplo prático (teste KS para uma característica numérica)
import numpy as np
from scipy.stats import ks_2samp
# x_train: feature values from training/reference
# x_prod: recent production window
stat, p_value = ks_2samp(x_train, x_prod)
if p_value < 0.01:
print("Alert: distribution shift detected for this feature")
Importante: Com amostras grandes, p-values podem ficar minúsculos mesmo para deslocamentos negligenciáveis. Na prática, combine testes estatísticos com tamanhos de efeito (effect sizes) (por exemplo, distância de Wasserstein) e limiares orientados ao negócio.
2) Monitorar deriva de representação (deriva de embedding (embedding drift))
Em sistemas modernos, características brutas podem ser de alta dimensão (texto, imagens, vetores de características profundos). Uma abordagem comum:
- Converter entradas em representações vetoriais (embeddings) (por exemplo, a partir de uma Arquitetura Transformer (Transformer Architecture) para texto).
- Monitorar deriva nas distribuições de representações vetoriais usando:
- deslocamento do centróide (centroid shift), deslocamento de covariância (covariance shift)
- distâncias MMD/Wasserstein no espaço de representações vetoriais
- mudanças de agrupamento (clustering) (por exemplo, surgimento de novos clusters)
Isso frequentemente detecta deslocamentos significativos com mais confiabilidade do que contagens de tokens brutos ou pixels.
3) Monitorar saídas do modelo (monitoramento “comportamental” sem rótulos)
Mesmo sem rótulos, você pode monitorar se o modelo está se comportando de forma diferente:
- Proporções de classes previstas (podem indicar deslocamento de rótulos ou instabilidade do modelo)
- Distribuições de scores (por exemplo, histogramas de probabilidade)
- Entropia da predição / confiança (prediction entropy / confidence) (incerteza crescente pode sinalizar entradas fora da distribuição (out-of-distribution))
- Proxies de calibração (não é calibração real sem rótulos, mas mudanças abruptas na distribuição de scores podem ser informativas)
Isso é especialmente útil quando seu espaço de características é difícil de interpretar.
Tópico relacionado: Detecção Fora da Distribuição (Out-of-Distribution Detection)
4) Teste de duas amostras baseado em classificador (classifier-based two-sample testing) (poderoso, prático)
Um método geral e forte: treinar um classificador de domínio (domain classifier) para distinguir amostras de treino vs produção usando apenas (X).
- Rotule amostras de treinamento como 0, amostras de produção como 1.
- Treine um classificador (g(X)).
- Se (g) obtém AUC alta, as distribuições diferem.
Por que funciona: Se um modelo consegue dizer de forma confiável de qual distribuição uma amostra veio, as distribuições não são as mesmas.
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
from sklearn.linear_model import LogisticRegression
X_ref = ... # reference features
X_prod = ... # recent production features
X = np.vstack([X_ref, X_prod])
y = np.hstack([np.zeros(len(X_ref)), np.ones(len(X_prod))])
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.3, random_state=0)
clf = LogisticRegression(max_iter=1000)
clf.fit(Xtr, ytr)
auc = roc_auc_score(yte, clf.predict_proba(Xte)[:, 1])
if auc > 0.7:
print(f"Shift alert: domain classifier AUC={auc:.3f}")
Você também pode inspecionar importâncias de características (ou valores SHAP (SHAP values)) para ver quais características impulsionam o deslocamento — útil para depurar pipelines de dados.
5) Monitorar desempenho diretamente (monitoramento com rótulos)
Quando os rótulos chegam (imediatamente ou com atraso), monitore:
- Métricas da tarefa (acurácia, AUROC, F1, log loss)
- Métricas por fatias (slice metrics) (por região, tipo de dispositivo, coorte de usuários)
- Métricas ponderadas por custo alinhadas aos resultados de negócio
- Métricas de calibração (ECE, Brier score) se saídas probabilísticas forem importantes
Se o desempenho cair sem sinais fortes de deriva de entrada, suspeite de deriva de conceito ou de um problema no pipeline de rótulos.
Tópico relacionado: Avaliação de Modelos
6) Usar detecção de ponto de mudança (change-point detection) para séries temporais
O deslocamento é frequentemente temporal. Aplique detecção de ponto de mudança a métricas de deriva ou métricas de desempenho:
- Testes CUSUM / Page-Hinkley
- ADWIN (adaptive windowing)
- Cartas de controle (control charts) (Shewhart, EWMA)
Isso ajuda a distinguir ruído de mudanças reais na distribuição e pode disparar alertas com menos falsos positivos.
Estratégias práticas de mitigação
A mitigação depende do tipo de deslocamento, dos rótulos disponíveis e das restrições operacionais (latência, regulação, capacidade de retreinar). Na prática, equipes costumam combinar múltiplas táticas.
1) Reponderação / ponderação por importância (comum para deslocamento de covariáveis)
Se o deslocamento de covariáveis se mantiver ((P(Y\mid X)) estável), você pode corrigir o objetivo de treinamento ponderando exemplos para imitar a produção:
[ \mathbb{E}{P{\text{prod}}}[\ell] \approx \mathbb{E}{P{\text{train}}}\left[w(X),\ell\right] \quad \text{where} \quad w(x) = \frac{p_{\text{prod}}(x)}{p_{\text{train}}(x)} ]
Como estimar pesos na prática
- Estimar densidades diretamente é difícil em alta dimensão.
- Um truque comum: usar o método baseado em classificador acima; se (g(x)=P(\text{prod}\mid x)), então uma razão de densidades pode ser derivada a partir de (g(x)) (até priors de classe).
Quando ajuda
- Os dados de produção são “como os de treinamento, mas com frequências diferentes”.
- Há sobreposição suficiente; se a produção contém regiões ausentes no treinamento, os pesos podem explodir e a variância fica enorme.
Tópicos relacionados: Adaptação de Domínio (Domain Adaptation), Amostragem por Importância (Importance Sampling)
2) Correção de deslocamento de rótulos (ajustar priors e limiares)
Quando o deslocamento de rótulos se mantém ((P(X\mid Y)) estável), você pode estimar os novos priors de rótulos em produção e ajustar previsões.
Uma família comum de abordagens:
- Black Box Shift Estimation (BBSE) usa a matriz de confusão do modelo em dados de validação e as frequências de rótulos previstas em produção para inferir novos priors.
- Métodos no estilo EM reestimam iterativamente priors e posteriores.
Conclusão prática: Mesmo sem retreinamento, recalibrar limiares de decisão para a nova taxa-base pode recuperar grande parte da precisão/recall perdida.
Exemplo: Se a taxa de fraude dobra, um limiar ajustado para priors antigos pode produzir falsos positivos demais; atualizar o limiar pode restaurar a precisão operacional.
3) Recalibração de probabilidades (quando scores se tornam não confiáveis)
Mesmo que a acurácia se mantenha, probabilidades previstas podem ficar mal calibradas sob deslocamento. Se decisões a jusante dependem de estimativas de risco (medicina, crédito), a recalibração é crítica.
Métodos comuns:
- Escalonamento por temperatura (temperature scaling) (frequente em redes profundas)
- Escalonamento de Platt (Platt scaling) (regressão logística sobre logits)
- Regressão isotônica (isotonic regression)
Esses métodos exigem dados rotulados de (ou próximos da) distribuição de produção.
Tópico relacionado: Calibração de Modelos
4) Retreinamento (a solução “trator”)
Quando o deslocamento é persistente (especialmente deriva de conceito), retreinar costuma ser a correção mais confiável.
Padrões operacionais-chave:
- Retreinamento agendado: por exemplo, atualização semanal/mensal usando uma janela deslizante (rolling window)
- Retreinamento acionado: retreinar quando monitores de deriva/desempenho cruzam limiares
- Warm-start / ajuste fino (fine-tuning): começar a partir do modelo anterior para convergência mais rápida (comum em aprendizado profundo (deep learning))
- Implantação em sombra (shadow deployment) + testes A/B (A/B tests): validar novos modelos antes do rollout completo
Boas práticas de retreinamento incluem:
- Conjuntos de dados e características versionados
- Pipelines reprodutíveis
- Guardrails para evitar regressões em fatias importantes
- Teste retrospectivo (backtesting) e teste de estresse (stress testing) em períodos históricos com deslocamentos conhecidos
Tópico relacionado: Operações de Aprendizado de Máquina (Machine Learning Operations)
5) Treinamento robusto e generalização de domínio (domain generalization) (reduzir sensibilidade ao deslocamento)
Você pode tornar modelos proativamente menos frágeis:
- Aumento de dados (data augmentation): simular condições plausíveis de implantação (mudanças de iluminação, ruído, paráfrases)
Tópico relacionado: Aumento de Dados - Regularização (regularization) e invariância (invariance): reduzir dependência de correlações espúrias
- Otimização robusta à distribuição (distributionally robust optimization, DRO): otimizar para o pior caso dentro de um conjunto de deslocamentos
- Conjuntos (ensembles): reduzir variância e melhorar estimativas de incerteza
Essas abordagens não eliminam o deslocamento, mas podem reduzir quedas abruptas de desempenho.
6) Humano-no-loop (human-in-the-loop) e aprendizado ativo
Quando você detecta deriva mas não tem rótulos, uma resposta prática é adquirir rótulos de forma estratégica:
- Amostrar casos incertos ou de alto impacto
- Rotular exemplos de novos clusters emergentes no espaço de representações vetoriais
- Usar aprendizado ativo (active learning) para maximizar o valor do orçamento de rotulagem
Tópico relacionado: Aprendizado Ativo
7) Estratégias de contingência e degradação segura
Para sistemas de alto risco, projete salvaguardas operacionais:
- Opção de abstenção/rejeição (abstain/reject option) quando a incerteza for alta
- Encaminhar para revisão humana
- Voltar para um modelo baseline conservador
- Aplicar limitação de taxa (rate-limit) em decisões automatizadas durante eventos suspeitos de deriva
Isso não “corrige” o deslocamento, mas reduz danos enquanto a mitigação está em andamento.
Juntando tudo: um fluxo de trabalho prático
Uma abordagem ponta a ponta comum em ML em produção:
- Estabelecer uma distribuição de referência
- Use dados de treinamento ou, melhor: um período recente “dourado” conhecido por estar saudável.
- Implementar monitores de entrada e saída
- Deriva de características, ausência de valores, mudanças de esquema (schema changes), distribuições de scores.
- Adicionar detecção de deriva com classificador de domínio
- Fornece um sinal sensível e multivariado e ajuda a identificar os fatores causadores.
- Acompanhar desempenho quando os rótulos chegarem
- Métricas em janela móvel + análise por fatias.
- Triar o tipo de deslocamento
- Parecido com covariáveis? Tente reponderação ou aumento de dados.
- Parecido com rótulos? Atualize priors/limiares.
- Condicional/deriva de conceito? Retreine e revisite características/rótulos.
- Mitigar e validar
- Recalibre, retreine, ou ambos; avalie em dados recentes e em fatias críticas.
- Fechar o ciclo
- Atualize monitores, limiares e procedimentos operacionais (playbooks) com base no incidente.
Armadilhas e equívocos comuns
- “Detectamos deriva de características, então o desempenho deve estar pior.”
Não necessariamente. Parte da deriva é benigna (sazonalidade) ou irrelevante para o modelo. - “Nenhuma deriva detectada, então estamos seguros.”
Deriva de conceito pode ocorrer com pouca deriva de covariáveis; monitoramento de desempenho ainda é necessário. - Excesso de alertas devido a amostras grandes
Significância estatística não é o mesmo que significância prática. - Ignorar efeitos da distribuição conjunta
Verificações univariadas por característica podem perder deslocamentos multivariados (interações entre características). - Confundir deslocamento de rótulos com deriva de conceito
Ambos podem mudar frequências de classes, mas as correções diferem (ajuste de limiar vs retreinamento/trabalho em características).
Resumo
Deslocamento de conjunto de dados é a discrepância entre as distribuições de dados de treinamento e de implantação, e é um dos principais motivos pelos quais modelos degradam após serem implantados. As formas mais comuns — deslocamento de covariáveis ((P(X)) muda), deslocamento de rótulos ((P(Y)) muda) e deriva de conceito ((P(Y\mid X)) muda) — sugerem diferentes estratégias de detecção e mitigação.
Na prática, o tratamento robusto de deslocamento de conjunto de dados combina:
- Detecção: métricas de deriva de características/representações vetoriais, classificadores de domínio, monitoramento de saídas e acompanhamento de desempenho com rótulos
- Mitigação: reponderação por importância, correção de prior de rótulos, recalibração, retreinamento/aprendizado contínuo e técnicas de robustez
- Operações: monitoramento, alertas, controle de dados/versões e playbooks de incidentes
Dentro do tema mais amplo de “Qualidade de Dados e Deriva”, o deslocamento de conjunto de dados fornece a lente geral, enquanto Deriva de Conceito foca especificamente em mudanças na relação subjacente entre entrada e rótulo.