🏢 Ситуация
Модель оттока из модуля 5 работает месяц. Лена на планировании:
«Логрег дал ROC-AUC 0.83 — хорошо для старта. Ретеншен просит точнее: каждый лишний процент качества — это сотни удержанных клиентов. Пора доставать тяжёлую артиллерию табличного ML: деревья и ансамбли. Сравни Random Forest и градиентный бустинг с нашим логрегом. Спойлер: на табличных данных бустинг почти всегда побеждает нейросети — пойми почему.»
🎯 Ваша задача
- Понять, как работает дерево решений и почему одно дерево — слабо.
- Разобраться в двух стратегиях ансамблей: бэггинг (Random Forest) и бустинг.
- Побить бейзлайн и объяснить прирост.
📚 Теория
Дерево решений
Дерево разбивает данные серией вопросов «признак > порог?», выбирая на каждом шаге разбиение, максимально уменьшающее «нечистоту» (Gini/энтропию). Плюсы: не требует масштабирования, ловит нелинейности и взаимодействия признаков, интерпретируемо. Минус: одно дерево легко переобучается — глубокое дерево запоминает шум.
Ансамбли: мудрость толпы
Идея: много слабых моделей, ошибающихся по-разному, вместе точнее одной сильной.
Бэггинг → Random Forest:
- Каждое дерево учится на случайной подвыборке строк (bootstrap) и случайном подмножестве признаков.
- Предсказания усредняются → дисперсия падает, переобучение сглаживается.
- Деревья независимы → обучение параллелится.
Бустинг → XGBoost / LightGBM / CatBoost:
- Деревья строятся последовательно: каждое следующее исправляет ошибки (обучается на градиенте функции потерь) предыдущих.
- Деревья неглубокие (3–8 уровней), их сотни-тысячи.
- Обычно точнее леса, но чувствительнее к гиперпараметрам и легче переобучается.
| Random Forest | Gradient Boosting | |
|---|---|---|
| Стратегия | параллельно, усреднение | последовательно, исправление ошибок |
| Переобучение | устойчив | требует контроля (early stopping) |
| Скорость обучения | быстрее (параллель) | медленнее, но LightGBM очень быстр |
| Качество на табличках | хорошее | обычно лучшее |
Ключевые гиперпараметры бустинга
n_estimators— число деревьев; с early stopping можно ставить много.learning_rate— вклад каждого дерева; меньше = стабильнее, но нужно больше деревьев.max_depth/num_leaves— сложность дерева, главный регулятор переобучения.early_stopping_rounds— стоп, когда метрика на валидации не растёт N итераций.
Почему на таблицах бустинг > нейросети
Табличные данные разнородны (деньги, счётчики, категории), зависимости кусочно-резкие («просрочка > 30 дней → риск скачком»). Деревья моделируют такие пороги нативно, нейросети — с трудом. Это подтверждено индустрией и Kaggle: для таблиц по умолчанию — градиентный бустинг.