Ответ про фичи для 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. Поэтому логарифмирование Х при некоторых способах разбиения может влиять на выбор порогов —> влияет на перформанс
Опрос про трансформацию фичей для 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. Поэтому логарифмирование Х при некоторых способах разбиения может влиять на выбор порогов —> влияет на перформанс