Бэггинг (bagging): как ансамбль снижает дисперсию модели

Когда одна модель машинного обучения слишком чувствительна к обучающей выборке, небольшое изменение данных сильно меняет её предсказания: это высокая дисперсия. Бэггинг (от bootstrap aggregating) борется именно с этим. Идея проста: обучаем не одну, а много одинаковых моделей на разных случайных подвыборках исходных данных, а затем усредняем их ответы. Ниже разберём механику метода, выведем, почему дисперсия падает, и покажем калькулятор, в котором видно, как число моделей в ансамбле снижает разброс итогового прогноза.
Что такое бэггинг
Бэггинг (bagging) - это ансамблевый метод, который строит набор базовых моделей на случайных бутстрэп-выборках и объединяет их предсказания голосованием (для классификации) или усреднением (для регрессии). Название расшифровывается как bootstrap aggregating - «бутстрэп-агрегирование».
Метод предложил Лео Брейман в 1996 году. Базовая модель в бэггинге называется слабым или базовым алгоритмом, хотя на практике это часто полноценные деревья решений. Главное требование к базовому алгоритму - он должен быть неустойчивым: иметь низкое смещение и высокую дисперсию. Тогда усреднение даст максимальный выигрыш.
Бэггинг относится к параллельным ансамблям: модели обучаются независимо друг от друга и ничего не знают о соседях. Это отличает его от бустинга в XGBoost, где каждая следующая модель исправляет ошибки предыдущих и обучение строго последовательно.
Бутстрэп: откуда берутся выборки
Сердце метода - бутстрэп-выборка. Из обучающего набора размера мы раз вытягиваем объект случайно с возвращением. Один и тот же объект может попасть в выборку несколько раз, а другой - не попасть вообще.
Вероятность, что конкретный объект не попадёт в одну бутстрэп-выборку, равна:
То есть в среднем около 36,8% объектов в каждую выборку не попадают. Их называют out-of-bag (OOB) объектами: на них можно оценивать качество модели без отдельной валидационной выборки. Оставшиеся примерно 63,2% объектов и составляют один бутстрэп-набор, на котором обучается одна базовая модель.
OOB-оценка - бесплатный аналог кросс-валидации. Каждый объект служит «тестовым» для тех деревьев, в чьи бутстрэп-выборки он не попал, поэтому отдельный hold-out часто не нужен.
Как снижается дисперсия
Покажем главный эффект бэггинга формулой. Пусть каждая базовая модель даёт предсказание с дисперсией , а попарная корреляция предсказаний разных моделей равна . Усредняя моделей, получаем дисперсию ансамбля:
Здесь видна вся суть. Второе слагаемое убывает с ростом числа моделей и при больших стремится к нулю. А первое слагаемое от не зависит - это «пол», ниже которого усреднением не опуститься.
Вывод: чем слабее коррелируют базовые модели (меньше ), тем сильнее падает дисперсия. Если бы модели были полностью независимы (), дисперсия упала бы в раз. На практике бутстрэп-выборки пересекаются, поэтому модели коррелируют и реальный выигрыш скромнее. Именно поэтому в случайном лесу добавляют ещё и случайный выбор признаков - чтобы дополнительно снизить .
Агрегация предсказаний
После обучения моделей их ответы нужно объединить. Способ зависит от задачи:
- Регрессия - простое усреднение: .
- Классификация - голосование большинством (hard voting): класс выбирается по числу голосов. Альтернатива - soft voting: усредняются предсказанные вероятности классов, затем берётся argmax.
Soft voting обычно точнее, если базовые модели выдают калиброванные вероятности. Hard voting устойчивее к плохо откалиброванным моделям. Смещение ансамбля при этом остаётся примерно равным смещению одной модели - бэггинг почти не трогает смещение, он работает именно с дисперсией.
Разложение ошибки: смещение и дисперсия
Чтобы понять, почему бэггинг лечит именно дисперсию, полезно вспомнить классическое разложение ожидаемой ошибки модели. Для квадратичной функции потерь средняя ошибка предсказания раскладывается на три части:
Шум - неустранимая случайность данных, её не убрать никаким методом. Смещение показывает, насколько систематически модель промахивается, а дисперсия - насколько её предсказания «гуляют» от выборки к выборке. Бэггинг усредняет много моделей с одинаковым смещением, поэтому смещение ансамбля почти не меняется, зато усреднение прямо бьёт по дисперсии. Вот почему метод бесполезен для моделей с высоким смещением и низкой дисперсией: уменьшать там просто нечего.
Простой пример на числах
Пусть мы предсказываем цену квартиры и обучили 5 глубоких деревьев на бутстрэп-выборках. На одном тестовом объекте они дали оценки (в млн руб.): 8,1; 7,4; 9,0; 8,6; 7,9. Каждое дерево по отдельности заметно ошибается в обе стороны - это и есть высокая дисперсия. Усреднение даёт:
Разброс отдельных оценок здесь около ±0,8 млн, а усреднённый прогноз гораздо ближе к истинному значению и устойчивее: добавь новый объект в обучение - отдельные деревья дёрнутся, а среднее почти не сдвинется. Для классификации логика та же, только вместо среднего считают голоса: если три дерева из пяти отнесли объект к классу «дорогая», ансамбль выдаёт «дорогая», игнорируя два ошибочных голоса.
Бэггинг и случайный лес
Самое известное применение бэггинга - случайный лес. Это бэггинг над деревьями решений с одним важным дополнением: при каждом разбиении узла дерево выбирает лучший признак не из всех, а из случайного подмножества признаков (обычно для классификации, где - общее число признаков).
Зачем это нужно, ясно из формулы дисперсии. Если в данных есть один очень сильный признак, все деревья будут строиться похоже и сильно коррелировать - останется высоким. Случайный выбор признаков заставляет деревья «смотреть» на данные под разными углами, понижает и усиливает эффект усреднения. Так случайный лес выжимает из бэггинга больше, чем простой бэггинг деревьев.
Когда бэггинг помогает, а когда нет
Бэггинг даёт выигрыш, когда базовый алгоритм неустойчив - то есть имеет высокую дисперсию. Лучшие кандидаты:
- Глубокие деревья решений - классика, дисперсия огромна, бэггинг её гасит.
- Метод k ближайших соседей при малых , нейросети без регуляризации - тоже неустойчивы.
Бэггинг почти бесполезен для устойчивых алгоритмов: линейной регрессии, наивного Байеса, k-NN при больших . У них дисперсия и так мала, усреднять нечего, а смещение бэггинг не уменьшает. Поэтому связка «бэггинг + деревья» так популярна: дерево даёт низкое смещение и высокую дисперсию - ровно то, что метод умеет лечить.
Частые ошибки
- Бэггинг ансамблем линейных моделей. Усреднение устойчивых моделей почти не снижает дисперсию: выигрыша нет, считаем впустую. Бэггинг нужен неустойчивым алгоритмам.
- Путать бэггинг с бустингом. Бэггинг - параллельное независимое обучение, борьба с дисперсией. Бустинг - последовательное, борьба со смещением. Это разные механики и разные эффекты.
- Слишком мелкие деревья в ансамбле. Если базовые деревья сильно урезать по глубине, у них растёт смещение, которое бэггинг не уменьшает. Базовые модели должны быть переобученными, а не недообученными.
- Игнорировать корреляцию моделей. Без снижения (например, без случайных признаков) выигрыш быстро упирается в пол . Добавлять деревья бесконечно бессмысленно.
- Бутстрэп без возвращения. Выборка без возвращения даёт почти одинаковые наборы и сильно коррелированные модели - эффект бэггинга теряется.
FAQ
Сколько моделей нужно в ансамбле? Дисперсия убывает как , поэтому отдача от каждого нового дерева быстро падает. На практике берут от 100 до 500 деревьев: дальше прирост качества почти незаметен, а время растёт линейно. Точное число подбирают по OOB-ошибке - она выходит на плато.
Чем бэггинг отличается от случайного леса? Случайный лес - это бэггинг над деревьями плюс случайный выбор признаков в каждом узле. Дополнительная случайность снижает корреляцию деревьев и усиливает падение дисперсии. Чистый бэггинг деревьев такого выбора признаков не делает.
Можно ли распараллелить бэггинг? Да, и это его большое преимущество. Базовые модели обучаются независимо, поэтому их легко раскидать по ядрам процессора или машинам кластера. Бустинг так распараллелить нельзя - там каждая модель ждёт предыдущую.
Коротко
Бэггинг (bootstrap aggregating) - параллельный ансамблевый метод: обучаем много неустойчивых моделей на бутстрэп-выборках и усредняем (регрессия) или голосуем (классификация). Главный эффект - снижение дисперсии: она равна , где второе слагаемое падает с числом моделей , а первое ограничено корреляцией . Смещение бэггинг почти не меняет, поэтому метод работает с неустойчивыми алгоритмами (глубокие деревья) и бесполезен для устойчивых (линейная регрессия). Знаменитое развитие идеи - случайный лес, где случайный выбор признаков дополнительно снижает .
Читайте также

Случайный лес: алгоритм Random Forest простыми словами
Случайный лес (Random Forest) - ансамблевый метод ML: как работает бэггинг, чем отличается от одного дерева, Out-of-Bag оценка, важность признаков и разбор задач.

Алгоритм AdaBoost: как слабые классификаторы дают сильный
Алгоритм AdaBoost простыми словами: адаптивный бустинг, перевзвешивание объектов, формула веса классификатора, итоговый ансамбль и разбор шага на примере с формулами.

Абстрактный класс и интерфейс: в чём отличие
Абстрактный класс и интерфейс: чем отличаются в ООП, когда наследовать поведение, а когда задавать контракт, как выбрать на примерах Java, C# и Python.