Назад к вопросам
Middle+
94
questionbank
Что такое back leakage?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Back leakage (обратная утечка) — это ситуация в машинном обучении, когда информация из тестового или валидационного набора данных непреднамеренно попадает в обучающий процесс. Это приводит к переобучению модели на этих данных, из-за чего оценки производительности (метрики качества) на тестовом наборе выглядят завышенными и не отражают реальную способность модели обобщаться на новые, unseen данные.
Причины back leakage:
- Выполнение предобработки данных (масштабирование, нормализация, кодирование категориальных признаков) на всем наборе данных до его разделения на обучающий, тестовый и валидационный.
- Использование статистики из тестового или валидационного набора (например, среднее, стандартное отклонение) при обработке обучающего набора.
- Отбор признаков (feature selection) на основе всего набора данных, включая тестовый.
- "Ручная" подгонка модели или гиперпараметров на основе наблюдаемой производительности на тестовом наборе данных.
Последствия back leakage:
- Ненадежные оценки производительности модели.
- Модель плохо работает на новых данных в продакшене.
- Трата ресурсов на неэффективную модель.
Предотвращение back leakage:
- Всегда разделять данные на обучающий, валидационный и тестовый наборы до любой предобработки или анализа.
- Применять предобработку данных (например,
StandardScaler,OneHotEncoder) только к обучающему набору, а затем использовать обученные трансформаторы для преобразования валидационного и тестового наборов. - Выполнять отбор признаков только на обучающем наборе данных.
- Использовать кросс-валидацию на обучающем наборе для настройки гиперпараметров и оценки модели до финального тестирования на отложенном тестовом наборе.
Пример некорректного масштабирования (приводит к back leakage):
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Предполагаем у нас есть датафрейм df
# Неправильный подход: масштабируем весь датафрейм
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
# Затем разделяем данные
X_train, X_test, y_train, y_test = train_test_split(df_scaled, ...)
Пример корректного масштабирования (избегает back leakage):
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Предполагаем у нас есть датафрейм df
# Правильный подход: сначала разделяем данные
X_train, X_test, y_train, y_test = train_test_split(df, ...)
# Затем обучаем масштабировщик только на тренировочных данных
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
# И применяем обученный масштабировщик к тестовым данным
X_test_scaled = scaler.transform(X_test)
# Теперь X_train_scaled и X_test_scaled готовы для обучения модели