Как ответить
Проект был запущен для предсказания оттока клиентов B2C-сервиса (подписка на онлайн-кинотеатр) с целью удержания. Основную бизнес-метрику — снижение churn_rate на 12% за квартал — мы закрыли за счёт проактивных предложений скидок и контента.
Я отвечал за построение пайплайна признаков и ML-модели. Данные собирались из нескольких источников: логов активности (просмотры, паузы, переходы), транзакций (дата платежа, сумма), обращений в поддержку. Основная сложность — сильный дисбаланс классов (отток ~2%).
Из фич я выделил: скользящее среднее числа просмотров за 7 и 30 дней, тренд активности (коэффициент линейной регрессии по дням), долю жанров, которые пользователь смотрел, изменение времени просмотра (смещение на ночные часы). Для признаков из логирования применял агрегацию с окнами по времени.
Модель — CatBoost. Классические градиентные бустинги давали лучший ROC-AUC на отложенной выборке (0.89 против 0.82 у логистической регрессии). Выбор порога проводил по F1-score с учётом бизнес-ограничений: ложное срабатывание стоило купона, ложное пропуск — потеря клиента. Остановились на пороге 0.3, что давало recall ~0.65 при precision 0.4 — мы сознательно жертвовали точностью ради охвата.
Инженерная часть: пайплайн на Airflow, обучение раз в день, инференс — через микросервис на FastAPI. Для мониторинга качества добавил логирование предсказаний и дрифта распределения фич (PSI по каждому признаку). После запуска в A/B-тесте (2 месяца) группа с моделью показала снижение оттока на 10.5% — результат был статистически значим (p-value < 0.01).
Из проблем: на первом этапе модель сильно переобучалась на календарных признаках — убрал время года, добавил кросс-валидацию с учётом временно́й структуры (time-series split).