Вступление

Обзор проекта

Данные для этого случая моделируют, как люди принимают решения о покупке и как на эти решения влияют рекламные предложения.

У каждого человека в симуляции есть некоторые скрытые черты, которые влияют на их модели покупок и связаны с их наблюдаемыми чертами.

Люди проводят различные мероприятия, включая получение предложений, открытие предложений и совершение покупок.

Для упрощения нет явных продуктов для отслеживания. Регистрируются только суммы каждой транзакции или предложения.

Есть три типа предложений, которые можно отправлять: купи-один-получи-один (BOGO), скидочные и информационные.

  1. BOGO: пользователь должен потратить определенную сумму, чтобы получить вознаграждение, равное этой пороговой сумме.
  2. Скидка: пользователь получает вознаграждение, равное части потраченной суммы.
  3. Информационный: нет вознаграждения, но и нет требуемой суммы, которую пользователь, как ожидается, потратит.

Предложения могут быть доставлены по нескольким каналам: электронная почта, мобильный телефон, социальные сети, Интернет.

Постановка задачи

Мы будем использовать полученные данные, чтобы найти лучшую стратегию продвижения, пытаясь ответить на следующие вопросы:

а) Определите, какие группы людей наиболее откликаются на каждый тип предложения.

б) Как лучше всего представить каждый тип предложения?

c) Сколько людей из разных категорий фактически завершили транзакцию в окне предложения?

г) Какие отдельные атрибуты внесли наибольший вклад во время окна предложения?

Мы также постараемся обучить модель предсказывать сумму, которую может потратить человек, с учетом его черт и подробностей. Это поможет нам решить, какое рекламное предложение лучше всего подходит для конкретного человека и более точно отреагирует на целевую аудиторию.

Метрики

Чтобы попытаться ответить на четыре упомянутых выше вопроса, нам нужно сосредоточиться на окне предложения, то есть времени между началом развертывания предложения и его истечением. Некоторые ключевые определения, прежде чем мы продолжим:

Пусть t_receipt обозначает время получения предложения, t_view обозначает время, когда пользователь впервые просматривает предложение, t_completion обозначает время, когда пользователь платит за товар с примененной рекламной акцией, а t_expiry обозначает время, когда истекает срок действия предложения.

  1. У нас есть окно предложения, если t_receipt ≤ t_view ≤ t_expiry.
  2. Окно предложения считается открытым, если t_view t_receipt и t_completion имеет значение null
  3. Транзакция считается завершенной в окне предложения, если t_view ≥ t_receipt и t_completion ≥ t_receipt.
  4. УСПЕШНОЕ ПРЕДЛОЖЕНИЕ: предложение считается успешным, если t_receipt ≤ t_view, t_viewt_completion и t_completiont_expiry [PAID].
  5. ИСПЫТАННОЕ ПРЕДЛОЖЕНИЕ: предложение считается испробованным, если t_receiptt_view , t_viewt_expiry и t_completiont_expiry [ПОКУПКА ПОСЛЕ истечения срока действия предложения]
  6. НЕПРАВИЛЬНОЕ ПРЕДЛОЖЕНИЕ: предложение считается неудавшимся, если оно не было ни успешным, ни испробованным.

Метрика, которую мы будем использовать для анализа эффективности модели для прогнозирования суммы, потраченной каждым человеком, - это оценка R2.

R-квадрат - это статистическая мера того, насколько данные близки к подобранной линии регрессии.

Анализ

Исследование данных

Данные портфолио

Доступно 10 типов предложений.

Данные профиля

Расшифровка данных

Недостающие данные

В профильных данных 2175 записей, в которых не указаны доход и пол.

В тех же 2175 записях возраст был установлен равным 118, что явно кажется заполнителем для нулевого значения, как показано слева.

Это стало ясно, когда все 118 возрастов были обнулены и визуализировалась тепловая карта, как показано ниже:

Предварительная обработка данных

Мы создали класс Python для предварительной обработки данных, хранения предварительно обработанных данных, создания моделей, обучения моделей и сохранения моделей, а также несколько вспомогательных методов для помощи в быстром кодировании.

портфолио

  1. Столбец id переименован в offer_id
  2. Изменены значения в столбце 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 соответственно.

Стенограмма

  1. Столбец 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 в качестве показателя для оценки.

Используемые модель и гиперпараметры:

  1. 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. Год начала членства

Заключение

Мы выяснили, что

  1. Предложения "купи один - получи один" приносили более высокий доход по сравнению с другими предложениями.
  2. Доход, возраст и период членства имеют наибольшее влияние на сумму, потраченную в течение периода действия предложения.
  3. Мобильные каналы и электронная почта лучше всего подходят для продвижения предложения.

Улучшения

В рамках задачи по улучшению мы можем опробовать PCA, чтобы выявить новые аспекты, ведущие к изучению различных сегментов клиентов на основе суммы, потраченной по каждой категории предложений. Сравнение этих распределений с распределениями, которые мы выполнили ранее, может дать гораздо больше информации о том, каким лицам отправлять разные коды предложений.

использованная литература

Найдите здесь код:



Чтобы узнать больше и поработать над проектами, найдите меня на: