Деревья решений
Механика одиночного дерева: критерии разбиения, impurity, обрезка, пределы экстраполяции, смещение важности признаков и обработка пропусков без импутации.
13 вопросов
JuniorТеорияОчень частоЧем на практике различаются критерии разбиения Gini, entropy и mean squared error?
Чем на практике различаются критерии разбиения Gini, entropy и mean squared error?
Gini и entropy оба измеряют смешанность классов и ранжируют разбиения почти одинаково; entropy добавляет логарифм и стоит чуть дороже. Регрессионные деревья минимизируют MSE, и лист даёт среднее, либо MAE — тогда медиану. Глубина и обрезка важнее.
Типичные ошибки
- ✗Ждут заметного прироста качества от замены Gini на entropy
- ✗Берут MSE при тяжёлых хвостах и ждут устойчивости, как у медианы
- ✗Думают, что лист регрессии подгоняет прямую, а не константу
Уточняющие вопросы
- →Почему предсказание среднего в листе прямо следует из минимизации MSE?
- →Когда вы осознанно выберете MAE вместо MSE для регрессионного дерева?
JuniorТеорияЧастоЧто выведет эта программа?
Что выведет эта программа?
1.0 0.83
Открыть задачу →Типичные ошибки
- ✗Ждать, что дерево без ограничений ошибётся на одиночном
0приx = 4: безmax_depthоно делит данные, пока все листья не станут чистыми, и на обучении получает1.0. - ✗Ждать, что при
max_depth=1разбиения не будет: глубина 1 — это один вопрос и два листа, они верно относят 5 объектов из 6, поэтому результат —0.83.
Уточняющие вопросы
- →Какое из двух деревьев, по-вашему, лучше справится с новыми данными и почему?
- →Чем ограничение
min_samples_leafотличается от ограниченияmax_depth?
JuniorТеорияЧастоЧто выведет эта программа?
Что выведет эта программа?
50.0
Открыть задачу →Типичные ошибки
- ✗Ждать
1000.0, будто дерево продолжит прямуюy = 10x:x = 100проходит все пороги так же, какx = 5, и попадает в крайний правый лист с константой50.0. - ✗Ждать
30.0, среднее всех целей: дерево возвращает константу листа, в который попал объект, а не общее среднее, и в этом листе толькоx = 5.
Уточняющие вопросы
- →Что предскажет
LinearRegressionдля того же входа и почему это отличается от дерева? - →Как всё же применить дерево для прогноза величины, которая растёт со временем?
JuniorТеорияЧастоЧто выведет эта программа?
Что выведет эта программа?
0.0 0.5
Открыть задачу →Типичные ошибки
- ✗Ждать
1.0для чистой группы: Gini измеряет, насколько перемешаны классы, поэтому группа одного класса получает0.0, а не максимум. - ✗Ждать
1.0для группы, где классов поровну: при двух классах Gini достигает максимума1 - 0.25 - 0.25 = 0.5и до1.0не доходит.
Уточняющие вопросы
- →Какое из двух разбиений предпочтёт дерево решений — с меньшим или с большим взвешенным Gini?
- →Почему при оценке разбиения Gini двух групп-потомков взвешивают по их размерам?
JuniorТеорияЧастоПочему столбец с номером строки может получить в случайном лесу высокую feature_importances_?
Почему столбец с номером строки может получить в случайном лесу высокую feature_importances_?
Значение в каждой строке своё, поэтому порог по столбцу можно поставить почти где угодно, и некоторые пороги случайно отделяют несколько обучающих объектов одного класса. Такие разбиения снижают Gini на обучении, и это засчитывается в важность.
Типичные ошибки
- ✗Считать, что важность растёт с величиной значений: разбиение лишь сравнивает признак с порогом, поэтому масштаб не важен, а важно число разных значений.
- ✗Принимать высокую важность за доказательство пользы столбца: важность считается по обучающей подгонке, а без номера строки доля верных ответов на тесте обычно не падает.
Уточняющие вопросы
- →Как проверить, помогает ли столбец с высокой важностью модели на новых данных?
- →Почему у бинарного признака меньше шансов выиграть разбиение, чем у столбца с уникальным значением в каждой строке?
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 или градиентный бустинг это ограничение, и почему нет?