Машинное обучение

Стекинг и блендинг моделей

В 2012 году команда победителей Netflix Prize взяла 1 000 000, объединив предсказания сотен моделей через стекинг. Их финальное решение было ансамблем ансамблей - мета-модель, обученная комбинировать выходы совершенно разных алгоритмов. С тех пор стекинг стал обязательным инструментом на Kaggle: практически все топ-решения используют его. Но как именно научить одну модель оптимально комбинировать предсказания других? И почему нельзя просто взять среднее?

  • **Kaggle-соревнования:** 90%+ решений в топ-10 используют стекинг или блендинг. Победитель Otto Group Product Classification скомбинировал XGBoost, Neural Net и Random Forest через двухуровневый стекинг, получив accuracy на 2.3% выше лучшей одиночной модели
  • **Fraud detection в банках:** Mastercard использует ансамбль из 5+ разнородных моделей для детекции мошенничества в реальном времени. Каждая модель отвечает за свой тип фрода, а мета-модель комбинирует сигналы за 50 мс на транзакцию
  • **Медицинская диагностика:** в конкурсе RSNA по детекции пневмонии на рентгеновских снимках победители использовали стекинг 7 разных архитектур нейросетей (ResNet, EfficientNet, DenseNet), снизив false negative rate на 4% относительно лучшей одиночной модели

Идея, опередившая своё время на десятилетия

Стекинг придумал Дэвид Уолперт в 1992 году в работе «Stacked Generalization». Его идея была проста и радикальна: вместо того чтобы усреднять предсказания нескольких моделей по фиксированному правилу, можно обучить отдельную модель - метамодель - которая сама научится оптимально комбинировать выходы базовых моделей. Базовые модели Уолперт назвал моделями уровня 0, а комбинирующую - моделью уровня 1. Ключевым было использование предсказаний, полученных на отложенных фолдах (out-of-fold), чтобы метамодель не переобучалась на ответах, которые базовые модели уже видели. В начале 1990-х вычислительных ресурсов для обучения десятков моделей почти не было, и идея оставалась академической. Своё признание стекинг получил спустя двадцать лет - в эпоху Kaggle и Netflix Prize, где победные решения строились именно как ансамбли ансамблей.

Предварительные знания

  • Bagging vs Boosting

Мета-модель: учимся на предсказаниях

Bagging и boosting комбинируют модели одного типа: Random Forest - много деревьев, XGBoost - тоже много деревьев. Но что если собрать **принципиально разные** алгоритмы и научить ещё одну модель их комбинировать? Эта идея называется **стекинг (stacking)**, и именно она стоит за большинством побед на Kaggle.

Архитектура стекинга состоит из двух уровней. **Level 0** - базовые модели (base learners): например, Random Forest, XGBoost, SVM, KNN. Каждая модель делает свои предсказания. **Level 1** - мета-модель (meta-learner): она получает на вход предсказания базовых моделей и учится выдавать финальный ответ. По сути, мета-модель решает задачу: *"какой базовой модели доверять в каком случае?"*

Почему это работает? Каждая модель имеет свои сильные и слабые стороны. Random Forest хорошо справляется с нелинейными зависимостями, но может недооценивать тренды. SVM отлично работает в высокоразмерном пространстве, но чувствительна к масштабу. KNN ловит локальные паттерны. **Мета-модель учится, когда какой базовой модели стоит доверять**, и оптимально комбинирует их сигналы.

**Почему мета-модель обычно простая?** Логистическая регрессия или Ridge - типичный выбор для мета-модели. Причины: 1. **Входов мало** - всего N предсказаний от N базовых моделей (4-10 признаков) 2. **Риск переобучения** - сложная мета-модель может запомнить паттерны обучающей выборки 3. **Интерпретируемость** - веса LogReg показывают, какой базовой модели мета-модель доверяет больше Если мета-модель сама сложная (например, ещё один XGBoost), стекинг легко переобучается.

**Ключевая ловушка наивного стекинга:** если обучить мета-модель на предсказаниях базовых моделей, сделанных на тех же данных, на которых эти модели обучались, - мета-модель увидит завышенно точные предсказания. На тесте качество резко упадёт. Это называется **data leakage** в контексте стекинга.

Зачем в стекинге мета-модель обычно делают простой (LogReg, Ridge), а не используют ещё один мощный алгоритм вроде XGBoost?

Стекинг через Cross-Validation

В предыдущем концепте мы увидели проблему: если базовые модели предсказывают на своих обучающих данных, мета-модель видит нереалистично хорошие результаты. Решение - **K-fold cross-validation для генерации out-of-fold (OOF) predictions**. Каждый объект обучающей выборки получает предсказание от модели, которая на нём **не обучалась**.

Процесс выглядит так: для каждой базовой модели мы делаем K-fold CV и собираем предсказания на валидационных частях. В итоге **каждый объект обучающей выборки получает "честное" предсказание** - от модели, которая на нём не обучалась. Эти OOF-предсказания от всех базовых моделей образуют **мета-признаки (meta-features)**, на которых обучается мета-модель.

**OOF vs наивный подход - сравнение:**

Наивный стекингOOF-стекинг
Мета-признаки на trainПредсказания на своих данныхПредсказания на held-out фолдах
Риск переобученияВысокий (data leakage)Низкий
Сложность реализацииПростаяНужен K-fold цикл
Использование данныхВсе данные для обученияВсе данные для обучения и валидации

OOF-стекинг - стандарт индустрии. Наивный подход используется только в учебных примерах.

Важный нюанс: для тестовой выборки мы обучаем каждую базовую модель на **всех** обучающих данных (без разбиения на фолды) и делаем предсказание. Альтернативный подход - усреднить предсказания K моделей, обученных на фолдах. sklearn.StackingClassifier использует первый вариант (переобучение на всём train после OOF-этапа).

Зачем в стекинге используют K-fold CV вместо обычных предсказаний базовых моделей на обучающих данных?

Блендинг: простая альтернатива

Стекинг через K-fold CV мощный, но сложный: нужно K раз обучить каждую базовую модель, следить за индексами фолдов, правильно формировать OOF-матрицу. **Блендинг (blending)** - упрощённая версия, которая использует **holdout set** вместо cross-validation. Идея: разделить обучающие данные на две части - одну для обучения базовых моделей, вторую для создания мета-признаков.

Ещё проще - **weighted averaging (взвешенное усреднение)**: вместо мета-модели просто берём взвешенную сумму предсказаний. Веса можно подобрать вручную или оптимизировать на валидации. Например: `final = 0.4 * xgb_pred + 0.35 * rf_pred + 0.25 * svm_pred`. Это самый простой вид блендинга, который часто используют как baseline перед построением полноценного стекинга.

**Когда что использовать?** - **Стекинг (OOF):** много данных (>5000 объектов), важна максимальная точность, есть время на эксперименты - **Блендинг (holdout):** быстрый эксперимент, мало времени, данные позволяют отдать 30% на blend set - **Weighted averaging:** самый быстрый вариант, хороший baseline, часто достаточен для production На Kaggle обычно начинают с weighted averaging, потом переходят к стекингу. В production часто останавливаются на averaging из-за простоты поддержки.

Главный компромисс блендинга: **простота vs потеря данных**. Если у вас 500 объектов, отдать 30% (150) на blend set - больно. Базовые модели обучаются на 350 объектах вместо 500, и качество страдает. В таких случаях стекинг через CV предпочтительнее, потому что он использует все данные. Но при 100k+ объектах разница становится минимальной.

В чём главный недостаток блендинга по сравнению со стекингом через K-fold CV?

Комбинирование моделей на практике

Теория стекинга и блендинга понятна, но на практике успех определяется **выбором базовых моделей и стратегией комбинирования**. Главный принцип - **diversity (разнообразие)**: чем больше базовые модели отличаются друг от друга, тем больше выигрыш от их комбинации. Если все модели ошибаются одинаково, стекинг не поможет.

Типичная Kaggle-стратегия для табличных данных: **3-5 разнородных моделей + простая мета-модель**. Часто используемый набор: 1. XGBoost или LightGBM - сильнейший на табличных данных 2. Random Forest - низкая корреляция с бустингом 3. Ridge/LogReg - линейная модель ловит то, что деревья пропускают 4. KNN или SVM - работает с локальными паттернами 5. Neural Net (MLP) - обучается иначе, чем деревья.

