Skip to content

lalking52/bank-leads-ranking

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ранжирование лидов для банковского маркетинга

Задача

Ранжировать клиентов банка так, чтобы при ограниченном ресурсе контактов (top‑K) максимизировать конверсии (депозит = "yes") и прибыль.

Данные

Источник: UCI Bank Marketing (bank-full.csv) (Kaggle — UCI Bank Marketing Full Dataset).

  • Цель: y (yes/no) -> бинарная 0/1
  • Категориальные признаки: CatBoost обрабатывает нативно, в Torch идут в эмбеддинг

Файл bank-full.csv положить в data/ (рекомендуется) или передать путь в скриптах.

Feature Engineering

Для устойчивости ранжирования и интерпретируемости добавлены:

  • campaign_bucket: бины по campaign (например, 1, 2–3, 4–6, 7+)
  • pdays_bucket: бины по pdays с учетом значения "никогда не было контакта"
  • prev_contact: бинарный индикатор наличия предыдущего контакта (pdays != -1)

Эти признаки используются во всех моделях (baseline - LogReg / CatBoost / Torch).

leakage

duration - признак post‑call (известен только после звонка).
По умолчанию весь пайплайн работает в pre‑call режиме (без duration) и сохраняет артефакты в artifacts/pre_call/.
Режим with‑duration используется только как экспериментальная верхняя граница качества, включается флагом --with-duration и сохраняется в artifacts/with_duration/.

Структура

priorti_bank/
  .jupyter/
  .venv/
  artifacts/
  data/
  notebooks/
  src/
    data/
    models/
    metrics/
  README.md
  requirements.txt

Быстрый старт

python -m src.data.split --path data/bank-full.csv --out artifacts/splits.npz
python -m src.cli train

Примечание: запуск проекта выполняется через python -m src.cli ....

Reproducibility

Рекомендуемая установка: из requirements.txt

pip install -r requirements.txt

Для воспроизводимости пересоберите артефакты в окружении из requirements.txt. В репозитории сохранён artifacts/splits.npz, а модели пересобираются командами train/eval. Метрики в artifacts/*/metrics.json можно использовать как эталон для сравнения. Полного совпадения для Torch может не быть, но результаты должны быть очень близкими.

Экспериментальный режим (с duration)

python -m src.cli train --with-duration

Сплиты сохраняются в .npz, что стабильнее между версиями библиотек:

python -m src.data.split

Оценка моделей

python -m src.cli eval

Для оценки with‑duration укажите флаг:

python -m src.eval --with-duration

Сводные метрики сохраняются в:

  • artifacts/pre_call/metrics.json
  • artifacts/with_duration/metrics.json

Метрики

Классификация:

  • ROC‑AUC
  • PR‑AUC
  • LogLoss

Ранжирование:

  • Precision@K
  • Recall@K
  • Lift@K
  • Precision@K = TP@K / K
  • Recall@K = TP@K / P
  • Lift@K = Precision@K / (P / N) где TP@K — число положительных (y=1) в top‑K, P — общее число положительных, N — размер теста.

Бизнес‑эффект:

  • Profit@K = 100 * TP - 1 * K

Допущения бизнес‑метрики (Profit@K)

Симулируем приоритизацию звонков:

  • доход на успешную подписку: profit_per_tp = 100
  • стоимость попытки контакта: cost_per_contact = 1
  • бюджет: обзвон только top‑K клиентов по скору

Profit@K: Profit = profit_per_tp * TP_in_topK - cost_per_contact * K(K - число обзвоненных клиентов)

Константы - допущения; устойчивость проверяем кривыми Profit@K.

Результаты (pre-call, тест)

Модель ROC‑AUC PR‑AUC Precision@10% Lift@10% Profit@10%
LogReg 0.772467 0.413887 0.494469 4.226355 43796.0
CatBoost 0.803086 0.455072 0.517699 4.424908 45896.0
Wide&Deep 0.790940 0.444005 0.515487 4.405998 45696.0

Ключевые выводы

  • CatBoost стабильно сильный для табличных данных
  • Wide&Deep конкурентен за счет эмбеддингов
  • Ранжирование по скору повышает прибыль относительно случайного выбора

Примечания

  • Энкодеры для Torch сохраняются рядом с моделью для воспроизводимого инференса
  • В src/metrics/ — общие метрики классификации, ранжирования и profit

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors