Утром PSI скора на дашборде вырос до 0,27. В чате уже спрашивают, когда переобучать модель. Ответ спрятан за цифрой: как нарезаны корзины, что взято за эталон, какое выбрано окно и что с качеством на свежих метках. Ниже расчёт индекса и правила, когда его рост требует действий.
Почему PSI 0,27 ещё не значит, что модель сломалась
Механика у индекса скромная: PSI сравнивает доли наблюдений в одних и тех же корзинах эталонной и текущей выборок. Эталоном обычно служат обучающая выборка, период валидации или ранний стабильный продакшен; текущей популяцией считают окно мониторинга. Метрику считают для входных признаков, модельного скора или обоих уровней.
Дрейф признаков не равен дрейфу модели. Изменение распределения дохода, устройства или времени регистрации заметит PSI признака, но связь с целевым событием может сохраниться, и качество не обязано ухудшаться. Возможна и обратная ситуация: PSI низкий, а точность падает из-за изменения связи признаков с целью, которого PSI не видит.
PSI скора отвечает на другой вопрос: изменилась ли структура прогнозов, стало ли больше клиентов высокого риска, кандидатов с высокой вероятностью покупки или заявок у порога решения. Стабильный скор при сдвиге нескольких признаков иногда означает нечувствительность модели к ним. Высокий PSI скора не объясняет источник: им могут быть канал привлечения, предобработка, пропуски или бизнес-процесс.
Поэтому «PSI выше порога, значит модель плохая» неверно. Что же тогда показывает индекс? Только то, что текущая популяция отличается от эталона. Причину и риск для качества ищут отдельно. Новая аудитория после кампании может не повредить качеству, изменение заполнения поля может исказить признак, а общий PSI способен сгладить дрейф отдельного региона.
Формула показывает вклад каждой корзины
Сумма складывается из вкладов отдельных корзин, и любое расследование начинается с них. Для корзины i берут эталонную долю eᵢ и долю в окне мониторинга aᵢ:
PSIᵢ = (aᵢ-eᵢ) × ln(aᵢ / eᵢ)
Общий индекс: PSI = Σ PSIᵢ. При равных долях вклад нулевой; чем сильнее расхождение, тем он выше. Логарифм усиливает сигнал, когда отношение долей далеко от единицы.
Синтетический пример для модельного скора использует пять корзин, границы которых зафиксированы по эталону; он не описывает реальный портфель.
| Корзина скора | Эталонная доля eᵢ |
Текущая доля aᵢ |
Вклад в PSI |
|---|---|---|---|
| 1 | 0,10 | 0,06 | 0,020 |
| 2 | 0,20 | 0,14 | 0,021 |
| 3 | 0,40 | 0,34 | 0,010 |
| 4 | 0,20 | 0,28 | 0,027 |
| 5 | 0,10 | 0,18 | 0,047 |
| Сумма | 1,00 | 1,00 | 0,126 |
Для первой корзины: (0,06-0,10) × ln(0,06 / 0,10) = 0,020. Отрицательная разность не даёт отрицательный вклад: логарифм отношения меньше единицы тоже отрицателен. Отклонения вниз и вверх дают положительный сигнал.
0,126 не означает «распределение изменилось на 12,6%»: это безразмерный индекс расхождения. Таблица вкладов показывает его источник. Здесь основную тревогу создают верхние корзины; если в них лежат решения с высокой ценой ошибки, такой профиль важнее равномерного расхождения.
Доли считают при одинаковой фильтрации. Если в эталоне были только прошедшие проверку личности, а в текущем окне добавили незавершённые анкеты, PSI смешает изменение населения с изменением отбора и даст неверный диагноз.
3, 5 или 10 корзин: один сдвиг, три разных PSI
Число и границы корзин определяют чувствительность индекса. Три широких интервала скрывают локальный сдвиг; десять находят его раньше, но сильнее реагируют на шум при малых выборках. Корзины нельзя выбирать после просмотра текущего периода: это меняет линейку во время измерения.
Для непрерывных признаков часто используют квантильные границы эталонной популяции: сопоставимое число объектов в корзинах делает расчёт устойчивее. Предметные границы нужны, когда важен смысл интервала: возраст, лимиты, тарифы, зоны скора вокруг решения. Гибридный вариант оставляет предметные границы в критических зонах, остальные строит по квантилям.
На том же синтетическом распределении результат меняется при другой детализации, хотя популяция та же.
При трёх широких корзинах PSI держится около 0,119: заметно только крупное смещение массы, а локальные сдвиги внутри интервалов теряются. Пять корзин поднимают индекс до 0,126 и показывают движение между основными зонами, но детали внутри каждой зоны остаются невидимыми. Десять корзин дают 0,129 и ловят смещение в узких диапазонах, платой за это становится более высокая чувствительность к малым долям и шуму на небольшой выборке.
Разница между 0,119 и 0,129 невелика, но у рабочего порога меняет маршрут эскалации. Документируют границы и порядок корзин, обработку выбросов и дату фиксации эталона. После выпуска новой версии модели или смены шкалы скора старый PSI нельзя механически продолжать: нужна новая базовая линия либо явное сопоставление шкал.
Для категориального признака корзина обычно равна категории. Редкие категории можно заранее объединить в «прочее». Объединение только после тревоги опасно: из отчёта исчезнут и дрейф, и его причина.
Нулевые доли и короткие окна искажают сигнал
Чем мельче корзины, тем вероятнее, что какая-то из них окажется пустой. При нулевой доле в корзине ln(aᵢ / eᵢ) не определён. Произвольная замена нуля в таблице меняет PSI и может скрыть скачок; нужна единая явная политика сглаживания для эталона и мониторинга.
Прозрачный вариант использует исходные счётчики: каждой корзине добавляют псевдосчётчик α и пересчитывают долю pᵢ = (cᵢ + α) / (N + α × k), где cᵢ означает число объектов в корзине, N размер выборки, k число корзин. При α = 0,5 нули не ломают логарифм. Рядом с метрикой хранят α, версию правила и число корзин; на малом окне сглаживание заметно влияет на результат.
Не меньше на PSI влияет длина окна мониторинга. Семидневное быстрее ловит сбой загрузки или смену трафика, но шумит. Девяностодневное сглаживает колебания и может растворить короткую проблему. Сезонность (предновогодний трафик, учебный сезон, плановая акция) создаёт ложные тревоги.
Семидневное окно шумит сильнее всего: в нашем примере обычный недельный фон даёт около 0,16, а сезонный сдвиг подбрасывает индекс до 0,27, поэтому тревога срабатывает быстро, но требует проверки стабильности.
Двадцативосьмидневное окно снижает фон примерно до 0,08, а сезонный эффект до 0,13: шум слабее, но сезонность ещё различима. Девяностодневное сглаживает фон до 0,03 и сезонный сдвиг до 0,05, зато короткий сбой в нём может раствориться.
Во всех трёх вариантах границы корзин одинаковы. Сезонный бизнес лучше сравнивать с тем же сезоном прошлого цикла или хранить несколько эталонов. Один «вечный» базовый период стареет и превращает ожидаемую эволюцию аудитории в постоянную тревогу. Но обновлять эталон без проверки нельзя: мониторинг начнёт считать дрейф нормой и пропустит деградацию качества.
Порог 0,25 ещё не приказ переобучать
Границы 0,10 и 0,25 часто используют как повод соответственно посмотреть распределение и начать глубокую проверку. Закона природы за ними нет, и переход через 0,25 сам по себе не доказывает, что модель пора переобучать: на индекс влияют биннинг, сглаживание, размер выборки, эталон и ценность сегмента.
PSI 0,06 в маленькой, но доходной группе может быть критичным, если сдвиг пришёлся на отказы или ручную проверку. PSI 0,30 по потоку может объясняться плановой сменой канала и не ухудшать качество. Цифра одна, вес разный. Важны устойчивость сигнала в нескольких окнах, корзины-вкладчики, затронутые сегменты, изменения схемы данных и метрики качества.
Мониторинг признаков и скора нужно разделять. Высокий PSI признака при стабильном скоре указывает на уязвимость переменной, но не требует немедленной замены модели. Высокий PSI скора при спокойных отдельных признаках может означать совместный сдвиг профиля клиентов или неполный набор наблюдаемых факторов. При доступных метках PSI читают рядом с качеством на свежем периоде; без меток он остаётся ранним индикатором распределения, а не оценкой качества.
Где PSI превращают в декоративную метрику
Обесценивают индекс обычно на этапе настройки, формула тут ни при чём. Классический случай: обучающая выборка навсегда остаётся эталоном. Пока не меняются продукт, каналы, отбор и популяция, это удобно; позже такой эталон измеряет уже историческую дистанцию, и об операционном риске говорит мало. Нужны фиксированная базовая линия для сопоставимости версии модели и контролируемая рабочая база для текущего мониторинга.
Отдельный источник ложных тревог даёт сам конвейер данных. Переименование категории, новый формат даты, другая обработка пропуска или замена источника способны за ночь поднять PSI. Похожий класс проблем называют training-serving skew: данные на обучении и в работе расходятся из-за конвейера, хотя клиенты остались прежними. Поэтому прежде чем искать поведение клиентов, проверяют пропуски, объём записей, ошибки парсинга и версию трансформации. До PSI данные должны пройти контроль схемы и базовых объёмов.
Нередко индекс считают только по всей аудитории, хотя средняя картина скрывает сегментный сдвиг по каналу, региону, устройству, продуктовой линии или этапу воронки. Не стоит создавать сотни разрезов с потоком случайных тревог; заранее выбирают сегменты с разной экономикой, логикой данных или порогами решений.
Наконец, корзины иногда перестраивают вслед за текущими данными. Новые ежемесячные квантили снова дают близкие доли и искусственно успокаивают PSI. Линейка подстраивается под предмет измерения. Фиксируют конкретные границы эталонного периода.
Переобучение начинается после четырёх проверок
Один алерт не должен запускать новую версию модели. Между тревогой и переобучением стоит короткий разбор из четырёх шагов.
- Проверить измерение. Сверьте с эталонной конфигурацией объём, фильтры популяции, порядок трансформаций, пропуски, категории и границы корзин. Расхождение здесь означает поломку измерения, а не дрейф клиентов.
- Найти источник вклада. Изучите корзины с максимальными
PSIᵢ, затем заранее выбранные сегменты. Один резко сдвинувшийся признак требует иной реакции, чем согласованное движение десятка признаков или одного скора. - Оценить устойчивость. Сравните соседние окна, сезонно сопоставимый период и более длинный горизонт. Однодневный всплеск после загрузки батча не равен дрейфу, который держится несколько циклов.
- Связать дрейф с риском решения. При свежих метках проверьте качество в затронутых сегментах и зонах скора. Стойкий PSI вместе с ухудшением качества, особенно в дорогих решениях, обосновывает калибровку, пересборку признаков или переобучение. Высокий PSI без ухудшения качества требует наблюдения и проверки уязвимости; автоматическая замена тут не нужна.
После решения подготовить новую версию её эффект в продакшене оценивают отдельно: проверка ML-моделей через A/B-тесты в продакшене описывает этап, который PSI не заменяет. Даже хорошая новая модель не отменяет контроля входной популяции.
При масштабе важнее воспроизводимость сигнала
Для десятков моделей и сотен признаков формула остаётся тривиальной. Узким местом становится управление конфигурацией: в зрелой ML-системе код модели занимает малую часть, остальное составляют данные, конфигурация и мониторинг. Для каждого расчёта нужны версия модели, дата и источник эталона, границы корзин, сглаживание, определение популяции, размер окна и сегменты. Иначе одинаковые PSI могут означать разное, а расследование нельзя повторить.
Храните вклад каждой корзины вместе с суммой: общая величина нужна дашборду, вклады нужны расследованию. Учитывайте и пропуски: их не следует молча исключать, если они связаны с решением. Отдельная корзина пропусков часто раньше показывает проблему интеграции, чем графики заполненных значений.
При росте алертов нужны владелец, срок первичной проверки и статус причины: ожидаемая сезонность, изменение данных, смена популяции, неустановленная причина или подтверждённый риск качества. Иначе PSI станет красной лампой, на которую никто не реагирует.
PSI ценен как начало расследования
На вопрос «переобучать ли модель» PSI одним числом не ответит. Его работа скромнее: зафиксировать расхождение популяций, показать корзины, которые его создают, и направить проверку туда, где выше цена ошибочного решения.
Для регламента отсюда следует простое правило. Индекс с фиксированными корзинами, явной политикой сглаживания, окном с учётом сезонности и заранее выбранными сегментами служит триггером разбора: при превышении порога владелец в оговорённый срок проходит четыре проверки выше и присваивает причине статус. Калибровку или переобучение запускают, только когда стойкий сдвиг совпал с просадкой качества на свежих метках, потому что лишь эта связь отличает обычную смену аудитории от деградации модели. Пока меток нет, сдвиг оправдывает наблюдение за сегментами, но не новую версию модели.