**Стекинг в production - подводные камни:** 1. **Latency**: вместо одной модели нужно выполнить N+1 моделей последовательно. Если одна модель отвечает за 10 мс, стекинг из 5 моделей - 50-60 мс 2. **Сложность поддержки**: при обновлении одной базовой модели нужно переобучить мета-модель 3. **Мониторинг**: нужно следить за качеством каждой базовой модели отдельно 4. **Маргинальный выигрыш**: +1% accuracy на Kaggle может стоить миллион долларов, но в production часто не оправдывает сложность Часто одна хорошо настроенная модель (XGBoost/LightGBM) лучше стекинга в production.

На практике стекинг доминирует в соревнованиях, но в production его используют осторожно. Типичный компромисс: **soft voting из 2-3 моделей** с фиксированными весами. Это даёт 80% выигрыша стекинга при 20% сложности. Полноценный стекинг применяют в задачах, где каждая десятая процента важна: fraud detection, медицинская диагностика, реклама (bid optimization).

Стекинг всегда лучше одиночной модели - нужно всегда использовать стекинг в production

Стекинг даёт преимущество в 1-3% точности ценой значительного усложнения системы: рост latency, сложность деплоя и мониторинга, необходимость переобучать мета-модель при изменении любой базовой модели

В соревнованиях каждая десятая процента имеет значение, поэтому стекинг доминирует. Но в production часто одна хорошо настроенная модель (XGBoost/LightGBM) выигрывает по соотношению качество/сложность. Стекинг оправдан только в задачах с высокой ценой ошибки: fraud detection, медицинская диагностика, рекламные аукционы

Какая стратегия комбинирования моделей обеспечит наибольший выигрыш от стекинга?

Ключевые идеи

  • **Стекинг** - двухуровневая архитектура: Level 0 (базовые модели RF, XGBoost, SVM, ...) делают предсказания, Level 1 (мета-модель, обычно LogReg) учится их оптимально комбинировать
  • **OOF-предсказания через K-fold CV** решают проблему data leakage: каждый объект предсказан моделью, которая его не видела, что даёт мета-модели реалистичную картину ошибок базовых моделей
  • **Блендинг** - простая альтернатива стекингу с holdout set вместо CV; weighted averaging (подбор весов) - ещё проще и часто достаточен для production
  • **Diversity - ключ к успеху:** комбинируй разные семейства алгоритмов (деревья + линейные + ядерные + нейросети), а не вариации одного и того же. Именно поэтому стекинг побеждает на Kaggle, но помните: в production-системах одна хорошо настроенная модель часто выигрывает по соотношению качество/сложность, как мы обсуждали в самом начале на примере Netflix Prize

Связанные темы

Стекинг и блендинг завершают блок ансамблевых методов. Они строятся на фундаменте bagging и boosting и напрямую применяются при проектировании ML-систем:

  • Bagging и Boosting — Фундамент ансамблевых методов - bagging снижает дисперсию (Random Forest), boosting снижает смещение (XGBoost). Стекинг комбинирует оба подхода на мета-уровне
  • Gradient Boosting в деталях — XGBoost и LightGBM - самые частые базовые модели в стекинге. Понимание их настройки критично для построения сильного ансамбля
  • Random Forest — Random Forest как базовая модель стекинга обеспечивает diversity благодаря принципиально иному механизму (bagging деревьев) по сравнению с boosting-моделями
  • Проектирование ML-систем — В production стекинг добавляет latency и сложность деплоя. Архитектура ML-системы определяет, оправдан ли стекинг или лучше использовать одну модель

Вопросы для размышления

  • Если мета-модель стекинга - это тоже ML-модель, можно ли построить третий уровень (мета-мета-модель)? В каких случаях это имеет смысл, а когда это overfitting?
  • Почему в production часто предпочитают simple averaging вместо полноценного стекинга? Какие нефункциональные требования системы (latency, maintainability, monitoring) влияют на выбор?
  • Представьте, что вы строите модель для медицинской диагностики, где false negative (пропуск болезни) в 10 раз дороже false positive. Как бы вы настроили стекинг, чтобы учесть эту асимметрию?

Связанные уроки

  • ml-21-bagging-boosting — Стекинг сравнивается с бэггингом и бустингом
  • ml-22-gradient-boosting — Бустинг-модели - сильные базовые ученики для стекинга
  • ml-44-cross-validation — Out-of-fold предсказания обучают мета-модель
  • ml-55-ml-system-design — Продакшн-ансамбли усложняют отдачу предсказаний
  • la-09-systems — Мета-модель смешивает учеников как решение системы весов
  • stat-18-bootstrap
Стекинг и блендинг моделей

0

1

Войти