Skip to content

manasbegaliev777-dev/sber-autosubscription-hackathon

Repository files navigation

Анализ сайта СберАвтоподписки — Хакатон

Курс: Машинное обучение, МИФИ / SF, Бегали уулу Манас, 2026

Тип работы: Проектная практика (хакатон)


О проекте

Компания «СберАвтоподписка» — сервис долгосрочной аренды автомобилей для физических лиц. В рамках проекта я построил модель, которая предсказывает вероятность совершения целевого действия пользователем на сайте (оставить заявку, заказать звонок и др.).

Модель позволяет:

  • оценивать эффективность каналов привлечения трафика
  • адаптировать рекламные кампании под нужную аудиторию
  • улучшать UX сайта на основе анализа поведения пользователей

Структура репозитория

├── 01_data_loading.ipynb        # Загрузка данных и первичный анализ
├── 02_EDA.ipynb                 # Разведочный анализ данных (EDA)
├── 03_ML_model.ipynb            # Построение и обучение ML-модели
├── 04_API.ipynb                 # Тестирование API
├── predict.py                   # FastAPI-сервис для предсказаний
├── model.pkl                    # Обученная модель CatBoost
├── features_meta.pkl            # Метаданные признаков
├── sber_autoподписка_hackathon.pptx  # Презентация проекта
├── swagger_ui_testing.pdf       # Скриншот тестирования API через Swagger UI
└── README.md

Данные

Данные из Google Analytics (last-click attribution) по сайту «СберАвтоподписки».

Файл Описание Строк Колонок
ga_sessions.pkl Один визит = одна строка. Содержит utm, device, geo и др. 1 860 042 18
ga_hits.pkl Одно событие в рамках сессии 15 726 470 11

Датасеты не загружены в репозиторий из-за большого размера (суммарно ~5 ГБ). Данные предоставлены в рамках учебного курса.

Целевая переменная: сессия считается конверсионной если в ней зафиксировано хотя бы одно из 7 целевых действий:

  • sub_car_claim_click — 37 928 событий
  • sub_submit_success — 18 439 событий
  • sub_car_claim_submit_click — 12 359 событий
  • sub_call_number_click — 3 653 события
  • sub_callback_submit_click — 3 074 события
  • sub_car_request_submit_click — 2 966 событий
  • sub_custom_question_submit_click — 619 событий

Конверсия (CR): 2.10% (39 030 целевых сессий из 1 860 042)


Ход работы

1. Загрузка и первичный анализ (01_data_loading.ipynb)

  • Загрузил оба датасета через pd.read_pickle()
  • Изучил структуру, типы данных и пропуски
  • Определил целевые действия и сформировал целевую переменную target
  • Зафиксировал сильный дисбаланс классов: 97.90% / 2.10%
  • Сохранил sessions_with_target.pkl для следующего этапа

2. Разведочный анализ (02_EDA.ipynb)

Построил 9 графиков и сформулировал выводы по каждому.

Ключевые находки:

Наблюдение Факт
Тип устройства Mobile — 72% трафика, но desktop конвертирует в 1.8× лучше
Лучший канал по CR referral: 4.21%
Органический трафик CR 2.43%, прямые заходы (none): 2.90%
Глубина сессии Средняя: 8.4 хита, медиана: 3.0
Повторные визиты visit_number положительно коррелирует с конверсией
Корреляция is_organic +0.049 с target
Корреляция is_mobile −0.007 с target

3. ML-модель (03_ML_model.ipynb)

Разбивка данных (80/20, стратификация):

  • Train: 1 488 033 строк | позитивных: 2.10%
  • Test: 372 009 строк | позитивных: 2.10%

Feature Engineering — 25 признаков:

Числовые (18): hits_count, log_hits_count, visit_number, log_visit_number, hour, weekday, month, is_organic, is_mobile, is_desktop, is_tablet, is_night, is_work_hours, is_weekend, is_first_visit, is_returning, is_ios, screen_width

Категориальные (7): utm_medium, utm_source, device_category, device_os, device_browser, geo_city, geo_country

Параметры CatBoost:

