Отбор признаков
Recursive Feature Elimination (RFE)
Давно не было постов про методики топ отбора признаков. До этого я подробно рассматривал моменты, когда можно применять VIF и PSI в качестве проверочных критериев. Сейчас же мы попробуем погрузиться в чистом виде алгоритм отбора признаков. Звучит он максимально просто. "Recursive Feature Elimination (RFE)", ну или в узких кругах "Backward Selection". Это максимально понятный и простой метод отбора признаков. Мы берем и итеративно (по одному признаку) удаляем наименее важные признаки. Если это дело автоматизировать, то RFE почти всегда позволит нам попасть в субоптимальное подмножество признаков, где мы можем иметь метрики, близкие к модели, обученной на всех фичах.
Алгоритм:
1. Обучение модели на полном наборе признаков
2. Ранжирование признаков по важности
3. Удаление наименее важного признака
4. Оценка метрик качества на трейне и валидации
5. Повторение шагов 1-4 до достижения желаемого числа признаков или наблюдения драматического падения метрик
Важность признаков определяется на основе модулей коэффициентов для линейных моделей или feature_importances_ для деревьев решений и ансамблевых методов. Отдельно можно к этому применить мой любимый permutation importance или shap. Но об этом в следущий раз. Пишите в комментарии, если было бы интересно почитать.
Плюсы:
1. Легко автоматизируется
2. Применяется для исключения особо неинформативных признаков
3. Есть возможность остановить алгоритм, если сильно упала метрика (выкинули важный признак)
Минусы:
1. Зависит от применяемой модели
2. Сложно подобрать тот самый порог, ниже которого метрика не может упасть (по дефолту беру 99% от бейзлайна)
3. Очень долго может выйти удалять признаки по одному (поэтому иногда можно даже дропать по N признаков)
Иногда кстати нейминг можно спутать с вариацией алгоритма, когда мы на каждом шаге удаляем по одной фиче, и смотрим как это зааффектило на метрику. А затем удаляем один из тех, который оказал наименьшее влияние. После снова повторяем процедуру и таким образом приходим к некоторому финальному видению фичей.
RFE особенно удобен в задачах с большим числом признаков, где их генерируется большое количество (например временные ряды) и не так много наблюдений. Ну и вообще в целом, если в вашей задаче этих сгенерированных признаков очень много, скорей всего этот метод будет полезен. По приколу даже можно импортнуть RFECV из библиотеки scikit-learn, чтобы прогнать RFE на кросс-валидации - и найти наилучшее подмножество признаков на основе всех данных.
Не забываем, что есть еще много способов отбора признаков, и для нас важно понимать не только их достоинства и недостатки , но и критерии: скорость работы, стабильность отбора и интерпретация важности отбора признаков. В случае временных рядов пробуем учитывать и временные зависимости - автокорреляционный анализ и оценка эффективности лаговых признаков.
Это всего лишь один из инструментов из большого количества сопсобов поиска наиоптимальных наоборов признаков для решения наших задач. Очевидно, что топовый результат невозможно получить одними и теми же хаками, важно понимать особенности каждой задачи и данных. Поэтому стоит комбинировать подходы и всегда проверять руками результат.
Дополнительно: 1, 2, 3, 4.
@asisakov_channel
#ml
Post #421
670