Ответ про фичи для CatBoost



Опрос про трансформацию фичей для CatBoost собрал максимум комментариев за историю канала (сейчас их 35!)

И еще мне немало накидали на вентилятор в реакциях)) Так что тема выглядит актуальной - разбираемся в ней 💪





(x - mean(x))^2

Влияет на перформанс CatBoost



Был отличный пример в комментариях для x = (-4;4), mean(x) = 0, —> (x - mean(x))^2 = (4; 4)

раньше -4 и 4 можно было разделить CatBoost-ом, а после трансформации - нельзя



Зачем тогда так делать?

- Иногда полезно считать “нестандартность” наблюдения. Например, нам может быть важно, отличается ли условно время в пути от среднего

- Еще это супер фича для эмбеддингов - можно считать, насколько эмбеддинг пользователя отличается от среднего эмбеддинга (почти как cos-инусная близость)





round(x, some step)

Влияет на перформанс CatBoost



При округлении вы снижаете число возможных разбиений датасета деревом

- Очень полезная история для робастности прогноза на высоко-дисперсных фичах (средний чек, кол-во кликов и тп)

- Для борьбы с переобучением на выбросах

- Для экономии памяти и ускорения вычислений. Вообще бывает полезно округлять float64 фичи до int8 / int16. С помощью этого и еще пары трюков (я как-нибудь напишу об этом пост) я умдрялся переводить расчеты со Spark на python с ускорением в 10 раз 🚀

Кек, но правда - вам не всегда нужен spark:)





log(x)

Вообще-то говоря, может влиять!



На собеседовании от вас скорее всего ждут ответа “Нет, не влияет. Дерево перебирает все возможные пороги разбиения. И нет разницы, выбрать порог x > A или log(x) > log(A)”



Но в реальности может влиять из-за 2ух факторов:

1/ Дерево перебирает не все пороги разбиения 🙃

За кол-во порогов отвечает параметр max_bin, который по дефолту в катбусте на CPU = 254. И кстати, он прилично аффектит на скорость обучения вашей модели



2/ Пороги разбиения (квантизация фичей) выбираются по дефолту не по квантилям распределения (робастно к монотонным трансформациям вроде логарифма), а иначе. В catboost по дефолту - GreedyLogSum. Поэтому логарифмирование Х при некоторых способах разбиения может влиять на выбор порогов —> влияет на перформанс