Вступление
Обзор проекта
Данные для этого случая моделируют, как люди принимают решения о покупке и как на эти решения влияют рекламные предложения.
У каждого человека в симуляции есть некоторые скрытые черты, которые влияют на их модели покупок и связаны с их наблюдаемыми чертами.
Люди проводят различные мероприятия, включая получение предложений, открытие предложений и совершение покупок.
Для упрощения нет явных продуктов для отслеживания. Регистрируются только суммы каждой транзакции или предложения.
Есть три типа предложений, которые можно отправлять: купи-один-получи-один (BOGO), скидочные и информационные.
- BOGO: пользователь должен потратить определенную сумму, чтобы получить вознаграждение, равное этой пороговой сумме.
- Скидка: пользователь получает вознаграждение, равное части потраченной суммы.
- Информационный: нет вознаграждения, но и нет требуемой суммы, которую пользователь, как ожидается, потратит.
Предложения могут быть доставлены по нескольким каналам: электронная почта, мобильный телефон, социальные сети, Интернет.
Постановка задачи
Мы будем использовать полученные данные, чтобы найти лучшую стратегию продвижения, пытаясь ответить на следующие вопросы:
а) Определите, какие группы людей наиболее откликаются на каждый тип предложения.
б) Как лучше всего представить каждый тип предложения?
c) Сколько людей из разных категорий фактически завершили транзакцию в окне предложения?
г) Какие отдельные атрибуты внесли наибольший вклад во время окна предложения?
Мы также постараемся обучить модель предсказывать сумму, которую может потратить человек, с учетом его черт и подробностей. Это поможет нам решить, какое рекламное предложение лучше всего подходит для конкретного человека и более точно отреагирует на целевую аудиторию.
Метрики
Чтобы попытаться ответить на четыре упомянутых выше вопроса, нам нужно сосредоточиться на окне предложения, то есть времени между началом развертывания предложения и его истечением. Некоторые ключевые определения, прежде чем мы продолжим:
Пусть t_receipt обозначает время получения предложения, t_view обозначает время, когда пользователь впервые просматривает предложение, t_completion обозначает время, когда пользователь платит за товар с примененной рекламной акцией, а t_expiry обозначает время, когда истекает срок действия предложения.
- У нас есть окно предложения, если t_receipt ≤ t_view ≤ t_expiry.
- Окно предложения считается открытым, если t_view ≥ t_receipt и t_completion имеет значение null
- Транзакция считается завершенной в окне предложения, если t_view ≥ t_receipt и t_completion ≥ t_receipt.
- УСПЕШНОЕ ПРЕДЛОЖЕНИЕ: предложение считается успешным, если t_receipt ≤ t_view, t_view ≤ t_completion и t_completion ≤ t_expiry [PAID].
- ИСПЫТАННОЕ ПРЕДЛОЖЕНИЕ: предложение считается испробованным, если t_receipt ≤ t_view , t_view ≤ t_expiry и t_completion ›t_expiry [ПОКУПКА ПОСЛЕ истечения срока действия предложения]
- НЕПРАВИЛЬНОЕ ПРЕДЛОЖЕНИЕ: предложение считается неудавшимся, если оно не было ни успешным, ни испробованным.
Метрика, которую мы будем использовать для анализа эффективности модели для прогнозирования суммы, потраченной каждым человеком, - это оценка R2.
R-квадрат - это статистическая мера того, насколько данные близки к подобранной линии регрессии.
Анализ
Исследование данных
Данные портфолио
Доступно 10 типов предложений.
Данные профиля
Расшифровка данных
Недостающие данные
В профильных данных 2175 записей, в которых не указаны доход и пол.
В тех же 2175 записях возраст был установлен равным 118, что явно кажется заполнителем для нулевого значения, как показано слева.
Это стало ясно, когда все 118 возрастов были обнулены и визуализировалась тепловая карта, как показано ниже:
Предварительная обработка данных
Мы создали класс Python для предварительной обработки данных, хранения предварительно обработанных данных, создания моделей, обучения моделей и сохранения моделей, а также несколько вспомогательных методов для помощи в быстром кодировании.
портфолио
- Столбец
id
переименован вoffer_id
- Изменены значения в столбце
offer_id
, чтобы они содержали значения формата<offer_type>/C<difficulty>/R<reward>/T<duration
. Причина этого - удобочитаемость.{‘ae264e3637204a6fb9bb56bc8210ddfd’: ‘BOGO/C10/R10/T7’,
‘4d5c57ea9a6940dd891ad53e9dbe8da0’: ‘BOGO/C10/R10/T5’,
‘3f207df678b143eea3cee63160fa8bed’: ‘INFORMATIONAL/C0/R0/T4’,
‘9b98b8c7a33c4b65b9aebfe6a799e6d9’: ‘BOGO/C5/R5/T7’,
‘0b1e1539f2cc45b7b9fa7c272da2e1d7’: ‘DISCOUNT/C20/R5/T10’,
‘2298d6c36e964ae4a3e7e9706d1fb8c2’: ‘DISCOUNT/C7/R3/T7’,
‘fafdcd668e3743c1bb461111dcafc2a4’: ‘DISCOUNT/C10/R2/T10’,
‘5a8bc65990b245e5a138643cd4eb9837’: ‘INFORMATIONAL/C0/R0/T3’,
‘f19421c1d4aa40978ebb69ca19b0e20d’: ‘BOGO/C5/R5/T5’,
‘2906b810c7d4411798c6938adc9daaa5’: ‘DISCOUNT/C10/R2/T7’}
Профиль
1. Создан новый столбец member_year
из столбца became_member_on
, содержащий год, представляющий начало членства пользователя.
2. Подсчитайте количество дней с момента начала членства и сохраните его в столбце member_since_days
.
3. Созданные возрастные группы - 1, 2, 3 и 4, представляющие возраст ≤ 38, 39 ≤ возраст ≤ 54, 55 ≤ возраст ≤ 73 и 74 ≤ возраст ≤ 101. соответственно.
4. Столбец id
переименован в person
, чтобы он соответствовал фрейму данных transcript
.
5. Замените возраст 118 на NaN
, поскольку он является заполнителем для нулевых значений и постоянно отображается в записях, где недоступны income
и gender
.
6. Удалены записи с нулевыми значениями, поскольку для каждого человека было только три важных атрибута - доход, возраст и пол, а в 2175 из 17000 записей все три отсутствовали.
7. Создан столбец income_group
на основе диапазонов доходов 45000 ≤ доход ‹60000, 60000 ≤ доход‹ 75000, 75000 ≤ доход ‹90000, 90000 ≤ доход‹ 105000, и 105000 ≤ доход ‹120000 соответственно.
Стенограмма
- Столбец
value
стенограммы содержал данные в следующем формате:
Для событий типа «предложение просмотрено»:{‘offer id’: ‘f19421c1d4aa40978ebb69ca19b0e20d’}
Для событий типа «предложение получено»:{‘offer id’: ‘9b98b8c7a33c4b65b9aebfe6a799e6d9’}
Для событий типа 'предложение завершено': _ 19_
Для событий типа 'транзакция':{‘amount’: 0.8300000000000001}
Для простоты новый столбец с именемtype
с два значения: offer_id или amount было создано.
2. Создан новый столбец offer_id
, содержащий идентификатор предложения, как указано в пункте 2 раздела «Портфель», или NoPromotionApplied
, если событие относится к типу транзакция.
Поиск записей с транзакцией, выполненной в окне предложения
3. Отфильтрованные стенограммы с типом offer_id
и объединение с фреймами данных профиля и портфолио:
4. Узнайте истинный успех и проверенные рекорды. Для этого мы отфильтровали записи по типу события: offer received
, offer viewed
и offer completed
в отдельные фреймы данных, каждый с новым столбцом для времени, обозначающего время получения, время просмотра и время завершения. Затем объединяем их обратно.
5. Затем мы отфильтровываем данные, попадающие в временное окно предложения (см. Определение в разделе "Показатели" в начале этой статьи) как показано ниже:
6. Рассчитайте время, оставшееся до истечения срока действия предложения, как показано ниже:
7. Создайте столбцы, указывающие, представляет ли запись успешное, испробованное или неудачное предложение, как показано ниже:
8. Затем мы очищаем фрейм данных, поскольку в нем могли появиться повторяющиеся записи и нулевые значения из-за операции слияния, выполненной в пункте 4.
9. Наконец, мы определяем, в период действия предложения или вне периода действия предложения потрачена сумма.
Для этого мы рассчитываем потраченную сумму на основе исходного набора данных стенограммы и время, затраченное на то, чтобы потратить деньги с самого начала про. Затем мы получаем все данные, относящиеся к неизменному предложению, то есть записи, касающиеся либо успешных, либо проверенных предложений, и объединяем их с данными транзакции. Наконец, мы проверяем, совершена ли транзакция в течение периода предложения или нет, и создаем новый столбец, чтобы указать эту информацию, как показано ниже:
Пусть t_spent обозначает время, потраченное до транзакции.
Могут быть данные, в которых информация представлена неверно. Чтобы справиться с этим, мы проверяем, выполняется ли t_spent ≥ t_receipt и (t_spent ≤ t_completed | t_spent ≤ t_expiry), то транзакция выполняется в пределах временного интервала предложения, иначе это не так. часть окна предложения.
Визуализация данных
Полученные результаты
Оценка и проверка модели
Я попытался построить модель для прогнозирования потраченной суммы на основе отдельных атрибутов и типа предложения. Поскольку это задача регрессии, мы выбрали показатель R2 в качестве показателя для оценки.
Используемые модель и гиперпараметры:
SVR
с полиномиальным ядром и степенью 7 - базовая модель
2. RandomForestRegressor
со следующими гиперпараметрами:
3. Найдите в сетке RandomForestRegressor
в следующем пространстве гиперпараметров:
Затем мы использовали RandomForestRegressor
с лучшими параметрами модели для повторного обучения модели.
Окончательные результаты на различных обученных моделях:
Окончательный результат R2 лучше, чем полученный с помощью SVM и произвольного леса по умолчанию.
Обоснование
Q1. Определите, какие группы людей больше всего откликаются на каждый тип предложения.
Участники, которые присоединились к один-два года назад по сравнению с 2018 годом, похоже, одинаково реагируют на каждое предложение, в то время как тенденция уменьшается с новыми участниками (на 1 год или меньше 1 год) и старые участники (более двух лет).
Мужчины в возрастных группах 1 (‹38 лет) и 3 (от 55 до 73 лет) доминировали почти по всем предложениям, в то время как женщины продемонстрировали доминирование в группе 3 ( от 55 до 73 лет).
Мужчины в группе 2 (45000 ‹= доход‹ 60000) и 3 (60000 ‹= доход‹ 75000) показал доминирование информационных скидок.
Q2. Как лучше всего представить каждый тип предложения?
Мобильная и электронная почта, по всей видимости, являются каналами, откуда в среднем приходило большинство отдельных транзакций.
Q3. Сколько людей из разных категорий фактически завершили транзакцию в окне предложения?
Примерно 12,8% от всего населения для типа предложения BOGO завершили транзакцию в окне предложения; 12% для скидки типа предложения и 18% для информационного типа соответственно.
Q4. Какие отдельные атрибуты больше всего повлияли на период действия окна предложения?
Три основных индивидуальных атрибута, которые внесли наибольший вклад, следующие:
1. Доход
2. Возраст
3. Год начала членства
Заключение
Мы выяснили, что
- Предложения "купи один - получи один" приносили более высокий доход по сравнению с другими предложениями.
- Доход, возраст и период членства имеют наибольшее влияние на сумму, потраченную в течение периода действия предложения.
- Мобильные каналы и электронная почта лучше всего подходят для продвижения предложения.
Улучшения
В рамках задачи по улучшению мы можем опробовать PCA, чтобы выявить новые аспекты, ведущие к изучению различных сегментов клиентов на основе суммы, потраченной по каждой категории предложений. Сравнение этих распределений с распределениями, которые мы выполнили ранее, может дать гораздо больше информации о том, каким лицам отправлять разные коды предложений.
использованная литература
Найдите здесь код:
Чтобы узнать больше и поработать над проектами, найдите меня на: