TGViewer
asisakov asisakov @asisakov_channel · 4.13K subscribers
Post #132 395
Отбор признаков
PSI

Сегодня рассмотрим чуть глубже подходы для отбора признаков, которые я описывал в данном посте. Почему я выбрал именно 2 критерия в отдельности в пункте 7, а не скажем вместе с корреляцией? Здесь все просто - корреляция и разные импортансы нацелены на то, чтобы отобрать фичи с наилучшей информативностью (не всегда так и есть) для оптимизации нашей целевой функции. VIF и PSI нацелены немного на другое - убрать те фичи, которые могут сделать модель хуже. Понятно, что есть еще и методы типа удаления признаков с одним уникальным значением и тех, в которых больше 80% пропусков, но это всем очевидно, поэтому мы их даже не будем рассматривать, а перейдем сразу к нашим критериям. В этом посте начнем про PSI, в следующем поговорим про VIF.

Population Stability Index (PSI) - показатель, который количественно оценивает разницу между двумя распределениями величины, изменившейся во времени (изначально оценивались различные популяции животных). Он используется в мониторинге (и валидации) моделей для сравнения распределений на выходе модели или смещения распределения входных признаков (еще называт это как дрифт в данных). Можно рассчитывать как по числовым, так и по категориальным признакам. При этом для числовых распределений используется биннинг.

Как это работает. Мы берем какой-либо числовой признак в трейне и out-of-time выборке, делим его на 10 бакетов по децилям в трейне, а в OOT делим по границам децилей, полученных на train выборке. Далее смотрим количество наблюдений и рассчитываем для каждого бакета значение смещения по формуле:

(%oot - %train) * ln(%oot/%train), где:
%train - доля наблюдений в train выборке в данном бакете
%oot - доля наблюдений в oot выборке в данном бакете

После проделанных вычислений берем и суммируем полученные нами значения и получаем некоторую цифру - это и есть наш PSI. Ее следует сравнить с определенными порогами (значения в разных источниках отличаются).
Давайте рассмотрим пороги отсюда:

1. PSI < 0.1 — все хорошо, дрифт незначительный
2. 0.2 > PSI >= 0.1, признак можно использовать, но очень осторожно и следует его мониторить чаще. Можно также попробовать преобразовать или заменить на похожий
3. PSI >= 0.2 (в некоторых источниках порог 0.25) — признак использовать не стоит, потому что слишком меняется его распределение

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

Вообще, тут сказано, что PSI - это именно для оценки выходов моделей, а для фичей применяется метод CSI (characteristic stability index). Суть та же самая, просто название чуть другое. За все мое время работы я ни разу не слышал, чтобы кто-то упоминал CSI.

Также интересная (для кого-то очевидная) заметочка отсюда: "We can use chi-square for binned data or KS test to compare distribution of two data sets".

Подробнее можно почитать (не считая указанные выше источники) тут.
И еще очень хорошее пояснение с картиночками и кодом есть тут.

#ml
Telegram asisakov Как из 6000 признаков выбрать 10 наиболее нужных для модели? Допустим, мы нагенерили много признаков с использованием техник, описанных в посте выше. Что делать дальше? Неужели нам потом надо тянуть в модель их все и собирать для них отдельные витрины? С…
  • 🥰 3
  • 🔥 2
  • ❤ 1
More from @asisakov_channel
  1. Sep 29, 2026Так, тут в той самой сореве Kaggriculture какой-то максимально жесткий движ и более 10к уч…
  2. Sep 28, 2026Гермес, Пи или Уроборос Пару дней назад не выдержал и удалил Гермеса. Все же слишком друно…
  3. Sep 27, 2026Post #1431
  4. Sep 27, 2026Post #1430
  5. Sep 25, 2026🇬🇧 Английский, который хочется не просто учить, а действительно использовать Если вы дав…
  6. Sep 24, 2026Post #1428
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →