Data Cleaning
A limpeza de dados identifica e corrige arquivos corrompidos, duplicatas, valores ausentes e erros de rótulo em um conjunto de dados antes do treinamento. Veja técnicas, ferramentas e código.
A limpeza de dados, também chamada higienização ou depuração de dados, é o processo de encontrar e corrigir ou remover registros corrompidos, duplicados, incompletos, inconsistentes e com rótulos incorretos em um conjunto de dados. No aprendizado de máquina (ML), ela vem antes do pré-processamento de dados e do treinamento, pois um modelo aprende tudo o que seus dados de treinamento contêm, inclusive os erros. Um detector treinado com imagens em que metade das bicicletas está rotulada como "motocicleta" aprende essa confusão, e um conjunto de teste com rótulos incorretos informa uma avaliação errada da qualidade do modelo. A limpeza é uma prática central da IA centrada em dados, que aprimora os modelos melhorando os dados, e não a arquitetura.
Por que a qualidade dos dados limita os modelos#
Os erros nos dados prejudicam a precisão de várias maneiras. Exemplos com rótulos incorretos ensinam relações erradas entre entrada e saída e levam o modelo ao superajuste à medida que ele memoriza o ruído. Duplicatas dão peso extra a alguns exemplos e, quando cópias aparecem tanto nas partições de treinamento quanto nas de avaliação, causam vazamento de dados, inflando as pontuações. Arquivos corrompidos causam falhas nos carregadores de dados ou são ignorados silenciosamente, e nomes inconsistentes de classes dividem uma categoria em várias. Os benchmarks também são afetados: um estudo de 10 conjuntos de teste amplamente utilizados estimou erros de rótulo em pelo menos 3,3% dos exemplos, em média, e em pelo menos 6% do conjunto de validação do ImageNet. Avaliado com rótulos corrigidos, o ResNet-18 supera o ResNet-50 quando a proporção de exemplos de teste originalmente rotulados incorretamente aumenta apenas 6%.
Tarefas comuns de limpeza de dados#
Os dados tabulares geralmente são limpos com bibliotecas como pandas, enquanto os conjuntos de dados de visão precisam de verificações dos arquivos de imagem e das anotações, dos pixels às coordenadas da caixa delimitadora. Imagens quase duplicadas são encontradas comparando embeddings, e a busca vetorial permite escalar a comparação para milhões de imagens.
- Valores ausentes: Registros com campos vazios são descartados ou preenchidos por imputação baseada em estatísticas da coluna ou nos vizinhos mais próximos. Em conjuntos de dados de visão, uma imagem sem arquivo de rótulo é ambígua, pois pode ser uma imagem de fundo intencional ou uma imagem que ninguém anotou.
- Duplicatas e quase duplicatas: Arquivos idênticos byte a byte compartilham o mesmo hash. Cópias redimensionadas ou recomprimidas e quadros consecutivos de vídeo não compartilham o mesmo hash, por isso exigem hashes perceptuais ou similaridade entre embeddings.
- Arquivos corrompidos e inválidos: Downloads truncados, formatos incompatíveis, modos de cor inesperados e imagens minúsculas não podem ser decodificados ou não contêm informações úteis.
- Erros de rótulo: Classes incorretas, objetos ausentes e caixas imprecisas ou mal posicionadas são os erros mais custosos em dados de visão supervisionada e os mais difíceis de encontrar a olho nu.
- Categorias inconsistentes: Grafias como "Car" e "car", ou classes sobrepostas como "automóvel" e "veículo", são reunidas em uma taxonomia única para que cada conceito tenha um rótulo.
- Valores atípicos: Valores impossíveis, como idades negativas ou caixas que ultrapassam a borda da imagem, são erros a corrigir. Casos raros, mas válidos, são mantidos, pois muitas vezes são exatamente esses casos extremos que o modelo mais precisa aprender.
Como encontrar erros de rótulo com um modelo#
Revisar manualmente cada rótulo não é escalável, por isso os pipelines de limpeza usam um modelo treinado para priorizar os rótulos que devem ser inspecionados. O aprendizado confiável, implementado na biblioteca de código aberto cleanlab, usa probabilidades previstas fora da amostra obtidas por validação cruzada e sinaliza exemplos em que o modelo prevê com confiança uma classe diferente daquela indicada pelo rótulo. A decisão final continua sendo das pessoas: no estudo do conjunto de teste citado acima, revisores terceirizados confirmaram que 51% dos candidatos sinalizados pelo algoritmo eram erros de rótulo reais.
Automatizar verificações de arquivos#
As verificações no nível do arquivo são baratas o bastante para serem executadas em cada novo lote de dados, junto com as auditorias de rótulos e equilíbrio de classes abordadas na lição Controle de qualidade de conjuntos de dados. O script a seguir cria uma pequena pasta com uma imagem, uma cópia exata e um arquivo truncado, depois sinaliza a cópia e o arquivo corrompido usando Pillow e um hash de conteúdo:
import hashlib
from pathlib import Path
from PIL import Image
# A tiny image folder: one original, one exact copy, and one truncated download
folder = Path("images")
folder.mkdir(exist_ok=True)
Image.new("RGB", (640, 480), "orange").save(folder / "a.jpg")
(folder / "b.jpg").write_bytes((folder / "a.jpg").read_bytes())
(folder / "c.jpg").write_bytes((folder / "a.jpg").read_bytes()[:1000])
seen = {}
for path in sorted(folder.glob("*.jpg")):
try:
Image.open(path).load() # decode every pixel; a truncated file raises OSError
except OSError as error:
print(f"{path.name}: corrupt ({error})")
continue
digest = hashlib.md5(path.read_bytes()).hexdigest() # identical bytes give identical hashes
if digest in seen:
print(f"{path.name}: duplicate of {seen[digest]}")
seen.setdefault(digest, path.name)O script imprime b.jpg: duplicate of a.jpg e c.jpg: corrupt (image file is truncated (5 bytes not processed)). É importante decodificar cada imagem por completo, pois abrir um arquivo lê apenas o cabeçalho, e um arquivo truncado pode passar nessa etapa. O Ultralytics YOLO executa verificações relacionadas sempre que cria o cache de rótulos de um conjunto de dados: salva novamente JPEGs sem o marcador de fim de imagem, remove linhas de rótulo duplicadas e ignora pares de imagem e rótulo cujas imagens tenham menos de 10 pixels, coordenadas fora da imagem ou IDs de classe além dos presentes no YAML do conjunto de dados. Em seguida, informa as quantidades de imagens, fundos e arquivos corrompidos no resumo da verificação.
Limpeza de dados e termos relacionados#
- Pré-processamento de dados: Transforma dados que já estão corretos no formato esperado pelo modelo, por exemplo, redimensionando imagens e normalizando valores de pixel. A limpeza determina quais dados estão corretos.
- Aumento de dados: Adiciona variações intencionais, como inversões e alterações de cor, aos dados limpos durante o treinamento.
- Rotulagem de dados: Cria rótulos para dados sem rótulos, enquanto a limpeza audita e corrige os rótulos existentes.
- Viés do conjunto de dados: Um conjunto de dados pode não ter erros e ainda assim representar insuficientemente algumas condições ou grupos. Corrigir o viés exige coletar dados diferentes, algo que a limpeza, por si só, não consegue fazer.










