MLOps-система для прогнозирования оттока пользователей подписочного сервиса
Подписочные сервисы (онлайн-кинотеатры, SaaS-платформы, фитнес-приложения) ежемесячно теряют 5-15% клиентов. Привлечение нового клиента стоит в 5-7 раз дороже удержания существующего. Без предиктивной аналитики маркетинг «стреляет вслепую», тратя бюджет на лояльных клиентов или упуская тех, кто уже готов уйти.
Сервис Churn Prediction анализирует поведение пользователей и предсказывает вероятность оттока в ближайшие 30 дней. Это позволяет:
- 🎯 Таргетировать удержание: точечные предложения только тем, кто действительно уходит
- 💰 Снизить CAC: сохранение клиента вместо привлечения нового
- 📊 Приоритизировать: сегментация по риску для эффективного распределения ресурсов
- ⏰ Действовать проактивно: уведомления до того, как клиент ушёл
| Метрика | До внедрения | После внедрения |
|---|---|---|
| Точность определения оттока | ~50% (случайно) | 85%+ |
| Стоимость удержания | $50/клиент | $15/клиент |
| Снижение оттока | — | 20-30% |
┌─────────────────────────────────────────────────────────────────────────────┐
│ CHURN PREDICTION SYSTEM │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ Streamlit │────▶│ FastAPI │────▶│ PostgreSQL │ │
│ │ UI │◀────│ ML Service │◀────│ (predictions, metrics) │ │
│ │ :8501 │ │ :8000 │ │ :5432 │ │
│ └──────────────┘ └──────┬───────┘ └──────────────────────────┘ │
│ │ │ ▲ │
│ │ ▼ │ │
│ │ ┌──────────────┐ │ │
│ │ │ Kafka │ │ │
│ │ │ Broker │ │ │
│ │ │ :9092 │ │ │
│ │ └──────┬───────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌──────────────┐ │ │
│ │ │ Kafka │─────────────────┘ │
│ │ │ Consumer │ │
│ │ │ (async) │ │
│ │ └──────────────┘ │
│ │ │
│ │ ┌──────────────┐ ┌──────────────────────────┐ │
│ └────────────▶│ Airflow │────▶│ Feature Engineering │ │
│ │ Scheduler │ │ Model Retraining │ │
│ │ :8080 │ │ Metrics Calculation │ │
│ └──────────────┘ └──────────────────────────┘ │
│ │
│ ┌──────────────┐ │
│ │ Grafana │◀───── Prometheus metrics + PostgreSQL data │
│ │ Monitoring │ │
│ │ :3000 │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
| Компонент | Технология | Порт | Описание |
|---|---|---|---|
| ML Service | FastAPI + CatBoost | 8000 | REST API для инференса с OpenAPI документацией |
| UI | Streamlit | 8501 | Веб-интерфейс для предсказаний и аналитики |
| Database | PostgreSQL | 5432 | Хранение предсказаний, фичей, метрик |
| Message Broker | Kafka | 9092 | Асинхронная обработка запросов |
| Scheduler | Airflow | 8080 | ETL, расчёт фичей, переобучение модели |
| Monitoring | Grafana + Prometheus | 3000 | Дашборды и алерты |
- Docker 20.10+
- Docker Compose 2.0+
- 8 GB RAM (минимум)
- 10 GB свободного места
# Клонирование репозитория
git clone https://github.com/your-username/churn-prediction-service.git
cd churn-prediction-service
# Запуск всех сервисов одной командой
docker-compose up --build
# Или в фоновом режиме
docker-compose up -d --build| Сервис | URL | Логин/Пароль |
|---|---|---|
| Streamlit UI | http://localhost:8501 | — |
| FastAPI Docs | http://localhost:8000/docs | — |
| Airflow | http://localhost:8080 | airflow / airflow |
| Grafana | http://localhost:3000 | admin / admin |
| Kafka UI | http://localhost:8082 | — |
Датасет: Telco Customer Churn
| Признак | Описание |
|---|---|
tenure |
Срок подписки (месяцы) |
MonthlyCharges |
Ежемесячный платёж |
TotalCharges |
Общая сумма платежей |
Contract |
Тип контракта (месяц/год/2 года) |
PaymentMethod |
Способ оплаты |
InternetService |
Тип интернет-сервиса |
OnlineSecurity, TechSupport, ... |
Дополнительные услуги |
Целевая переменная: Churn — уйдёт ли клиент (Yes/No)
- Алгоритм: CatBoost Classifier
- Метрики: ROC-AUC 0.84, PR-AUC 0.65, Precision@20% = 0.72
- Оригинальные признаки датасета
- Агрегированные метрики (RFM-подобные)
- Интерактивные признаки
- Автоматическое по расписанию (Airflow DAG)
- Hot-reload модели без перезапуска сервиса
Синхронное предсказание для одного клиента.
curl -X POST "http://localhost:8000/predict" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "7590-VHVEG",
"gender": "Female",
"SeniorCitizen": 0,
"Partner": "Yes",
"Dependents": "No",
"tenure": 1,
"PhoneService": "No",
"MultipleLines": "No phone service",
"InternetService": "DSL",
"OnlineSecurity": "No",
"OnlineBackup": "Yes",
"DeviceProtection": "No",
"TechSupport": "No",
"StreamingTV": "No",
"StreamingMovies": "No",
"Contract": "Month-to-month",
"PaperlessBilling": "Yes",
"PaymentMethod": "Electronic check",
"MonthlyCharges": 29.85,
"TotalCharges": 29.85
}'Асинхронное предсказание через Kafka.
Проверка состояния сервиса.
Информация о текущей модели.
Полная документация: http://localhost:8000/docs
- Business Metrics: распределение скоров, % high-risk клиентов, тренды оттока
- Technical Metrics: latency, throughput, error rate
- Model Metrics: prediction drift, feature drift
- Структурированные логи в JSON формате
- Централизованный сбор через Docker logs
churn-prediction-service/
├── docker-compose.yml # Оркестрация всех сервисов
├── README.md # Документация
├── ONE_PAGER.md # Презентация проекта
│
├── ml_service/ # FastAPI ML сервис
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── app/
│ │ ├── main.py # FastAPI приложение
│ │ ├── model.py # Загрузка и инференс модели
│ │ ├── schemas.py # Pydantic схемы
│ │ └── database.py # Подключение к PostgreSQL
│ └── models/ # Сохранённые модели
│
├── training/ # Обучение модели (offline)
│ ├── train.py
│ ├── data/
│ └── notebooks/
│
├── kafka_consumer/ # Асинхронная обработка
│ ├── Dockerfile
│ ├── requirements.txt
│ └── consumer.py
│
├── streamlit_ui/ # Веб-интерфейс
│ ├── Dockerfile
│ ├── requirements.txt
│ └── app.py
│
├── airflow/ # ETL и scheduling
│ ├── Dockerfile
│ ├── dags/
│ │ ├── feature_engineering.py
│ │ ├── model_retraining.py
│ │ └── metrics_calculation.py
│ └── plugins/
│
├── postgres/ # База данных
│ └── init.sql # Инициализация схемы
│
├── grafana/ # Мониторинг
│ ├── provisioning/
│ │ ├── dashboards/
│ │ └── datasources/
│ └── dashboards/
│
└── prometheus/ # Сбор метрик
└── prometheus.yml
- Публичный GitHub репозиторий
- Новый датасет (не из ДЗ курса)
- docker-compose.yml для запуска всех сервисов
- README с бизнес-описанием и архитектурой
- Работающий сервис
- Расширенный мониторинг: Grafana с бизнес-метриками + логирование
- Переобучение модели: Airflow DAG для обновления модели без остановки
- Продвинутый UI: Аналитическая панель + OpenAPI документация
- Kafka инференс: Асинхронная обработка через брокер сообщений
- ETL с БД: Airflow для расчёта фичей и метрик по расписанию
# Локальный запуск для разработки
docker-compose -f docker-compose.dev.yml up
# Запуск тестов
docker-compose exec ml_service pytest
# Просмотр логов
docker-compose logs -f ml_serviceMIT License
Финальный проект курса MLOps, 2025