Что такое обучающая (train) выборка в контексте бустинга?

«Что такое обучающая (train) выборка в контексте бустинга?» — вопрос из категории Деревья и ансамбли, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В контексте алгоритмов бустинга (Gradient Boosting, XGBoost, LightGBM, CatBoost) обучающая выборка (train sample) — это набор данных (X_train, y_train), на котором модель последовательно обучает ансамбль слабых моделей (обычно неглубоких деревьев решений). Ключевая особенность бустинга — итеративное исправление ошибок: каждая следующая модель в ансамбле фокусируется на объектах, которые были плохо предсказаны предыдущими моделями.

Как это работает на практике:

  1. Первая модель обучается на исходной выборке.
  2. Вычисляются ошибки (остатки) ее предсказаний.
  3. Следующая модель обучается не на исходных метках y, а на этих остатках, пытаясь их предсказать.
  4. Процесс повторяется много раз, а итоговый прогноз — взвешенная сумма прогнозов всех моделей.

Критические аспекты подготовки train-выборки для бустинга:

  • Качество данных: Бустинг чувствителен к выбросам и шуму, так как будет пытаться их «исправить» на последующих итерациях, что ведет к переобучению. Важна предварительная очистка.
  • Разделение на train/valid/test: Для настройки гиперпараметров (количество деревьев, скорость обучения) и контроля переобучения необходимо валидационное множество.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier

# Загрузка данных
data = pd.read_csv('data.csv')
X = data.drop('target', axis=1)
Y = data['target']

# Стратифицированное разделение на train и test
X_train, X_test, y_train, y_test = train_test_split(
    X, Y,
    test_size=0.2,
    random_state=42,
    stratify=Y  # Сохраняет распределение классов в выборках
)

# Дальнейшее разделение train на train и validation для подбора параметров
X_train_fit, X_val, y_train_fit, y_val = train_test_split(
    X_train, y_train,
    test_size=0.25,  # 20% от исходных данных -> validation set
    random_state=42,
    stratify=y_train
)

# Обучение модели с ранней остановкой по validation set
model = GradientBoostingClassifier(n_estimators=1000, learning_rate=0.05, random_state=42)
model.fit(
    X_train_fit, y_train_fit,
    eval_set=[(X_val, y_val)],  # Модель будет оценивать качество на валидации
    early_stopping_rounds=50,   # Остановит обучение, если 50 итераций нет улучшения
    verbose=10
)
# Фактическое число построенных деревьев будет <= 1000

Таким образом, train-выборка в бустинге — это не просто пассивные данные для обучения, а основа для итеративного процесса коррекции ошибок, требующая особого внимания к чистоте и правильному разделению.