Этот проект направлен на прогнозирование вероятности совершения покупки клиентами интернет-магазина в течение * следующих 90 дней*. Использование моделей машинного обучения позволяет целенаправленно направлять рекламные кампании, увеличивая конверсию и оптимизируя маркетинговые расходы.
Интернет-магазин стремится снизить затраты на маркетинг за счет точечного таргетирования клиентов с высокой вероятностью покупки. Модель помогает:
- Сократить количество бесполезных рассылок.
- Увеличить ROI рекламных кампаний.
- Персонализировать предложения для клиентов.
- Анализ поведения клиентов: данные о покупках, рассылках и целевой переменной.
- Модели машинного обучения: CatBoost, LightGBM с подбором гиперпараметров через
RandomizedSearchCV
. - Интерпретация результатов: анализ важности признаков через SHAP.
- Оптимизация порога классификации: баланс между Precision и Recall.
Проект использует три набора данных:
Поле | Описание |
---|---|
client_id |
Уникальный идентификатор клиента |
quantity |
Количество товаров в заказе |
price |
Общая стоимость заказа |
category_ids |
Категории товаров (агрегированные) |
message_id |
Связь с рекламной кампанией |
Обработанные признаки:
total_quantity
: общее количество товаров, купленных клиентом.total_price
: сумма всех покупок клиента.avg_days_between_purchases
: средний интервал между покупками.
Поле | Описание |
---|---|
event |
Тип действия (open , click , complain , hard_bounce ) |
channel |
Канал доставки (email , sms ) |
client_id |
Связь с клиентом |
Обработанные признаки:
open_times
: количество открытий писем.click_times
: количество кликов по ссылкам.hard_bounce_times
: количество недоставленных писем.
Поле | Описание |
---|---|
client_id |
Идентификатор клиента |
target |
Целевая метка: 1 — покупка в течение 90 дней, 0 — нет |
- Удаление дубликатов:
- В
messages_df
удалено до 194,528 дубликатов.
- В
- Агрегация метрик:
- Подсчет среднего, максимального и минимального интервалов между покупками для каждого клиента.
- Кодирование категориальных признаков:
- События
open
,click
сгруппированы в столбцы с количеством раз.
- События
- Удаление нерелевантных полей:
message_id
,date
,category_ids
(не влияют на целевую переменную).
Модель | ROC AUC | Оптимальный порог |
---|---|---|
CatBoost | 0.72 | 0.0595 |
LightGBM | 0.70 | 0.1882 |
total_quantity
(общее количество товаров)avg/max_days_between_purchases
(среднее/максимальное количество дней между покупками)open_times
,click_times
(частота взаимодействия с email-рассылками)total_price
(суммарная стоимость покупок)
- CatBoost показал лучшие метрики благодаря эффективной обработке числовых признаков.
- Частота email-взаимодействий и историческая активность оказались главными предикторами.
- Оптимизация порога классификации улучшает баланс между ложноположительными и ложноотрицательными срабатываниями.
Улучшение данных:
- Добавить демографические признаки (возраст, местоположение).
- Интегрировать поведенческие метрики с сайта (время на странице, частота визитов).
- Python: 3.11 или 3.12
- Библиотеки:
catboost lightgbm matplotlib numpy pandas phik scikit-learn seaborn shap jupyter notebook
Предпочтительный способ: uv
- Создайте виртуальное окружение:
uv venv source .venv/bin/activate
- Установите зависимости:
uv sync
- Создайте виртуальное окружение:
python -m venv venv source venv/bin/activate
- Установите зависимости:
pip install -r requirements.txt
- Данные: Поместите наборы данных в директорию
data/
. - Запуск проекта:
- Откройте Jupyter Notebook:
jupyter notebook purchase_prediction.ipynb
- Выполните ячейки последовательно для предобработки, обучения модели и анализа результатов.