Как добавить новый источник данных с короткой историей в логистическую регрессию
Что проверяют
Понимаете ли вы главную проблему: у нового признака нет значений для большей части истории, и наивное объединение данных учит модель не тому. Вопрос типичен для скоринга и антифрода. Следом спрашивают, как вы докажете, что источник действительно улучшил модель.
Как отвечать
Назовите варианты и их цену:
- учить только на коротком периоде: честно, но данных мало, а в кредитном скоринге таргет ещё и созревает месяцами, поэтому у свежих наблюдений его нет;
- заполнить пропуски и добавить флаг: значение плюс признак
is_missing. Опасность в том, что пропуск совпадает со старым периодом, и флаг становится прокси времени. В проде пропусков не будет, и распределение поедет; - двухступенчатая схема: базовая модель остаётся обученной на всей истории, а на коротком периоде учат вторую логистическую регрессию на логите базовой модели и новых признаках. В
statsmodelsлогит можно передать вGLMкакoffset, тогда модель учит только поправку, и новые коэффициенты не отбирают вес у проверенных признаков.
Подготовка та же, что у остальной модели: биннинг и WoE, если модель построена на них, сильная регуляризация через C в LogisticRegression, проверка знаков коэффициентов.
Сравнение делайте на одном отложенном по времени периоде, где источник уже был: старая модель против новой, ROC-AUC или Gini, log-loss, калибровка. Отдельно проверьте стабильность признака через PSI и покрытие: какая доля клиентов в проде реально получит значение.
Где спотыкаются
Заполняют пропуски средним и учат на всей истории. Модель смешивает эффект признака с эффектом периода, и на проде коэффициенты ведут себя иначе.
Сравнивают метрику новой модели на коротком периоде с метрикой старой на длинном. Разница может объясняться самим периодом, а не источником.
Не проверяют, доступно ли значение на момент принятия решения. Если источник отдаёт данные с задержкой или переписывает их задним числом, на обучении получается утечка, а в проде признак окажется пустым.