Деревья решений
Механика одиночного дерева: критерии разбиения, impurity, обрезка, пределы экстраполяции, смещение важности признаков и обработка пропусков без импутации.
9 вопросов
JuniorТеорияОчень частоЧем на практике различаются критерии разбиения Gini, entropy и mean squared error?
Чем на практике различаются критерии разбиения Gini, entropy и mean squared error?
Gini и entropy оба измеряют смешанность классов и ранжируют разбиения почти одинаково; entropy добавляет логарифм и стоит чуть дороже. Регрессионные деревья минимизируют MSE, и лист даёт среднее, либо MAE — тогда медиану. Глубина и обрезка важнее.
Типичные ошибки
- ✗Ждут заметного прироста качества от замены Gini на entropy
- ✗Берут MSE при тяжёлых хвостах и ждут устойчивости, как у медианы
- ✗Думают, что лист регрессии подгоняет прямую, а не константу
Уточняющие вопросы
- →Почему предсказание среднего в листе прямо следует из минимизации MSE?
- →Когда вы осознанно выберете MAE вместо MSE для регрессионного дерева?
JuniorТеорияЧастоКак дерево может обрабатывать пропуски без предварительной импутации?
Как дерево может обрабатывать пропуски без предварительной импутации?
Есть два механизма. Выученное направление по умолчанию отправляет все пропуски признака разбиения в одну ветвь — при обучении пробуют обе стороны и берут ту, где выигрыш больше; так делают LightGBM и XGBoost. Суррогатные разбиения в CART ведут строку по запасному признаку.
Типичные ошибки
- ✗Полагают, что библиотека всегда импутирует молча, и обработку пропусков можно не проверять
- ✗Думают, что направление по умолчанию фиксировано, а не выучено по выигрышу
- ✗Путают суррогатное разбиение с копией основного разбиения
Уточняющие вопросы
- →Что произойдёт на предсказании, если признак ни разу не был пропущен при обучении?
- →Когда явная импутация всё же предпочтительнее встроенной обработки?
JuniorТеорияЧастоЧем отличаются pre-pruning и post-pruning, и что такое cost-complexity pruning?
Чем отличаются pre-pruning и post-pruning, и что такое cost-complexity pruning?
Pre-pruning ограничивает рост заранее через max_depth, min_samples_leaf или min_impurity_decrease — дёшево, но можно остановиться до полезного разбиения. Post-pruning строит дерево целиком и затем отбрасывает поддеревья, чей выигрыш в ошибке не окупает размер.
Типичные ошибки
- ✗Считают max_depth единственной ручкой обрезки, игнорируя ограничения на размер листа
- ✗Подбирают alpha для cost-complexity на обучении, а не на валидации
- ✗Полагают, что post-pruning всегда лучше простого ограничения глубины
Уточняющие вопросы
- →Почему pre-pruning может пропустить разбиение, полезное лишь двумя уровнями глубже?
- →Как подобрать alpha для cost-complexity с помощью кросс-валидации?
JuniorТеорияЧастоНужны ли деревьям решений масштабирование признаков и one-hot encoding, и почему?
Нужны ли деревьям решений масштабирование признаков и one-hot encoding, и почему?
Масштабирование не нужно — разбиение сравнивает признак с порогом, поэтому монотонное преобразование сохраняет порядок и все кандидаты-разбиения. Категориям нужен числовой код, но годится и порядковый; one-hot необязателен и при многих уровнях размывает категорию.
Типичные ошибки
- ✗Стандартизируют признаки перед деревом и ждут другую модель
- ✗Кодируют one-hot колонку с большой кардинальностью и удивляются слабым разбиениям
- ✗Считают, что дерево вообще не может работать с целочисленным кодом категории
Уточняющие вопросы
- →Почему немонотонное преобразование меняет дерево, а монотонное — нет?
- →Когда one-hot encoding всё же полезен дереву, несмотря на размывание?
JuniorТеорияЧастоКак дерево решений выбирает разбиение и что измеряет Gini impurity?
Как дерево решений выбирает разбиение и что измеряет Gini impurity?
На каждом узле дерево перебирает все признаки и пороги, оценивает каждое разбиение взвешенной по размеру impurity двух потомков и берёт максимальное падение impurity. Gini — вероятность ошибиться, присвоив объекту класс случайным жребием; 0 — чистый узел.
Типичные ошибки
- ✗Думают, что разбиение минимизирует ошибку напрямую, а не impurity узла
- ✗Забывают, что impurity потомков взвешивается по числу объектов
- ✗Считают большой Gini признаком чистого узла — чистый это 0
Уточняющие вопросы
- →Почему перебор разбиений жадный и локальный, а не глобально оптимальный?
- →Как меняется перебор порогов для непрерывного признака с множеством уникальных значений?
MiddleДебаггингЧастоImpurity-важность ставит почти уникальную ID-колонку на первое место — в чём ошибка и чем её заменить?
Impurity-важность ставит почти уникальную ID-колонку на первое место — в чём ошибка и чем её заменить?
Impurity-важность суммирует убранную признаком impurity, а колонка с высокой кардинальностью даёт куда больше кандидатов-порогов, поэтому выигрывает разбиения случайно и без обобщения — и считается по обучающей подгонке. Берите permutation importance на отложенной выборке.
Открыть задачу →Типичные ошибки
- ✗Доверяют
feature_importances_как причинному или обобщающему рейтингу - ✗Считают, что высокая impurity-важность означает вклад в метрику на валидации
- ✗Запускают permutation importance на обучении, воспроизводя то же смещение
Уточняющие вопросы
- →Почему коррелированные признаки всё же путают permutation importance, и что помогает?
- →Чем удаление признака с переобучением отличается от его перемешивания?
MiddleТеорияЧастоКорневое разбиение почти идеально по одному признаку — это утечка или сильный предиктор?
Корневое разбиение почти идеально по одному признаку — это утечка или сильный предиктор?
Сверьте признак со словарём данных и таймлайном — если значение известно лишь после целевого события или выводится из него, это утечка. Настоящий предиктор сохраняет преимущество на поздней временной нарезке; утечка разваливается в проде.
Типичные ошибки
- ✗Судят о признаке по силе корреляции, а не по доступности на момент предсказания
- ✗Доверяют случайной валидации, делящей утёкшую колонку с обучением
- ✗Считают, что любая колонка из обучающей таблицы будет и на скоринге
Уточняющие вопросы
- →Как валидация по времени вскрывает утечку, которую прячет случайный k-fold?
- →Какие колонки в таблице событий чаще всего выводятся из целевой переменной?
MiddleДебаггингЧастоДерево даёт 100% на train и 60% на test — какие ручки крутить и как проверить эффект?
Дерево даёт 100% на train и 60% на test — какие ручки крутить и как проверить эффект?
Дерево запомнило данные — неограниченная глубина позволяет листьям хранить по одной строке. Ограничьте max_depth, поднимите min_samples_leaf либо обрежьте дерево перебором ccp_alpha. Проверяют кросс-валидацией, а не числом листьев: обрезка помогла, если метрика выросла и разрыв сузился.
Открыть задачу →Типичные ошибки
- ✗Принимают уменьшение дерева за доказательство роста обобщения
- ✗Подбирают глубину по тестовой выборке и её же приводят как результат
- ✗Опираются только на max_depth, игнорируя ограничения на размер листа
Уточняющие вопросы
- →Как перебрать ccp_alpha кросс-валидацией, а не по одному разбиению?
- →За какую ручку возьмётесь первой при сильном дисбалансе классов?
MiddleТеорияИногдаПочему дерево решений не может экстраполировать за пределы обучающего диапазона?
Почему дерево решений не может экстраполировать за пределы обучающего диапазона?
Дерево предсказывает по константе на лист, поэтому выход кусочно-постоянный. Любой вход за максимальным обучающим значением попадает в тот же крайний лист и получает ту же константу — полку, а не тренд. Для трендового признака уберите тренд из цели.
Типичные ошибки
- ✗Подают дереву сырое время или трендовый признак и ждут продолжения роста
- ✗Думают, что большая глубина или больше деревьев вернут экстраполяцию
- ✗Путают полку крайнего листа с возвратом глобального среднего
Уточняющие вопросы
- →Как удаление тренда или взятие разностей цели возвращает пригодное поведение?
- →Меняют ли random forest или градиентный бустинг это ограничение, и почему нет?