Диагностика Mock-интервью
Главная · Основы машинного обучения

Деревья решений и ансамбли

Дерево решений — модель из вопросов «признак больше порога?». Само по себе оно слабое и капризное, но сотня деревьев, собранных в Random Forest или градиентный бустинг, — до сих пор чемпион по табличным данным и обязательный пункт собеседования.

Интуиция

Дерево решений (decision tree) играет в «двадцать вопросов»: «доход выше 80 тысяч? стаж больше 2 лет?» — и после серии вопросов выносит вердикт. Каждый вопрос режет пространство признаков вертикальной или горизонтальной границей, поэтому области решений у дерева всегда «ступенчатые» — из прямоугольников.

Как дерево выбирает вопросы

Обучение жадное (greedy): в каждом узле дерево перебирает все признаки и пороги и выбирает разрез, который сильнее всего уменьшает «грязность» (impurity) получившихся половинок. Стандартная мера — индекс Джини (Gini impurity):

Gini = 1 − Σ pk²   (pk — доля класса k в узле)

Gini равен нулю, когда в узле один класс, и максимален при смеси 50/50. Разрезав данные, дерево рекурсивно повторяет процедуру в каждой половинке — пока узлы не станут чистыми или не кончится глубина. Жадность означает: выбирается лучший разрез сейчас, без заглядывания вперёд, поэтому дерево не гарантирует глобально оптимального разбиения.

Глубина (max depth) — главный регулятор сложности. Дерево глубины 1 (пень, stump) проводит одну границу и почти всегда недообучено. Дерево глубины 20 выучивает каждую точку — включая шум: на трейне точность 100%, на тесте провал. Это модель с низким смещением и огромным разбросом (low bias, high variance) — про сам компромисс см. переобучение и регуляризацию.

💡 Ключевая мысль Одно дерево — нестабильный «эксперт»: чуть поменяй данные, и границы перестроятся. Сила приходит из ансамбля: много несовершенных, но разных моделей вместе ошибаются меньше, чем каждая по отдельности.

Бэггинг и Random Forest

Бэггинг (bagging, bootstrap aggregating) лечит нестабильность усреднением: делаем B бутстреп-выборок (bootstrap — выборка с возвращением того же размера), на каждой обучаем своё дерево, ответы усредняем (или голосуем). Ошибки независимых деревьев частично взаимно гасятся, и разброс (variance) падает, а смещение почти не меняется. Random Forest добавляет второй источник разнообразия: в каждом узле дерево выбирает лучший разрез не среди всех признаков, а среди случайного подмножества — деревья получаются менее похожими, и усреднение работает ещё лучше. Поэтому в лесу деревья можно (и нужно) растить глубокими: переобученность каждого гасится ансамблем. Бонус: объекты, не попавшие в бутстреп дерева (~37%), дают бесплатную out-of-bag оценку качества.

Градиентный бустинг

Бустинг (boosting) строит деревья не параллельно, а последовательно: каждое следующее неглубокое дерево обучается исправлять ошибки текущего ансамбля — в градиентном бустинге (gradient boosting) оно приближает антиградиент функции потерь, то есть «направление исправления» (родство с градиентным спуском не случайно: это спуск в пространстве функций). Ансамбль наращивается с малым шагом — learning rate. Бустинг в первую очередь снижает смещение (bias), поэтому базовые деревья берут слабые и неглубокие. Индустриальный стандарт — реализации XGBoost, LightGBM и CatBoost: с регуляризацией, обработкой пропусков и категориальных признаков из коробки.

Запомни контраст: RF борется с variance (усредняет глубокие независимые деревья, почти не переобучается, мало настроек), бустинг борется с bias (последовательно наращивает точность, выжимает максимум качества, но чувствителен к числу итераций и learning rate). На табличных данных бустинг чаще всего обходит и лес, и нейросети: деревья нечувствительны к масштабу признаков, дружат с категориями и пропусками и не требуют гигантских выборок.

⚠️ Подводный камень Не переноси рецепты между ансамблями: в Random Forest деревья глубокие и их число можно наращивать безболезненно, а в бустинге слишком много итераций или глубокие базовые деревья — прямой путь к переобучению. «Добавим ещё деревьев» безопасно для леса и опасно для бустинга без early stopping.
🎤 На собеседовании
  • «Чем Random Forest отличается от бэггинга?» — плюс случайное подмножество признаков в каждом узле: деревья разнообразнее, корреляция между ними ниже.
  • «RF или бустинг — что когда?» — RF: быстрый крепкий baseline, минимум тюнинга. Бустинг: максимум качества на табличке, но настраивай learning rate, глубину и early stopping.
  • «Почему бустинг нельзя обучать параллельно по деревьям?» — каждое дерево зависит от ошибок предыдущих; параллелизм там внутри одного дерева.
  • «Почему на таблицах бустинг бьёт нейросети?» — неоднородные признаки, категории, пропуски, малые и средние выборки — стихия деревьев; сетям нужно больше данных и подготовки.