Прогнозирование оттока клиентов телеком-оператора

Выпускной проект Яндекс.Практикума по созданию модели машинного обучения для прогнозирования оттока клиентов телеком-оператора.

Прогнозирование оттока клиентов телеком-оператора

Введение

Всем привет! Это мой выпускной проект в Яндекс.Практикуме. Задача — построить модель машинного обучения, которая предсказывает отток клиентов для телеком-оператора «ТелеДом».

Оператор хочет бороться с оттоком на опережение: находить клиентов, которые собираются расторгнуть договор, и предлагать им промокоды и специальные условия, чтобы удержать. Сейчас компания может реагировать только постфактум — когда клиент уже ушёл. Модель позволит действовать на шаг вперёд.

Бизнес-задача: разработать модель, которая по истории услуг и поведению клиента предскажет вероятность оттока. На основе прогноза оператор сможет предложить удержание тем, кому это действительно нужно.

Данные

Исходные данные хранятся в SQLite-базе и состоят из четырёх таблиц:

Таблица Описание Ключевые поля
contract Информация о договоре Дата начала, тип оплаты, сумма
personal Персональные данные Пол, возраст, семейное положение
internet Услуги интернета Тип подключения, доп. услуги
phone Услуги телефонии Наличие линии, несколько номеров

После объединения таблиц получился датасет на ~7 000 клиентов, из которых 26.5% уже расторгли договор — это и есть наш целевой признак.

EDA и подготовка данных

Разведочный анализ выявил несколько важных закономерностей:

  • Тип контракта — ключевой фактор: клиенты с помесячной оплатой уходят значительно чаще
  • Длительность обслуживания — чем дольше клиент с оператором, тем ниже вероятность оттока
  • Дополнительные услуги — наличие техподдержки, стриминга и онлайн-безопасности снижает отток

Feature engineering включал создание бинарных признаков для каждой услуги (есть/нет), а также извлечение признака TotalCharges из общей суммы платежей.

Дисбаланс классов: 26.5% оттока против 73.5% оставшихся. Если обучить модель «в лоб», она будет предсказывать всех как «не ушёл» и получит 73% accuracy — но пользы от такого прогноза ноль.

Балансировка классов

Для борьбы с дисбалансом применил комбинированную стратегию:

  • Upsample — увеличил количество редкого класса (отток) за счёт дублирования
  • Downsample — уменьшил количество частого класса (не отток) случайным удалением

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

Модели и результаты

Обучил модели и сравнил их метрики:

Модель Precision Recall F1 ROC-AUC
Logistic Regression 0.82 0.79 0.80 0.88
Random Forest 0.84 0.81 0.82 0.91
CatBoost 0.86 0.84 0.85 0.93

CatBoost показал лучший результат — F1 = 0.85 и ROC-AUC = 0.93. Однако для бизнеса важна не просто метрика, а конкретный эффект.

Бизнес-метрики

Ключевой вопрос: сколько клиентов мы сможем удержать? Для этого:

  1. Подобрал оптимальный порог вероятности (не стандартный 0.5, а 0.3 — чтобы захватить больше потенциальных уходов)
  2. Рассчитал Retention — сколько клиентов из предсказанного оттока удастся удержать при разных сценариях
  3. Посчитал LIFT — во сколько раз модель эффективнее случайного выбора
Результат: при пороге 0.3 модель находит 82% потенциальных уходов. Если удержать хотя бы 30% из них — оператор сохранит ~700 клиентов, которые иначе ушли бы к конкурентам.

Заключение

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

Что можно улучшить:

  1. Добавить внешние данные (платёжная дисциплина, обращения в поддержку)
  2. Использовать более сложные методы балансировки (SMOTE)
  3. Развернуть модель как API для интеграции с CRM

Ссылки

Полный Jupyter Notebook с кодом, визуализациями и детальным анализом:

GitHub: Выпускной проект — Прогнозирование оттока клиентов

README проекта


Проект выполнен в рамках выпускной работы курса Яндекс.Практикум «Специалист по Data Science». Все код и визуализации доступны в открытом репозитории.