Сколько факторов подавать на вход CatBoost
Что проверяют
Понимаете ли вы, что число признаков не самостоятельная величина, и умеете ли рассуждать про переобучение, утечки и стоимость обучения. Ответ конкретным числом здесь заведомо неверный, и это часть проверки.
Как отвечать
Начните с того, что фиксированного числа нет, и назовите, от чего оно зависит: сколько строк в выборке, какая доля признаков категориальные, какая у них кардинальность, сколько времени и памяти отведено на обучение. Градиентный бустинг спокойно переваривает сотни и тысячи признаков: деревья устойчивы к нерелевантным и скоррелированным колонкам, поэтому резать ради стройности незачем.
Что действительно ограничивает в CatBoost:
- категориальные признаки дороги: для них считаются целевые статистики, а
max_ctr_complexityзадаёт глубину их комбинаций, и рост тут комбинаторный; - высокая кардинальность раздувает память, порог
one_hot_max_sizeопределяет, где заканчивается прямое кодирование и начинаются счётчики; - отбор делается не на глаз: есть
select_featuresс рекурсивным отсевом иget_feature_importanceс разными типами, включаяLossFunctionChangeи значения Шепли.
Закончите главным: качество признака важнее количества. Один признак, посчитанный с заглядыванием в будущее, обесценивает всю модель, и никакой отбор по важности этого не покажет.
Где спотыкаются
Называют норматив вроде «начните с пяти или десяти признаков». Такого правила нет, оно кочует по конспектам и на собеседовании читается как пересказ чужого текста без собственного опыта.
Второе: выбрасывают скоррелированные признаки, перенося привычку из линейных моделей. Деревьям мультиколлинеарность не мешает, страдает только интерпретация: важность размазывается между дублями, и признак кажется слабее, чем он есть.
Третье: отбирают признаки по важности, посчитанной на всей выборке, и проверяют модель случайным разбиением на временных данных. Оба шага протаскивают информацию из будущего, метрика на валидации получается красивой, а на проде модель разваливается.