https://ml-course.github.io/master/labs/lab-1a-linear-models-for-regression/
Цель работы: исследовать эффективность ансамблевых методов на основе деревьев решений для задачи многоклассовой классификации типов лесного покрова на наборе данных Covertype.
В работе рассматриваются:
- Random Forest
- Gradient Boosting
Что требуется проанализировать:
- влияние гиперпараметров (глубина деревьев, число деревьев, скорость обучения);
- различия метрик Accuracy и Balanced Accuracy;
- важность признаков и отбор признаков;
- матрицу ошибок (Confusion Matrix);
- бинарный классификатор для классов 1 и 2, ROC-кривую и AUC;
- калибровку вероятностей (Platt Scaling / sigmoid calibration).
Данные: Covertype, 7 классов, 55 признаков.
Для ускорения перебора гиперпараметров использовалась подвыборка 50% исходных данных. Это допустимый компромисс между скоростью и стабильностью оценки при условии, что разбиение сохраняет распределение классов.
Для валидации применялась 3-кратная кросс-валидация (3-fold CV) с фиксированным random_state=1 для воспроизводимости результатов.
Что делалось:
- реализована функция evaluate_RF;
- обучались модели с max_depth: 2, 8, 32, 64;
- для каждого значения глубины варьировалось число деревьев n_estimators в диапазоне 1..30;
- метрика: Accuracy (средняя по 3-fold CV).
Как работает Random Forest:
- Каждое дерево обучается на бутстрап-выборке (случайная выборка объектов с возвращением).
- В каждом узле дерево рассматривает случайное подмножество признаков.
- Предсказание леса получается голосованием деревьев.
Почему это работает:
- Отдельное дерево обычно имеет низкое смещение, но высокую дисперсию (легко переобучается).
- Усреднение многих слабо коррелированных деревьев снижает дисперсию и улучшает обобщающую способность.
Интерпретация результата:
- Увеличение n_estimators обычно улучшает качество, но эффект насыщается.
- Глубина деревьев влияет сильнее, чем число деревьев.
- Неглубокие деревья (например, depth=2,8) недообучаются, поэтому ансамбль из них ограничен по качеству.
- Depth около 32 дает лучший компромисс, а дальнейшее увеличение до 64 уже почти не помогает.
Практический вывод:
- Для Random Forest сначала настраивают max_depth и только потом доводят n_estimators до зоны насыщения.
Что делалось:
- построен аналогичный график, но с метрикой Balanced Accuracy;
- использована оптимальная глубина из Exercise 1 (max_depth=32).
Зачем нужна Balanced Accuracy:
- Accuracy считает общую долю верных ответов.
- Если классы несбалансированы, модель может получить высокую Accuracy, хорошо угадывая только частые классы.
- Balanced Accuracy усредняет recall по каждому классу и потому лучше показывает качество на редких классах.
Интерпретация:
- Если Balanced Accuracy заметно ниже Accuracy, модель игнорирует часть классов.
- В данной работе различие умеренное, значит сильной деградации на редких классах нет, но контроль этой метрики обязателен.
Что делалось:
- извлечены важности признаков из настроенного Random Forest;
- построен рейтинг признаков.
Как интерпретировать важность в Random Forest:
- Важность отражает, насколько признак уменьшает неоднородность в узлах деревьев (например, по Gini impurity), усредненно по лесу.
- Более важный признак чаще участвует в полезных разбиениях, дающих прирост качества.
Ограничения:
- Важности могут быть смещены в пользу признаков с большим числом уникальных значений.
- Коррелирующие признаки делят вклад между собой, поэтому каждый по отдельности может выглядеть менее важным.
Что делалось:
- повторно обучен настроенный Random Forest;
- использованы только топ-10 признаков из предыдущего шага;
- измерены Balanced Accuracy и время обучения.
Результат и объяснение:
- Качество стало очень близким к исходному, но немного хуже.
- Время обучения изменилось несущественно.
- Это типично для Random Forest: метод устойчив к шумовым признакам, поэтому удаление слабых признаков не всегда дает большой выигрыш.
Когда feature selection полезен сильнее:
- при очень большом числе признаков;
- при дорогом вычислении признаков;
- для упрощения интерпретации модели.
Что делалось:
- выполнено стратифицированное hold-out разбиение;
- построена матрица ошибок для настроенного Random Forest.
Что такое Confusion Matrix и зачем она нужна:
- Строки обычно соответствуют истинным классам, столбцы - предсказанным.
- Диагональ показывает верные классификации.
- Внедиагональные элементы показывают, какие классы модель путает между собой.
Почему это важно:
- Одна общая метрика (например, Accuracy) не показывает структуру ошибок.
- Матрица ошибок позволяет увидеть конкретные пары трудноразличимых классов.
- На ее основе можно проектировать улучшения: доработка признаков, отдельные модели для сложных пар, изменение порогов или переобучение с весами классов.
Наблюдение:
- Наиболее частая путаница возникает между классами 1 и 2 (Spruce/Fir и Lodgepole Pine).
Что делалось:
- выделены только объекты двух классов (1 и 2);
- обучен отдельный Random Forest для бинарной задачи;
- построена ROC-кривая.
Зачем отдельная бинарная модель:
- Если в многоклассовой задаче есть «конфликтная» пара классов, узкоспециализированная модель для этой пары часто дает более точный разбор границы.
Что показывает ROC-кривая:
- По оси X: FPR (доля ложноположительных),
- По оси Y: TPR (доля истинноположительных).
- Кривая показывает качество при всех порогах вероятности.
- ROC AUC - интегральная оценка: чем ближе к 1, тем лучше разделение классов.
Что делалось:
- для бинарной модели построена calibration curve;
- выполнена калибровка методом Platt Scaling (sigmoid) через CalibratedClassifierCV;
- сравнен ROC AUC до и после калибровки.
Почему калибровка нужна:
- Модель может хорошо ранжировать объекты (высокий ROC AUC), но выдавать плохо интерпретируемые вероятности.
- Пример: объекты с прогнозом 0.8 должны быть положительными примерно в 80% случаев. Если это не так, вероятности некалиброваны.
Как работает Platt Scaling:
- Берется «сырое» значение уверенности модели.
- Обучается логистическая функция, преобразующая это значение в более реалистичную вероятность.
- Важно: калибровка должна выполняться на данных, не использованных для обучения базовой модели.
Полученный результат:
- ROC AUC uncalibrated: 0.973
- ROC AUC calibrated: 0.9684
Комментарий:
- Небольшое снижение ROC AUC допустимо. Цель калибровки - не максимизировать AUC, а улучшить качество вероятностной интерпретации.
Что делалось:
- исследовано влияние n_estimators и learning_rate для Gradient Boosting;
- построены кривые зависимости качества от числа деревьев при разных скоростях обучения.
Как работает Gradient Boosting (интуитивно и по шагам):
- Строится первое слабое дерево, дающее грубый прогноз.
- Вычисляется ошибка текущего ансамбля.
- Новое дерево обучается исправлять именно эту ошибку (градиент функции потерь).
- Прогноз обновляется с шагом learning_rate.
- Процесс повторяется n_estimators раз.
Ключевая идея:
- В отличие от Random Forest, где деревья строятся независимо и параллельно, в бустинге деревья строятся последовательно и каждое следующее зависит от предыдущих.
Роль learning_rate:
- Малый learning_rate: более осторожные шаги, обычно нужно больше деревьев, но риск переобучения ниже.
- Большой learning_rate: быстрые, но грубые шаги; модель может «перескакивать» минимум и деградировать.
Наблюдения в работе:
- Градиентный бустинг обучается медленнее Random Forest.
- При небольшом числе итераций бустинг уступает по качеству.
- learning_rate=1 дает нестабильное поведение: после начального роста качество ухудшается.
Лучшие найденные параметры:
- learning_rate=0.1
- n_estimators=400
- balanced_accuracy=0.4778
Важно про интерпретацию 0.4778:
- Для задачи с 7 классами случайное угадывание дает около 0.1429 по balanced accuracy при равномерном поведении.
- Значение 0.4778 значительно выше случайного уровня, но заметно хуже, чем у настроенного Random Forest.
- Следовательно, формулировка «ниже случайного угадывания» неверна; корректнее: «результат недостаточно высок и уступает Random Forest».
- Random Forest оказался наиболее надежным и сильным методом для данной задачи. Главный гиперпараметр - глубина деревьев; оптимальная зона около 32.
- Увеличение числа деревьев улучшает качество до насыщения, но эффект слабее, чем от настройки глубины.
- Balanced Accuracy обязательна для контроля качества по всем классам, особенно при возможном дисбалансе.
- Feature importance позволила выделить ключевые признаки, а обучение на топ-10 признаках показало лишь небольшую потерю качества.
- Confusion Matrix выявила главную проблемную пару классов (1 и 2), что обосновывает построение отдельной бинарной модели.
- Калибровка вероятностей улучшает интерпретируемость прогнозов, даже если ROC AUC слегка снижается.
- Gradient Boosting требует более аккуратной и дорогой настройки; в этой работе он не превзошел Random Forest.
Практическая рекомендация:
- Для задач с большим числом признаков и сложной структурой классов сначала использовать Random Forest как сильный базовый ориентир, а бустинг применять после тщательной настройки и с достаточным вычислительным бюджетом.