Перейти к содержанию
Публикация AiManual

Деревья решений в машинном обучении: как работает метод «белого ящика» и где он ломается

Разбираем деревья решений на бытовом примере с опозданием на работу: как один вопрос про 8:15 делит данные, чем классификация отличается от регрессии, почему гл

Коротко

Что будет в материале

  1. 01

    Что такое дерево решений и почему его называют «белым ящиком»

  2. 02

    Дерево решений на примере: от одного вопроса до иерархии

  3. 03

    Классификация и регрессия: чем отличаются деревья решений

  4. 04

    Где дерево решений ломается: переобучение и глубина

Что такое дерево решений и почему его называют «белым ящиком»

Дерево решений предсказывает класс или число, последовательно отвечая на вопросы о признаках объекта. Каждый внутренний узел содержит проверку, каждая ветвь соответствует одному ответу, каждый лист выдаёт готовый прогноз. В разборе дерева решений на NeuroHive метод описан как логическая схема, которая позволяет получить окончательное решение о классификации объекта после ответов на иерархически организованную систему вопросов.

Практический смысл простой: прогноз можно прочитать вслух и проверить. Фразу «опоздал, потому что вышел позже 8:15 и не успел до 8:30» собирают прямо из структуры модели, это буквальный путь от корня к листу.

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

Почему «белый ящик» это про интерпретируемость, а не про простоту

«Белый ящик» означает, что между входом и выходом нет скрытых слоёв с миллионами весов. Решение раскладывается на конечное число условий, и каждое условие проверяемо на конкретном объекте. Ценность в разговоре с теми, кто принимает решение: аналитик, кредитный комитет, инженер по оборудованию видят причину отказа, а не «модель так решила».

Где прозрачность заканчивается. Дерево глубины 3-5 уровней читается глазами. Дерево глубины 20 с сотнями листьев формально остаётся тем же алгоритмом, но прочитать его уже нельзя. Ансамбль из сотен деревьев (XGBoost, случайный лес) не читается вообще. «Белый ящик» - свойство одиночного дерева разумного размера, а не дерева как класса моделей и тем более не ансамбля.

Дерево решений на примере: от одного вопроса до иерархии

Задача: предсказать, придём ли на работу вовремя. Признак один - время выхода из дома. Целевая переменная категориальная, у неё два значения: «вовремя» и «опоздание». Первый вопрос в точке разветвления: «Выход из дома осуществляется раньше 8:15?» Ответ «да» ведёт к своевременному прибытию, «нет» к опозданию. Такая граница решения делит данные на две группы, и получается самое простое дерево из одной пары ветвей.

Добавим границы 8:00 и 8:30 - получим дерево из двух уровней с более точным прогнозом. В общем случае уровней может быть сколько нужно, а каждый узел в большинстве случаев имеет только две ветви.

Время выходаЧто предсказывает дерево
До 8:00Придём вовремя
8:00-8:15Высокая вероятность прийти вовремя, гарантии нет
8:15-8:30Большая вероятность опоздать
После 8:30Опоздание гарантировано

Правило по одной минуте не абсолютно, и разбор с границей 8:15 это признаёт: исключения есть. Причина в том, что в модели нет пробок, погоды и вида транспорта. Дерево упрощает реальность по построению, вопрос только в том, насколько грубо.

Как добавляются признаки: время выхода и день недели

Второй признак - день недели. В разборе его кодируют числами: понедельник = 1, суббота = 6, воскресенье = 7. Выход в 8:10 достаточен, чтобы успеть на работу вовремя в будний день, но не достаточен в выходные. Модель перестаёт делить только по времени и начинает комбинировать условия.

В листьях оказываются пересечения интервалов: «вышел до 8:00 и будний день», «вышел около 8:10 и выходной». Число возможных комбинаций растёт с каждым новым признаком быстро, и дереву нужно больше данных, чтобы отличать закономерность от случайных совпадений.

Признак и порог на каждом уровне дерево выбирает само: перебирает варианты и берёт тот, что лучше разделяет данные по целевой переменной. Ручная работа сводится к тому, какие признаки вообще подать на вход.

Классификация и регрессия: чем отличаются деревья решений

Тип дерева определяется целевой переменной. Категориальная переменная (два класса «вовремя / опоздание», пять классов, десять) даёт классифицирующее дерево: лист возвращает класс или вероятности классов. Числовая переменная (сколько минут займёт дорога) даёт регрессионное дерево: лист возвращает число, обычно среднее по объектам, которые в него попали.

Различие видно и в оценке качества разбиения. В классификации смотрят, насколько однородными стали группы классов, в регрессии - насколько уменьшился разброс чисел внутри групп. Критерии обобщённо называют неоднородностью: индекс Джини и энтропия для классификации, среднеквадратичная ошибка или дисперсия для регрессии.

Отдельное свойство регрессионного дерева: за пределы обучающего диапазона оно не экстраполирует. Если в данных время выхода не превышало 9:00, прогноз для 9:30 будет таким же, как для ближайшего листа, то есть средним по нему.

Как строится дерево: жадный выбор разбиений

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

Отсюда два следствия. Первое: дерево легко наращивает глубину, потому что каждое следующее разбиение локально выгодно, даже когда в целом оно подгоняет шум. Второе: структура неустойчива. Другая выборка, и верхний порог может сместиться, а вместе с ним перестроится всё, что ниже.

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

Где дерево решений ломается: переобучение и глубина

Главное ограничение метода - переобучение при слишком глубоком дроблении. Алгоритм задаёт вопросы, пока в листьях не останутся единичные объекты или пока не кончатся признаки. Такое дерево идеально описывает обучающую выборку и разваливается на новых данных: оно запомнило конкретные комбинации, а не закономерность.

Почему глубокое дерево запоминает шум

Дерево, которое делит по условию «вышел в 8:12 в среду», описывает один-два случая из истории. Для этих объектов прогноз будет точным, для похожего «вышел в 8:13 в среду» - уже нет. Разбор с границей 8:15 прямо оговаривает, что правило не абсолютно и исключения существуют; глубокое дерево пытается выучить каждое исключение отдельным листом. Численных оценок переобучения в этом примере нет, поэтому рычаги контроля ниже - общая практика, а не результат конкретного эксперимента.

  • Максимальная глубина дерева (max_depth) ограничивает число уровней.
  • Минимальное число объектов в листе (min_samples_leaf) не даёт создавать листья под единичные случаи.
  • Минимальное число объектов в узле для разбиения отсекает дробление мелких групп.
  • Обрезка ветвей после построения (pruning) убирает те, что не дают выигрыша на валидации.
  • Ограничение числа листьев задаёт бюджет сложности напрямую.

Проверка стандартная: сравнить качество на обучении и на отложенной выборке или в кросс-валидации. Большой разрыв между ними и есть сигнал переобучения. Универсальных значений глубины нет, они зависят от объёма данных и числа признаков.

Вычислительная сложность растёт с размером таблицы. На каждом узле перебираются все признаки и все пороги между соседними значениями, поэтому время построения увеличивается с числом строк и колонок. Потребность в данных растёт по той же причине: чтобы отделить закономерность от шума по 50 признакам, объектов нужно заметно больше, чем по двум. Чем шире набор признаков, тем выше шанс, что случайная комбинация даст хорошее разбиение именно на обучающей выборке.

Деревья решений против линейной регрессии и нейросетей

Различие в форме зависимости. Дерево даёт кусочно-постоянную аппроксимацию: внутри листа прогноз одинаков, на границе скачок. Для задачи «выход после 8:15, значит опоздание» это естественная форма, риск меняется ступенькой.

Линейная регрессия описывает зависимость прямой, в многомерном случае гиперплоскостью: изменение признака даёт пропорциональное изменение прогноза. Пороговые эффекты она передаёт плохо. Чтобы описать «после 8:15 всё резко хуже», в модель вручную добавляют признаки: флаг «вышел позже 8:15», сплайны, разбиение на интервалы.

Нейросеть способна выучить и разрыв, и сложное взаимодействие признаков, но для этого ей нужны данные и обучение. На небольшой выборке гладкие активации и усреднение по батчам тянут прогноз к плавной функции, и резкий скачок размывается. Гибкость оплачивается объёмом данных, временем обучения, настройкой и непрозрачностью.

КритерийОдиночное деревоЛинейная регрессияНейросеть
Форма зависимостиКусочно-постоянная, с порогами и взаимодействиямиЛинейнаяГибкая, включая разрывы при достаточных данных
ИнтерпретируемостьВысокая при малой глубинеВысокая: видны коэффициенты и их знакНизкая без отдельных инструментов
Подготовка признаковМасштабирование не требуетсяНужны масштабирование и преобразованияНужны масштабирование, кодирование, много данных
Риск переобученияВысокий при большой глубинеРастёт с числом признаковВысокий без регуляризации и объёма данных
Пороговые эффектыЛовит по построениюНужны ручные признакиЛовит при достаточном обучении

Категоричных рекомендаций тут не бывает. Дерево проигрывает линейной модели на данных, где зависимость действительно линейная: оно аппроксимирует прямую ступеньками и тратит на это лишние уровни. Линейная модель проигрывает дереву там, где эффект включается после порога.

Ансамбли деревьев и XGBoost: почему одиночное дерево - не финал

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

Практический факт из разбора: большинство высокорезультативных решений на Kaggle - комбинация XGBoost, одного из вариантов деревьев решений, и очень качественного фичер-инжиниринга (источник). Обратная сторона: ансамбль теряет интерпретируемость. Путь внутри одного дерева из сотни прочитать можно, но итоговый прогноз собирается из суммы вкладов всех деревьев, и для объяснения нужны отдельные инструменты вроде важности признаков или SHAP.

Почему фичер-инжиниринг важнее выбора алгоритма

Вернёмся к дню недели. Кодирование понедельник = 1, воскресенье = 7 позволяет дереву поставить границу «день < 6» и одной проверкой отделить выходные от будних. Перемешайте дни случайными числами, и та же модель будет собирать будни из отдельных кусков, тратя уровни на то, что решалось одним вопросом.

Качество признаков определяет, какие разбиения вообще возможны. Если в данных нет ничего про пробки по утрам или удалённую работу в пятницу, ни дерево, ни XGBoost этого не выведут. Сильный результат даёт связка признаков, отражающих механизм задачи, и ансамбля деревьев, а не один алгоритм сам по себе.

Когда брать дерево решений, а когда - ансамбль или другую модель

Одиночное дерево уместно, когда объяснимость обязательна: кредитный скоринг с требованием обосновать отказ, правила диагностики оборудования, медицинские протоколы. Второй случай - разведка данных: мелкое дерево на два-три уровня быстро показывает, какие признаки и пороги вообще работают в задаче.

Ансамбль деревьев (XGBoost, случайный лес) берут, когда нужна точность на табличных данных и есть выборка для обучения и валидации. Интерпретируемость придётся восстанавливать отдельно, через важности признаков и локальные объяснения.

Линейная модель подходит, если связь близка к линейной, признаков немного и нужна система, которую можно пересчитать вручную. Нейросеть оправдана на неструктурированных данных (текст, изображения, звук) или там, где сложные взаимодействия признаков нужно выучить из большого объёма примеров.

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

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

Подписаться на канал