Data Leakage
La fuga de datos introduce en el entrenamiento o la evaluación información que no estaría disponible en el momento de la predicción, lo que infla las puntuaciones y hace que fallen en producción. Explica las causas y las soluciones.
La fuga de datos en el aprendizaje automático (ML) se produce cuando los datos de entrenamiento o la evaluación de un modelo incluyen información que no tendrá disponible al hacer predicciones reales, como ejemplos del conjunto de prueba, valores futuros o características que codifican la respuesta. El modelo parece preciso durante el desarrollo y las pruebas del modelo, pero luego rinde por debajo de lo esperado en producción porque desaparece el atajo en el que se apoyaba. La fuga es una de las principales causas de resultados irreproducibles: un análisis de la investigación basada en aprendizaje automático contabilizó 294 artículos afectados en 17 campos; además, en la predicción de guerras civiles, los modelos complejos perdieron la ventaja que se les atribuía frente a la regresión logística de décadas atrás una vez corregida la fuga.
Cómo se produce la fuga de datos#
La fuga aparece en la forma de dividir o procesar los datos, o de elegir las entradas, y los mismos errores se repiten en modelos tabulares, en el análisis de series temporales y en tareas de visión como el reconocimiento de acciones:
- Contaminación entre entrenamiento y prueba: Se ajustan con todo el conjunto de datos, antes de dividirlo, pasos que aprenden de los datos, como las estadísticas de normalización, la imputación o la selección de características. Así, los datos de entrenamiento contienen información sobre la división de evaluación. Las imágenes duplicadas y las copias aumentadas antes de la división tienen el mismo efecto.
- Fuga entre grupos: Se separan muestras relacionadas, como fotogramas consecutivos de un vídeo, varios escáneres de un paciente o fotos de una misma escena. Entonces, el modelo puede obtener una buena puntuación reconociendo la escena o a la persona en lugar de aprender la tarea.
- Fuga temporal: Dividir aleatoriamente datos ordenados en el tiempo, o calcular características con valores posteriores al momento de la predicción, permite que el modelo mire al futuro.
- Fuga del objetivo: Una entrada es consecuencia o indicador indirecto de la etiqueta, como un campo «tratamiento recibido» en un modelo que predice enfermedades.
- Reutilización de la evaluación: Ajustar el modelo con el conjunto de prueba, o incluir preguntas de referencia en los datos de preentrenamiento a escala web de un modelo de lenguaje grande, convierte la evaluación en una señal de entrenamiento.
Las imágenes también pueden contener fugas del objetivo. En el conjunto de datos ChestX-ray14, el 80 % de las radiografías con neumotórax del conjunto de prueba también mostraban un drenaje torácico, el tubo utilizado para tratar la afección. Un clasificador entrenado con el conjunto de datos obtuvo un AUC de ROC de 0,94 en las imágenes con drenaje, pero solo de 0,77 en las que no lo tenían: precisamente los casos no tratados que un detector debe identificar.
Demostración de la fuga en código#
Ajustar un paso que depende de los datos antes de la validación cruzada es el error clásico, y sus efectos se miden fácilmente. El siguiente ejemplo genera ruido puro, por lo que ningún modelo puede superar el 50 % de precisión con datos nuevos. Después, selecciona las 20 características que mejor separan las etiquetas y ejecuta dos veces una validación cruzada con una regresión logística: una vez, ajustando la selección con todas las muestras; y otra, realizando la selección dentro de una canalización de scikit-learn que vuelve a ajustarla en cada partición de entrenamiento.
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}")La versión con fuga obtiene un 85 % de precisión con etiquetas aleatorias, mientras que la canalización obtiene un 48 %, lo que equivale al azar. Con 5.000 características y 100 muestras, algunas características se correlacionan con las etiquetas por casualidad. Si se eligen incluyendo las particiones de validación, esa casualidad se incorpora a la puntuación de cada partición.
Cómo evitar la fuga de datos#
La prevención empieza por la división, que debe hacerse antes de cualquier paso que aprenda de los datos, para mantener ocultas las particiones de validación y de prueba:
- Divide antes de la ingeniería de características: Ajusta los escaladores, imputadores, codificadores y selectores de características solo con la partición de entrenamiento, y aplícalos sin cambios al resto de particiones.
- Divide por grupo o por tiempo: Mantén todas las muestras de un paciente, vídeo o escena en una sola partición, y entrena con datos del pasado para probar con datos del futuro.
- Elimina duplicados con hashes y embeddings: Antes de entrenar, compara los hashes de archivo para detectar copias exactas y la similitud de los embeddings para encontrar duplicados aproximados entre particiones.
- Audita las entradas: Comprueba si cada característica existe en el momento de la predicción y trata cualquier característica dominante o puntuación sospechosamente alta como un error que debes investigar.
La fuga también distorsiona la selección de puntos de control. Ultralytics YOLO aprende a partir de las imágenes train indicadas en el YAML del conjunto de datos y guarda best.pt de la época con mayor aptitud de validación, que en detección es mAP50-95. Por tanto, si hay fotogramas casi duplicados entre train y val, se inflan tanto la puntuación que selecciona el punto de control como la puntuación que se informa.
Fuga de datos y términos relacionados#
- Sobreajuste: El modelo memoriza el ruido de los datos de entrenamiento legítimos y obtiene malos resultados en un conjunto de validación limpio. La fuga hace que la propia puntuación de validación sea incorrecta, por lo que un modelo sobreajustado puede parecer bueno.
- Aprendizaje basado en atajos: El modelo se basa en una señal espuria, como una marca de agua o el fondo, que se correlaciona con la etiqueta. La fuga se produce cuando esa señal llega al entrenamiento o a la evaluación desde información que no está disponible durante el despliegue.
- Seguridad de los datos: En ciberseguridad, la fuga de datos consiste en exponer datos sensibles a personas no autorizadas; los controles de acceso, el cifrado y las herramientas de prevención de pérdida de datos ayudan a evitarla. Los dos significados solo comparten el nombre.










