Data Cleaning
La limpieza de datos detecta y corrige archivos dañados, duplicados, valores ausentes y errores en las etiquetas de un conjunto de datos antes del entrenamiento. Incluye técnicas, herramientas y código.
La limpieza de datos, también llamada depuración o saneamiento de datos, consiste en detectar y corregir o eliminar los registros corruptos, duplicados, incompletos, incoherentes y mal etiquetados de un conjunto de datos. En aprendizaje automático (ML), se realiza antes del preprocesamiento de datos y el entrenamiento, porque un modelo aprende todo lo que contiene sus datos de entrenamiento, incluidos los errores. Un detector entrenado con imágenes en las que la mitad de las bicicletas están etiquetadas como «motocicleta» aprende esa confusión, y un conjunto de prueba con etiquetas incorrectas ofrece una medición equivocada de la calidad del modelo. La limpieza es una práctica fundamental de la IA centrada en los datos, que mejora los modelos mejorando sus datos en lugar de su arquitectura.
Por qué la calidad de los datos limita los modelos#
Los errores en los datos reducen la precisión de varias maneras. Los ejemplos mal etiquetados enseñan asociaciones incorrectas entre entradas y salidas y empujan al modelo al sobreajuste, ya que memoriza el ruido. Los duplicados dan más peso a algunos ejemplos y, cuando hay copias tanto en las particiones de entrenamiento como en las de evaluación, provocan fugas de datos que inflan las puntuaciones. Los archivos corruptos hacen que los cargadores de datos fallen o se omitan sin avisar, y los nombres de clase incoherentes dividen una categoría en varias. También afectan a los bancos de pruebas: un estudio de 10 conjuntos de prueba de uso extendido calculó que, de media, al menos el 3,3 % de los ejemplos contenía errores de etiquetado, y que estos afectaban a al menos el 6 % del conjunto de validación de ImageNet. Al evaluarse con etiquetas corregidas, ResNet-18 supera a ResNet-50 cuando la proporción de ejemplos de prueba originalmente mal etiquetados aumenta tan solo un 6 %.
Tareas habituales de limpieza de datos#
Los datos tabulares suelen limpiarse con bibliotecas como pandas, mientras que en los conjuntos de datos de visión hay que comprobar los archivos de imagen y sus anotaciones, desde los píxeles hasta las coordenadas de las cajas delimitadoras. Las imágenes casi duplicadas se detectan comparando embeddings, y la búsqueda vectorial permite escalar esa comparación a millones de imágenes.
- Valores ausentes: Los registros con campos vacíos se eliminan o se completan mediante imputación a partir de estadísticas de columnas o de los vecinos más cercanos. En los conjuntos de datos de visión, una imagen sin archivo de etiquetas resulta ambigua, ya que puede ser una imagen de fondo intencionada o una imagen que nadie ha anotado.
- Duplicados y casi duplicados: Los archivos idénticos byte a byte comparten un hash. Las copias redimensionadas o recomprimidas y los fotogramas consecutivos de vídeo no lo comparten, por lo que requieren hashes perceptuales o similitud entre embeddings.
- Archivos corruptos y no válidos: Las descargas truncadas, los formatos no compatibles, los modos de color inesperados y las imágenes diminutas no se pueden decodificar o no contienen información útil.
- Errores de etiquetado: Las clases incorrectas, los objetos omitidos y las cajas imprecisas o mal colocadas son los errores más costosos en los datos de visión supervisada y los más difíciles de detectar a simple vista.
- Categorías incoherentes: Las variantes ortográficas como «Car» y «car», o las clases que se solapan, como «automobile» y «vehicle», se unifican en una taxonomía para que cada concepto tenga una sola etiqueta.
- Valores atípicos: Los valores imposibles, como edades negativas o cajas que sobrepasan el borde de la imagen, son errores que hay que corregir. Los casos poco frecuentes pero válidos se conservan, porque a menudo son justo lo que más necesita aprender el modelo.
Detección de errores de etiquetado con un modelo#
Revisar a mano todas las etiquetas no es escalable, así que los flujos de limpieza utilizan un modelo entrenado para priorizar las etiquetas que hay que inspeccionar. El aprendizaje confiable, implementado en la biblioteca de código abierto cleanlab, utiliza probabilidades predichas fuera de muestra mediante validación cruzada y señala los ejemplos en los que el modelo predice con confianza una clase distinta de la etiqueta asignada. La decisión final sigue correspondiendo a las personas: en el estudio del conjunto de prueba mencionado antes, quienes revisaron los datos mediante colaboración abierta confirmaron que el 51 % de los candidatos señalados por el algoritmo eran errores de etiquetado reales.
Automatización de las comprobaciones de archivos#
Las comprobaciones a nivel de archivo son lo bastante rápidas como para ejecutarlas con cada nuevo lote de datos, junto con las auditorías de etiquetas y equilibrio de clases que se explican en la lección Control de calidad de conjuntos de datos. El siguiente script crea una carpeta pequeña con una imagen, una copia idéntica y un archivo truncado; después, marca la copia y el archivo dañado mediante Pillow y un hash de contenido:
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)El script imprime b.jpg: duplicate of a.jpg y c.jpg: corrupt (image file is truncated (5 bytes not processed)). Es importante decodificar completamente cada imagen, porque abrir un archivo solo lee su cabecera y un archivo truncado puede superar esa comprobación. Ultralytics YOLO realiza comprobaciones relacionadas cada vez que crea la caché de etiquetas de un conjunto de datos: vuelve a guardar los JPEG a los que les falta el marcador de fin de imagen, elimina las filas de etiquetas duplicadas y omite los pares de imagen y etiqueta si las imágenes tienen menos de 10 píxeles, las coordenadas quedan fuera de la imagen o los ID de clase superan los del conjunto de datos YAML; después, informa del número de imágenes, fondos y archivos corruptos en el resumen del análisis.
Limpieza de datos y términos relacionados#
- Preprocesamiento de datos: Transforma datos que ya son correctos al formato que espera un modelo, por ejemplo, cambiando el tamaño de las imágenes y normalizando los valores de los píxeles. La limpieza determina qué datos son correctos.
- Aumento de datos: Añade variaciones deliberadas, como volteos y cambios de color, a datos limpios durante el entrenamiento.
- Etiquetado de datos: Crea etiquetas para datos sin etiquetar, mientras que la limpieza audita y corrige las etiquetas existentes.
- Sesgo del conjunto de datos: Un conjunto de datos puede no contener errores y aun así representar insuficientemente ciertas condiciones o grupos. Corregir el sesgo requiere recopilar otros datos; la limpieza por sí sola no puede hacerlo.










