Middle+
¿Qué es la fuga trasera?
sobes.tech AI
Respuesta de la IA
La fuga de información (back leakage) es una situación en aprendizaje automático en la que la información del conjunto de datos de prueba o validación inadvertidamente se filtra en el proceso de entrenamiento. Esto conduce a un sobreajuste del modelo a estos datos, lo que hace que las evaluaciones de rendimiento (métricas de calidad) en el conjunto de prueba parezcan infladas y no reflejen la verdadera capacidad del modelo para generalizar a datos nuevos y no vistos.
Causas del back leakage:
- Realizar preprocesamiento de datos (escalado, normalización, codificación de características categóricas) en todo el conjunto de datos antes de dividirlo en entrenamiento, prueba y validación.
- Utilizar estadísticas del conjunto de prueba o validación (por ejemplo, media, desviación estándar) durante el procesamiento del conjunto de entrenamiento.
- Selección de características basada en todo el conjunto de datos, incluyendo la prueba.
- Ajuste manual del modelo o de los hiperparámetros basado en el rendimiento observado en el conjunto de prueba.
Consecuencias del back leakage:
- Evaluaciones de rendimiento del modelo poco confiables.
- El modelo funciona mal en nuevos datos en producción.
- Desperdicio de recursos en un modelo ineficiente.
Prevención del back leakage:
- Siempre dividir los datos en conjuntos de entrenamiento, validación y prueba antes de cualquier preprocesamiento o análisis.
- Aplicar el preprocesamiento de datos (por ejemplo,
StandardScaler,OneHotEncoder) solo al conjunto de entrenamiento, y luego usar los transformadores entrenados para transformar los conjuntos de validación y prueba. - Realizar la selección de características solo en el conjunto de entrenamiento.
- Utilizar validación cruzada en el conjunto de entrenamiento para ajustar hiperparámetros y evaluar el modelo antes de la prueba final en el conjunto de prueba reservado.
Ejemplo de escalado incorrecto (lleva a back leakage):
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Suponemos que tenemos un DataFrame df
# Enfoque incorrecto: escalar todo el DataFrame
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
# Luego dividir los datos
X_train, X_test, y_train, y_test = train_test_split(df_scaled, ...)
Ejemplo correcto de escalado (evita back leakage):
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Suponemos que tenemos un DataFrame df
# Enfoque correcto: dividir los datos primero
X_train, X_test, y_train, y_test = train_test_split(df, ...)
# Luego entrenar el escalador solo en los datos de entrenamiento
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
# Y aplicar el escalador entrenado a los datos de prueba
X_test_scaled = scaler.transform(X_test)
# Ahora X_train_scaled y X_test_scaled están listos para entrenar el modelo