Skip to content

DataClasse/uplift-modeling

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Проект: Uplift-моделирование для Яндекс Еды

Uplift-моделирование для таргетированного маркетинга: T/R-learner, Optuna, MLflow, метрика Uplift@30%.

Описание проекта

Разработка uplift-модели для определения целевой аудитории, которой стоит предложить промокод на 500 рублей на доставку еды из ресторанов. Цель — максимизировать метрику Uplift@30% путем идентификации "убеждаемых" клиентов.

Критерии успеха (Uplift@30%):

  • 🟢 Отлично: ≥ 0.050
  • 🟡 Хорошо: ≥ 0.045
  • 🟠 Удовлетворительно: ≥ 0.035

Структура проекта

uplift-modeling/
├── data/                    # Данные проекта
├── pictures/               # Сохраненные визуализации
├── utils/                  # Вспомогательные функции
│   └── utils.py            # Функция custom_uplift_by_percentile
├── uplift_project.ipynb   # Основной ноутбук с решением
├── requirements.txt        # Зависимости проекта
├── rms.sh                  # Скрипт запуска MLflow сервера
└── README.md              # Этот файл

Подготовка виртуальной машины

1. Клонирование репозитория

Склонируйте репозиторий проекта:

git clone https://github.com/DataClasse/uplift-modeling.git
cd uplift-modeling

2. Загрузка данных

Датасет uplift_fp_data.csv разместите в директории data/.

Описание датасета:

  • Размер: 64 000 клиентов
  • Формат: CSV файл
  • Расположение: data/uplift_fp_data.csv
  • Столбцы: recency, history_segment, history, mens, womens, zip_code, newbie, channel, treatment, target

3. Создание виртуального окружения

Используйте Python 3.10.13. С другими версиями могут возникнуть конфликты с библиотеками.

python3 -m venv uplift_env
source uplift_env/bin/activate  # или . uplift_env/bin/activate

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

pip install -r requirements.txt

5. Настройка переменных окружения

Создайте файл .env в корне проекта с необходимыми переменными для MLflow:

# MLflow Tracking Server
TRACKING_SERVER_HOST=127.0.0.1
TRACKING_SERVER_PORT=5000

# PostgreSQL (Backend Store)
DB_DESTINATION_HOST=your_host
DB_DESTINATION_PORT=your_port
DB_DESTINATION_NAME=your_database
DB_DESTINATION_USER=your_user
DB_DESTINATION_PASSWORD=your_password

# S3 (Artifact Store)
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
S3_BUCKET_NAME=your_bucket_name

6. Запуск MLflow сервера (опционально)

Для логирования экспериментов в MLflow запустите сервер:

chmod +x rms.sh
./rms.sh

Сервер будет доступен по адресу: http://127.0.0.1:5000

Выполнение проекта

Структура ноутбука

Проект выполняется в одном Jupyter Notebook (uplift_project.ipynb) и состоит из двух частей:

Часть 1: Методы uplift-моделирования

  1. Этап 1: Первичная подготовка данных

    • Импорт библиотек
    • Загрузка датасета
    • Проверка и заполнение пропусков
  2. Этап 2: Исследовательский анализ данных (EDA)

    • Анализ сбалансированности выборки
    • Проверка статистической значимости
    • Корреляционный анализ признаков
    • Выводы о влиянии признаков на таргет
  3. Этап 3: Построение baseline-модели

    • Обоснование выбора модели
    • Разделение на train/test (80/20)
    • Обучение трех моделей (T/S/R-learner)
    • Сравнение моделей и выводы

Часть 2: Улучшение baseline-модели

  1. Этап 1: Подбор гиперпараметров

    • Оптимизация гиперпараметров (Optuna)
    • Обучение финальной модели
    • Логирование в MLflow
  2. Этап 2: Финальная интерпретация результатов

    • Визуализации (Uplift Curve, Qini Curve, Uplift по перцентилям)
    • Выводы о качестве модели
    • Рекомендации по улучшению
  3. Этап 3: Подготовка кода для продакшн

    • Реализация класса UpliftModelInference
    • Тестирование на примерах

Полезный код

В директории utils/ находится вспомогательный код, который может помочь при выполнении проекта:

  • Функция custom_uplift_by_percentile для визуализации uplift по перцентилям

Результаты проекта

Финальная метрика: Uplift@30% = 0.0518 (ОТЛИЧНО)

Достигнутые улучшения:

  • Baseline T-learner: 0.0410
  • Baseline R-learner: 0.0505
  • Финальная модель: 0.0518 (+26.3% от T-learner baseline)

Логирование в MLflow

Все эксперименты залогированы в MLflow:

  • Baseline модели (T/S/R-learner)
  • Процесс оптимизации гиперпараметров
  • Финальная модель с артефактами и визуализациями
  • Регистрация модели в Model Registry

Эксперимент: Uplift_Modeling_YandexEda
Tracking URI: http://127.0.0.1:5000

Требования

Основные библиотеки:

  • pandas, numpy — работа с данными
  • scikit-learn — машинное обучение
  • causalml — uplift-моделирование
  • sktlift — метрики и визуализации uplift
  • optuna — оптимизация гиперпараметров
  • mlflow — логирование экспериментов
  • matplotlib, seaborn — визуализация

Полный список зависимостей см. в requirements.txt.

Автор

Дмитрий Щербаков

About

Uplift-модель для таргетированного маркетинга (промокоды). T-learner, R-learner, Optuna, MLflow, Uplift@30%.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors