Data Science
Ensemble Methods
Netflix Prize 2009: $1,000,000 за алгоритм рекомендаций лучше Netflix на 10%. Победители BellKor's Pragmatic Chaos набрали нужный процент... объединив более 800 (!) различных моделей в один мегаансамбль. Ни одна из 800 моделей в отдельности не давала нужного результата. Это не магия - это математика: ошибки разных моделей частично независимы, и при усреднении взаимно гасятся.
- **Kaggle соревнования:** ансамблевые методы присутствуют в решениях победителей практически всех tabular data соревнований
- **Финансовые риск-модели:** банки строят ансамбли из десятков моделей для кредитного скоринга - стабильность важнее максимальной точности одной модели
- **Медицинская диагностика:** ансамбль моделей по радиологическим снимкам показывает точность сравнимую с консилиумом врачей
Random Forest
2001 год, Лео Брейман публикует Random Forest. Идея: взять 100-500 решающих деревьев, каждое обученное на случайной подвыборке данных (bagging) и случайном подмножестве признаков, - и усреднить их предсказания. Ни одно дерево не знает правду, но коллективное голосование стабильно бьёт одиночные деревья.
**Два источника случайности:** Bootstrap sampling (каждое дерево видит ~63% обучающих данных с повторениями) и Random feature selection (в каждом узле рассматривается только sqrt(n_features) признаков вместо всех). Это обеспечивает разнообразие деревьев - ключевое условие эффективного ансамбля.
**Feature Importance:** Random Forest автоматически вычисляет важность признаков через среднее снижение примеси (Gini importance). Это полезный инструмент для feature selection, но с известной проблемой: признаки с высокой кардинальностью получают завышенную важность.
В Random Forest 'Random' относится к:
XGBoost: gradient boosting
2016 год: Тянь Чэнь и Карлос Гестрин публикуют XGBoost. На следующие несколько лет это становится алгоритмом-победителем большинства табличных соревнований Kaggle. Разница с Random Forest принципиальная: деревья строятся не параллельно и независимо, а последовательно - каждое следующее исправляет ошибки предыдущих.
**Gradient Boosting:** на каждом шаге строим дерево, которое предсказывает не целевую переменную, а **остатки** (псевдо-градиенты) текущей модели. Итоговая модель - сумма всех деревьев с весами обучения (learning rate). XGBoost добавляет L1/L2 регуляризацию прямо в функцию потерь и второй порядок оптимизации (Ньютон).
**LightGBM vs XGBoost:** LightGBM обучает деревья по листьям (leaf-wise), а не по уровням (level-wise). На больших датасетах (>100k строк) LightGBM быстрее в 10-20x. CatBoost лучше работает с категориальными признаками без ручной кодировки. Все три алгоритма основаны на gradient boosting.
Что предсказывает каждое следующее дерево в gradient boosting?
Stacking
На финальном этапе соревнования Kaggle 2012 по предсказанию кликов на рекламу победившая команда применила технику, которая дала 2% прироста поверх уже сильного ансамбля. Называется stacking: мета-модель учится на предсказаниях базовых моделей как на новых признаках.
**Проблема naïve stacking:** если базовые модели обучены на тех же данных, что и мета-модель, возникает утечка данных - мета-модель видит «слишком хорошие» предсказания базовых моделей на обучающих данных. Решение: out-of-fold (OOF) предсказания через k-fold cross-validation.
**Когда stacking помогает:** базовые модели должны быть максимально разнообразными (разные алгоритмы, разные наборы признаков). Stacking двух похожих моделей даёт минимальный выигрыш. Лучшие результаты - при комбинировании линейных моделей, деревьев и нейросетей.
Почему в stacking используются OOF (out-of-fold) предсказания, а не обычные тренировочные предсказания?
Blending и финальный ансамбль
Blending - упрощённый вариант stacking: вместо k-fold OOF используется фиксированный hold-out set (обычно 10-20% данных). Базовые модели обучаются на 80%, их предсказания на оставшихся 20% становятся мета-признаками. Проще реализовать, но теряется часть обучающих данных.
**Закон убывающей отдачи ансамблей:** первая модель даёт, скажем, 0.85 AUC. Добавление второй разнообразной модели → 0.87. Третьей → 0.875. Десятой → 0.877. Каждый следующий слой добавляет меньше прироста при большей сложности. Kaggle-победители собирают ансамбли из десятков моделей ради последних 0.001 AUC.
Чем больше моделей в ансамбле, тем лучше результат
Ансамбль улучшается при добавлении разнообразных моделей, но после определённого момента прирост близок к нулю при резком росте сложности и времени обучения
Закон убывающей отдачи: каждая новая модель добавляет информацию, только если её ошибки коррелируют с ошибками остальных моделей по-другому. После 5-10 разнообразных моделей корреляция ошибок перестаёт падать - добавлять больше нет смысла.
Ключевое отличие blending от stacking:
Ensemble Methods
- Random Forest: параллельный ансамбль деревьев с bagging и random feature selection - снижает дисперсию, сохраняет bias
- XGBoost: последовательный boosting - каждое дерево исправляет ошибки предыдущих, снижает bias итерационно
- Stacking: мета-модель обучается на OOF предсказаниях базовых моделей - без утечки данных
- Blending: упрощённый stacking через hold-out, теряет часть данных но проще реализовать
- Разнообразие моделей важнее их количества: коррелирующие ошибки не компенсируют друг друга
Связанные темы
Ансамблевые методы строятся поверх базовых алгоритмов - понимание деревьев решений обязательно.
- Деревья решений и переобучение — Random Forest и XGBoost строятся из деревьев - базовый блок ансамбля
- Регуляризация и валидация — Early stopping в XGBoost и OOF в stacking - борьба с переобучением ансамбля
- Кластеризация и сегментация — Следующий шаг: обучение без учителя - другая парадигма моделирования
Вопросы для размышления
- Random Forest и XGBoost оба строят ансамбли деревьев - в чём принципиальная разница в их подходе к ошибкам и когда один предпочтительнее другого?
- Почему stacking даёт прирост, если мета-модель - простая логистическая регрессия, а базовые модели намного сложнее?
- Каков практический предел числа моделей в ансамбле - и как решить, когда остановиться?