EssayAI
Блог
Блог
Математика и алгоритмы

Стекинг моделей (stacking): как собрать ансамбль

19 июня 2026Время чтения: 7 минут
#стекинг#ансамбль моделей#stacking#мета-модель#машинное обучение
Стекинг моделей (stacking): как собрать ансамбль

Стекинг моделей (stacking, стековое обобщение) - это способ объединить несколько разных алгоритмов в один ансамбль, где предсказания базовых моделей становятся входными признаками для отдельной мета-модели. В отличие от усреднения голосов, стекинг учит модель второго уровня тому, кому и когда доверять. Ниже разберём схему уровней, роль out-of-fold предсказаний и типичные ошибки. Если хотите сразу собрать запрос под свою задачу - соберите его в форме ниже и получите разбор по шагам.

Что такое стекинг моделей

Идея стекинга в том, что разные алгоритмы ошибаются по-разному. Линейная модель ловит глобальный тренд, дерево - нелинейные пороги, метод ближайших соседей - локальную структуру. Если их предсказания скормить ещё одной модели, она может выучить, как комбинировать сильные стороны каждой.

Формально ансамбль состоит из двух уровней. На первом уровне работают mm базовых моделей (base learners) h1,h2,,hmh_1, h_2, \dots, h_m. На втором - мета-модель (meta-learner, или blender) gg, которая получает на вход вектор их предсказаний и выдаёт финальный ответ:

y^=g(h1(x),h2(x),,hm(x)).\hat{y} = g\bigl(h_1(x), h_2(x), \dots, h_m(x)\bigr).

Здесь xx - исходный объект, а hj(x)h_j(x) - предсказание jj-й базовой модели. Мета-модель не видит сырые признаки (в базовом варианте) - она работает только с «мнениями» базовых алгоритмов, поэтому её часто называют обобщением поверх обобщений (stacked generalization, термин Дэвида Уолперта, 1992).

Двухуровневая схема стекинга: базовые модели слева передают предсказания мета-модели справа, которая выдаёт финальный прогноз
Двухуровневая схема стекинга: базовые модели слева передают предсказания мета-модели справа, которая выдаёт финальный прогноз

Базовые модели и мета-модель

Базовые модели подбирают так, чтобы они были разнообразны - ансамбль выигрывает не от точности отдельных моделей, а от того, что их ошибки слабо коррелируют. Поэтому в стек часто ставят алгоритмы разной природы: градиентный бустинг (см. алгоритм XGBoost), случайный лес, линейную или логистическую регрессию, SVM, нейросеть.

Мета-модель, наоборот, обычно делают простой. Чаще всего это линейная или логистическая регрессия: её задача - найти веса доверия к базовым моделям, а не строить новую сложную зависимость. Сложная мета-модель легко переобучается на предсказаниях первого уровня, особенно если базовых моделей много. Эмпирическое правило: чем мощнее база, тем проще должен быть блендер.

Размерность входа мета-модели зависит от задачи. В регрессии каждая базовая модель даёт одно число, значит вход - вектор длины mm. В классификации на KK классов берут вероятности классов, и вход растёт до mKm \cdot K признаков.

Зачем нужны out-of-fold предсказания

Главная тонкость стекинга - как получить обучающую выборку для мета-модели, не подсунув ей утечку. Если обучить базовые модели на всех данных, а потом на этих же данных снять их предсказания, мета-модель увидит «слишком хорошие» ответы: базовые модели уже подсмотрели правильные метки. На тесте такого качества не будет - это классическая утечка через цель.

Решение - out-of-fold предсказания (OOF, предсказания вне фолда). Обучающую выборку режут на kk блоков (кросс-валидация по сути та же схема). Для каждого блока базовую модель обучают на остальных k1k-1 блоках и предсказывают на отложенном. Собрав предсказания по всем блокам, получаем матрицу OOF-признаков - честную, потому что каждый объект предсказан моделью, которая его не видела.

Получение out-of-fold предсказаний: данные делятся на фолды, модель учится на одних и предсказывает на отложенном, формируя честную матрицу для мета-модели
Получение out-of-fold предсказаний: данные делятся на фолды, модель учится на одних и предсказывает на отложенном, формируя честную матрицу для мета-модели

Алгоритм пошагово:

1) разбить обучение на k фолдов;2) для каждого фолда i: обучить hj на остальных, предсказать на i;3) собрать OOF-матрицу Z размера n×m;4) обучить мета-модель g на парах (Z,y);5) для теста: переобучить hj на всём обучении и подать в g.\begin{aligned} &\text{1) разбить обучение на } k \text{ фолдов};\\ &\text{2) для каждого фолда } i:\ \text{обучить } h_j \text{ на остальных, предсказать на } i;\\ &\text{3) собрать OOF-матрицу } Z \text{ размера } n \times m;\\ &\text{4) обучить мета-модель } g \text{ на парах } (Z, y);\\ &\text{5) для теста: переобучить } h_j \text{ на всём обучении и подать в } g. \end{aligned}

После того как мета-модель обучена на OOF-матрице, базовые модели обычно переобучают на полной обучающей выборке - так на инференсе они работают на максимуме данных, а блендер уже знает, как взвешивать их голоса.

Стекинг против бэггинга и бустинга

Все три - ансамблевые методы, но комбинируют модели по-разному.

Бэггинг (bagging, например случайный лес) обучает много однотипных моделей на бутстрап-подвыборках и усредняет ответы. Цель - снизить дисперсию. Модели одинаковые, объединение фиксированное (среднее или голосование).

Бустинг (boosting, градиентный бустинг) строит модели последовательно: каждая следующая исправляет ошибки предыдущих. Цель - снизить смещение. Модели однотипные, но зависят друг от друга.

Стекинг объединяет разнородные модели и учит способ их комбинации отдельной мета-моделью. Цель - выжать из разнообразия максимум. Это единственный из трёх методов, где правило объединения само обучается на данных.

МетодБазовые моделиКак объединяет
Бэггингоднотипные, параллельноусреднение / голосование
Бустингоднотипные, последовательновзвешенная сумма
Стекингразнородныеобучаемая мета-модель

Блендинг как упрощённый стекинг

Близкий родственник стекинга - блендинг (blending). Вместо кросс-валидации он откладывает один holdout-набор (например, 20% обучения): базовые модели учатся на основной части, предсказывают на holdout, и мета-модель обучается на этих предсказаниях.

Блендинг проще в реализации и не течёт, но использует меньше данных для мета-модели и чувствителен к тому, как именно нарезан holdout. Стекинг через OOF задействует всю выборку и обычно стабильнее, но дороже по вычислениям. На практике блендинг берут, когда данных много и важна скорость, а стекинг - когда борются за последние доли метрики.

Многоуровневый стекинг

Уровней может быть больше двух: предсказания мета-модели первого порядка сами становятся признаками для мета-модели следующего уровня. Такие конструкции (multi-level stacking) встречаются в победных решениях соревнований Kaggle, где счёт идёт на тысячные доли метрики.

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

Частые ошибки

  • Снимать предсказания базовых моделей на тех же данных, на которых их учили. Это утечка: мета-модель переоценит базовые модели и провалится на тесте. Только OOF или holdout.
  • Брать слишком сложную мета-модель. Глубокое дерево или бустинг поверх предсказаний легко переобучаются. Линейная или логистическая регрессия почти всегда лучше.
  • Ставить в стек одинаковые модели. Если все базовые модели коррелируют, разнообразия нет и стекинг сводится к дорогому усреднению.
  • Забыть переобучить базовые модели на полной выборке перед инференсом. Иначе на проде они работают на урезанных данных фолдов.
  • Не фиксировать разбиение на фолды. Разные сиды для OOF и для итоговой кросс-валидации дают несопоставимые оценки качества.

FAQ

Чем стекинг отличается от обычного усреднения предсказаний? При усреднении веса моделей заданы заранее (часто равные). В стекинге веса - точнее, целую функцию комбинации - обучает мета-модель на out-of-fold предсказаниях. Поэтому стекинг может, например, почти полностью игнорировать слабую модель и опираться на сильную там, где она надёжна.

Сколько базовых моделей нужно для стекинга? Жёсткого числа нет, но обычно берут от 3 до 10 разнородных моделей. Важнее не количество, а разнообразие: две сильно коррелирующие модели почти не добавляют пользы, тогда как разные по природе алгоритмы взаимно покрывают слабые места.

Можно ли подать в мета-модель исходные признаки вместе с предсказаниями? Да, это вариант с расширенными признаками (feature-weighted stacking). Иногда помогает, но повышает риск переобучения мета-модели, поэтому исходные признаки добавляют осторожно и проверяют прирост на валидации.

Коротко

Стекинг моделей (stacking) - это двухуровневый ансамбль: разнородные базовые модели дают предсказания, а мета-модель учится их комбинировать. Ключ к честному обучению - out-of-fold предсказания, которые исключают утечку через цель. В отличие от бэггинга и бустинга, в стекинге правило объединения само обучается на данных, поэтому метод выжимает максимум из разнообразия алгоритмов, но требует аккуратной OOF-схемы и простой мета-модели.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также