CatBoostClassifier(
    iterations=500,
    learning_rate=0.05,
    depth=6,
    scale_pos_weight=46.7,  # учёт дисбаланса классов
    eval_metric='AUC',
    random_seed=42
)

Результаты:

Модель ROC-AUC
Random baseline 0.5000
Logistic Regression (бейзлайн) 0.8730
CatBoost (финальная модель) 0.8953
Целевой порог по заданию ≥ 0.6500

Целевой порог превышен на +0.245.

Прогресс обучения:

0:    AUC = 0.8656
100:  AUC = 0.8884
200:  AUC = 0.8915
300:  AUC = 0.8931
400:  AUC = 0.8946
499:  AUC = 0.8953  ← лучший результат

Топ-10 признаков по важности (CatBoost Feature Importance):

Признак Важность
hits_count 30.67%
log_hits_count 19.76%
utm_source 8.12%
utm_medium 6.84%
visit_number 5.25%
month 4.68%
is_first_visit 4.26%
log_visit_number 4.18%
screen_width 3.16%
device_browser 2.79%

SHAP-анализ (направление влияния):

  • hits_count ↑ → сильно увеличивает вероятность конверсии
  • visit_number ↑ → повторные визиты положительно влияют
  • is_mobile → снижает вероятность конверсии
  • utm_medium (organic/referral) → повышает; banner → снижает
  • hour (ночь) → ночная аудитория конвертирует выше среднего

4. API (predict.py + 04_API.ipynb)

Реализовал REST API на FastAPI с четырьмя эндпоинтами:

Метод Путь Описание
GET / Описание сервиса
GET /health Проверка работоспособности
POST /predict Возвращает 0 или 1
POST /predict_proba Возвращает вероятность 0.0–1.0

Производительность (1000 запросов):

Метрика Значение
Среднее время ответа 5.27 мс
Медиана 5.20 мс
99-й перцентиль 6.41 мс
Максимум 10.90 мс
Критерий ≤ 3000 мс выполнен

Запуск

Установка зависимостей

pip install catboost lightgbm shap fastapi uvicorn joblib pandas numpy scikit-learn matplotlib seaborn

Запуск API

cd "путь/к/папке/проекта"
uvicorn predict:app --reload --port 8000

После запуска:

  • Сервис доступен: http://localhost:8000
  • Swagger UI: http://localhost:8000/docs

Пример запроса

curl -X POST http://localhost:8000/predict \
     -H "Content-Type: application/json" \
     -d '{
       "visit_number": 5,
       "hits_count": 15,
       "hour": 14,
       "weekday": 2,
       "month": 3,
       "utm_medium": "organic",
       "utm_source": "google",
       "device_category": "desktop",
       "device_os": "Windows",
       "device_browser": "Chrome",
       "device_screen_resolution": "1920x1080",
       "geo_country": "Russia",
       "geo_city": "Moscow"
     }'

Ответ:

{
  "prediction": 1,
  "label": "целевое действие",
  "response_time": "0.0095 сек"
}

Критерии оценки и результаты

Критерий Макс. баллов Результат
EDA 25 Обработка пропусков, 9 графиков, корреляции, выводы
ML-модель 35 ROC-AUC = 0.8953 (цель ≥ 0.65)
Интерпретация фичей 10 Feature Importance + SHAP
API / скрипт 15 FastAPI, время ответа 5.27 мс
Презентация 15 .pptx прилагается
Итого 100

Технологии

Python CatBoost FastAPI Pandas SHAP

  • Python 3.13 + Anaconda
  • CatBoost 1.2.10 — основная модель
  • Scikit-learn — бейзлайн, метрики
  • SHAP — интерпретация модели
  • FastAPI + Uvicorn — REST API
  • Pandas, NumPy — обработка данных
  • Matplotlib, Seaborn — визуализация

Файл .gitignore

Большие файлы данных не включены в репозиторий:

__pycache__/
catboost_info/
*.csv
ga_sessions.pkl
ga_hits.pkl
sessions_eda.pkl
sessions_with_target.pkl

About

Хакатон: предсказание целевого действия на сайте СберАвтоподписки

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors