Data Leakage
O vazamento de dados introduz no treinamento ou na avaliação informações indisponíveis no momento da previsão, inflando pontuações que não se sustentam em produção. Veja causas e soluções.
O vazamento de dados em aprendizado de máquina (ML) ocorre quando os dados de treinamento ou a avaliação de um modelo incluem informações que ele não terá ao fazer previsões reais, como exemplos do conjunto de teste, valores do futuro ou características que codificam a resposta. O modelo parece preciso durante o desenvolvimento e os testes do modelo, mas depois tem desempenho inferior em produção porque o atalho em que se apoiava deixa de existir. O vazamento é uma das principais causas de resultados não reproduzíveis: uma pesquisa sobre ciência baseada em aprendizado de máquina contabilizou 294 artigos afetados em 17 áreas; na previsão de guerras civis, modelos complexos perderam a vantagem relatada sobre a regressão logística de décadas atrás quando o vazamento foi corrigido.
Como ocorre o vazamento de dados#
O vazamento surge da forma como os dados são divididos, processados ou escolhidos como entrada, e os mesmos erros se repetem em modelos tabulares, na análise de séries temporais e em tarefas de visão, como o reconhecimento de ações:
- Contaminação entre treino e teste: Etapas que aprendem com os dados, como estatísticas de normalização, imputação ou seleção de características, são ajustadas ao conjunto de dados inteiro antes da divisão; assim, os dados de treinamento carregam informações sobre a partição de avaliação. Imagens duplicadas e cópias aumentadas criadas antes da divisão têm o mesmo efeito.
- Vazamento entre grupos: Amostras relacionadas são separadas, como quadros consecutivos de um vídeo, vários exames do mesmo paciente ou fotos da mesma cena. Assim, o modelo pode obter uma boa pontuação reconhecendo a cena ou a pessoa em vez de aprender a tarefa.
- Vazamento temporal: Dividir aleatoriamente dados ordenados por tempo ou calcular características usando valores posteriores ao momento da previsão permite que o modelo veja o futuro.
- Vazamento do alvo: Uma entrada é consequência ou indicador indireto do rótulo, como um campo “recebeu tratamento” em um modelo que prevê doenças.
- Reutilização da avaliação: Ajustar o modelo usando o conjunto de teste ou encontrar perguntas de benchmark nos dados de pré-treinamento em escala da web de um modelo de linguagem grande transforma a avaliação em um sinal de treinamento.
As imagens também podem apresentar vazamento do alvo. No conjunto de dados ChestX-ray14, 80% das radiografias de tórax com pneumotórax no conjunto de teste também mostravam um dreno torácico, o tubo usado para tratar a condição. Um classificador treinado com o conjunto de dados alcançou uma AUC de 0,94 na curva ROC em imagens com dreno, mas apenas 0,77 nas imagens sem dreno, justamente os casos não tratados que um detector deve identificar.
Demonstração de vazamento no código#
Ajustar uma etapa dependente dos dados antes da validação cruzada é o erro clássico, e seu efeito é fácil de medir. O exemplo a seguir gera ruído puro, então nenhum modelo pode superar 50% de precisão em dados novos; em seguida, seleciona as 20 características que melhor separam os rótulos e valida cruzadamente uma regressão logística duas vezes: uma com a seleção ajustada a todas as amostras e outra com a seleção dentro de um pipeline do scikit-learn, que a reajusta em cada partição de treinamento.
import numpy as np
from sklearn.feature_selection import SelectKBest
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
# Pure noise: 100 samples, 5,000 random features, random labels (true accuracy is 50%)
rng = np.random.default_rng(0)
X = rng.normal(size=(100, 5000))
y = rng.integers(0, 2, size=100)
# Leaky: pick the 20 features that best separate the labels using every sample, then cross-validate
X_selected = SelectKBest(k=20).fit_transform(X, y)
leaky = cross_val_score(LogisticRegression(), X_selected, y, cv=5).mean()
# Correct: feature selection is refit inside each training fold
pipeline = make_pipeline(SelectKBest(k=20), LogisticRegression())
clean = cross_val_score(pipeline, X, y, cv=5).mean()
print(f"Leaky CV accuracy: {leaky:.2f}, correct CV accuracy: {clean:.2f}")A versão com vazamento relata 85% de precisão em rótulos aleatórios, enquanto o pipeline relata 48%, o que corresponde ao acaso. Com 5.000 características e 100 amostras, algumas características se correlacionam com os rótulos por sorte, e escolhê-las incluindo as partições de validação faz essa sorte aparecer na pontuação de todas as partições.
Como evitar o vazamento de dados#
A prevenção começa pela divisão dos dados, que deve ocorrer antes de qualquer etapa que aprenda com eles, para que as partições de validação e de teste permaneçam sem contato:
- Divida antes da engenharia de características: Ajuste os normalizadores, imputadores, codificadores e seletores de características somente com a partição de treinamento e aplique-os sem alterações às outras partições.
- Divida por grupo ou tempo: Mantenha todas as amostras de um paciente, vídeo ou cena em uma única partição e treine com o passado para testar com o futuro.
- Remova duplicatas com hashes e embeddings: Compare hashes de arquivos para encontrar cópias exatas e a similaridade entre embeddings para localizar quase duplicatas entre as partições antes do treinamento.
- Audite as entradas: Pergunte se cada característica existe no momento da previsão e trate uma única característica dominante ou uma pontuação suspeitosamente alta como um erro a investigar.
O vazamento também distorce a seleção de checkpoints. O Ultralytics YOLO aprende com as imagens train listadas em um YAML de conjunto de dados e salva best.pt a partir da época com a maior aptidão de validação, que é mAP50-95 para detecção; assim, quadros quase duplicados compartilhados entre train e val aumentam tanto a pontuação usada para escolher o checkpoint quanto a pontuação relatada.
Vazamento de dados e termos relacionados#
- Sobreajuste: O modelo memoriza ruído nos dados de treinamento legítimos e obtém uma pontuação baixa em um conjunto de validação sem contaminação. O vazamento torna a própria pontuação de validação incorreta, então um modelo com sobreajuste pode parecer bom.
- Aprendizado de atalhos: O modelo se apoia em uma pista espúria, como uma marca d'água ou o plano de fundo, que se correlaciona com o rótulo. O vazamento é o caso em que essa pista chega ao treinamento ou à avaliação por meio de informações indisponíveis durante a implantação.
- Segurança de dados: Em cibersegurança, vazamento de dados significa expor dados confidenciais a partes não autorizadas; controles de acesso, criptografia e ferramentas de prevenção contra perda de dados ajudam a evitar isso. Os dois significados compartilham apenas o nome.










