Pull to refresh

Comments 9

Сама важность фактора определяется как снижение оценки модели по целевой метрике на валидационной выборке при случайной перестановке значений этого фактора

А почему просто не выбрасывать признак и сравнивать метрику с признаком/без?


Но есть важный недостаток, за счет которого им нельзя заменить так понравившийся нам Permutation importance: а именно, мы не можем оценить влияние на целевую метрику, так как знаем только факт, что предсказания изменились, а на вопрос, в какую сторону, данный алгоритм не отвечает.

Может я что-то не так понял, но по крайней мере из изложения следует наоборот: в случае permutation importance нельзя оценить влияние на целевую метрику (случайно перемешали, метрика изменилась, но насколько сильно изменение признака на это поменяло не понятно, т.к. изменение случайно). В случае с Prediction value change мы вроде как-то контролированно меняем значение признака и смотрим на изменение целевой метрики, т.е. можем количественно отслеживать. Хотя, тем до конца не раскрыта, как именно меняются значения признака? Просто на какое-то фиксированное значение? Меняется на фиксированную величину сразу для всех наблюдений, а потом считается по ним среднее, или что-то более хитрое?


И, кстати, как проводится отбор по PSI?

Ребята все хорошо написали. Я рекомендую вам прочитать про permutation importance - очень правильный подход с стд на разных сидах.

Нельзя просто выкидывать признаки - точнее можно, конечно, если понимать очень глубоко связи между ними. В реальной жизни часто бывают «связанные» признаки с нелинейными зависимостями / признаки с высокой корреляцией / сид сплита / другие варианты - при удалении одного из признаков часто сложно понять точное влияние на метрику - снижение или повышение метрики может быть просто рандомным фактором.

Привет!

Спасибо за проявленный интерес к статье. Возвращаемся с комментариями.


Permutation Importance: Согласны с тем, что не совсем правильно просто выбросить признак и сравнить до/после по целевой метрике. Во-первых потому что нужно будет перестраивать модель (так как это метод wrapper и его реализация привязана к построенной модели), а это вычислительно сложно. И поддерживаем, что выкидывая признак, мы можем потерять очень важные взаимосвязи между выброшенным и оставшимися факторами. В нашем случае мы используем данный алгоритм, чтобы выкинуть заведомо очень плохие факторы.


PredictionValueChange: Изменение предсказания не равно изменению целевой метрики в строгом смысле. То есть признак может быть важен и предсказания чувствительны к его изменению, но на целевой метрике значимым образом это может и не отразиться. В этом методе мы целевую метрику не считаем. О подробностях расчета PredictionValueChange рекомендуем обратиться к документации CatBoost - мы использовали его нативную реализацию.


Отбор по PSI: У нас есть разные стратегии отбора. Например, мы можем сравнивать период t против периода t+1 (последовательным образом); либо каждый период сравниваем с каждым. Эти расчеты выполняем на уровне каждого фактора и каждого типа периода (год, месяц и т.п. в зависимости от задачи). Затем каким-либо образом аггрегируем результаты по периоду и между периодами. Это может быть какой-то прокси-скор, который зависит от свежести рассматриваемого периода, важности того или иного типа периода, а может быть просто максимальное значение метрики по всем срезам.

Во-первых потому что нужно будет перестраивать модель

Это действительно может быть важно. Но почему тогда просто не занулять или заполнить ещё каким-то константым значением (и это быстрее случайной перестановки)?
Насчет взаимосвязи с другими признаками: так разве мы всё равно эту взаимосвязь точно также не рушим, переставляя значения признака случайным образом? Какие вообще типы взаимосвязей могут сохраниться при случайной перестановке?


Ну и, наконец, итоговая цель же всего действа — отбор фичей. Допустим, признак оказался незначительным в ходе permutation importance, итоговая модель будет построена без него, т.е. он в любом случае будет отброшен.


Затем каким-либо образом аггрегируем результаты по периоду и между периодами. Это может быть какой-то прокси-скор, который зависит от свежести рассматриваемого периода, важности того или иного типа периода, а может быть просто максимальное значение метрики по всем срезам.

Т.е. сам PSI индекс не используется, просто название выбрано в силу схожести по смыслу?

Занулять, проставлять константное значение - нарушая взаимосвязи между признаками, таргетом и затем оценить влияние на целевую метрику - вполне можно. Но стоит отметить, что n-случайных перестановок внесет больше случайности, чем просто зануление и позволит сформировать вывод по итогам n-изменений. При этом значения по сути будут взяты из исходного распределения.

По поводу сохранения взаимосвязи при случайной перестановке. Мы предполагаем, что каждый фактор каким-либо образом вносит вклад в результат модели. Цель данного метода именно в нарушении зависимостей, то есть, если при перемешивании значений фактора скор не изменяется, либо улучшается, велика вероятность того, что данный фактор плохой, поэтому стоит его исключить.

Действительно, цель всего этого - отбор фичей. Тут стоит отметить, что при расчёте permutation importance количество факторов в модели не меняется, просто перемешиваются значения отдельных факторов. Получив результаты n перестановок значений каждого фактора, мы рассчитываем среднее изменение целевой метрики на уровне фактора, на основе этого принимаем решение - удалять фактор или пропустить его дальше.

Когда говорим про аггрегацию значений - то аггрегируем выбранную статистику, например PSI. А когда говорим про прокси-скор, то он выставляется в зависимости от значения PSI или другой статистики.

Очень хорошо написано, приятно читать. ) Но по ходу возник вопрос - вот эти top100, top50, top25 выбраны фиксировано, или пробовали и промежуточные варианты, просто оставили только эти для презентации? Вдруг там внезапно скачок метрики на top42, например, а вы его пропустили из-за такого подхода? )

Спасибо! Мы рады, что статья понравилась!

В рамках этой задачки и конкретной ее итерации мы смотрели только на фиксированные топы факторов. Замечание дано по делу и позволит сэкономить на признаковом пространстве, при сохранении приемлемого уровня качества модели, хоть и потребует вычисления n-моделей. Один из способов, который мы не применили тут, но который нам нравится на финальном шаге - это разные реализации последовательного включения/исключения факторов (по итогам их сортировки от лучших к худшим по тем же Permutatuion Importance например) и оценка изменения качества с каким-либо критерием останова. Мы опробовали такие подходы в некоторых задачах, что позволило нам сократить признаковое пространство с сохранением/улучшением скора.

Это уже получается stepwise подход, как для регрессии из предыдущих статей. Вернее, комбинация из нескольких таких подходов. Когда фич уже не так много отобрано, наверное, можно такое пробовать. А когда фич тысячи и это бустинг stepwise, конечно, нереально применять, почему он в этой статье и не применялся видимо.

Вы все верно отметили, действительно такие методы стоит применять на финальном этапе отбора, а их основная цель в том, чтобы окончательно очистить пространство признаков от шумов (от факторов, которые не влияют на итоговый результат), только уже рассматривая не отдельные факторы, а их комбинации.

Sign up to leave a comment.