Введение

В этой статье обобщается работа над набором данных, который содержит смоделированные данные, имитирующие поведение клиентов в мобильном приложении Starbucks Rewards. Раз в несколько дней Starbucks рассылает предложение пользователям мобильного приложения. Предложение может быть просто рекламой напитка или реальным предложением, таким как скидка или BOGO (купите один, получите второй бесплатно). Некоторые пользователи могут не получать никаких предложений в течение определенных недель. Не все пользователи получают одно и то же предложение, и это было непросто решить с помощью этого набора данных. Наша задача состоит в том, чтобы объединить данные о транзакциях, демографии и предложениях, чтобы определить, какие демографические группы лучше всего реагируют на тот или иной тип предложения.

Этот набор данных представляет собой упрощенную версию настоящего приложения Starbucks, потому что базовый симулятор имеет только один продукт, тогда как Starbucks фактически продает десятки продуктов. Каждое предложение имеет срок действия до истечения срока действия предложения. Например, предложение BOGO может быть действительно только 5 дней. Информационные предложения также имеют срок действия, даже если эти объявления просто предоставляют информацию о продукте; например, если информационное предложение действует 7 дней, можно предположить, что покупатель ощущает влияние предложения в течение 7 дней после получения рекламы.

Словарь данных

profile.json

Пользователи программы вознаграждений (17000 пользователей x 5 полей)

  • пол: (категориальный) M, F, O или null
  • возраст: (числовое) отсутствующее значение, закодированное как 118
  • идентификатор: (строка/хеш)

portfolio.json

Предложения, отправленные в течение 30-дневного тестового периода (10 предложений x 6 полей)

  • вознаграждение: (числовое) деньги, присуждаемые за потраченную сумму
  • каналы: (список) Интернет, электронная почта, мобильные устройства, социальные сети
  • сложность: (число) деньги, которые необходимо потратить, чтобы получить награду
  • продолжительность: (числовое) время, в течение которого предложение будет открыто, в днях
  • offer_type: (string) бого, скидка, информационный
  • идентификатор: (строка/хеш)

транскрипт.json

Журнал событий (306648 событий x 4 поля)

  • человек: (строка/хэш)
  • событие: (строка) предложение получено, предложение просмотрено, транзакция, предложение завершено
  • значение: (словарь) разные значения в зависимости от типа события:
    идентификатор предложения: (строка/хэш) не связан с какой-либо «транзакцией»
    сумма: (числовое) деньги, потраченные на «транзакцию»
    вознаграждение: (числовое) деньги, полученные от «предложения выполнено»
  • время: (числовое) часов после начала теста

Типы предложений

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

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

Предложения могут быть доставлены по нескольким каналам.

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

Очищайте, преобразовывайте и объединяйте данные и получайте информацию о клиентской базе, такой как возраст, доход и т. д., и анализируйте окончательные результаты.

Анализ

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

  • Для данных портфеля:
  1. Столбец «id» переименован в «offer_id».
  2. Один из них закодировал столбец «канал», чтобы иметь отдельные столбцы для «интернет», «мобильный», «электронная почта» и «социальные сети».
  • Для данных профиля:
  1. Изменен формат столбца «became_member_on» на формат ГГГГ-ММ-ДД.
  2. 2175 записей в данных профиля отсутствовали сведения об поле и доходе, а в строках, в которых пол и доход, nan возраст равно «118», что не имеет смысла. Поэтому заменил все записи age с «118» на nan
  • Для данных стенограммы:
  1. Извлечена информация «offer_id», «сумма» и «вознаграждение» из столбца «значение».
  2. Столбец «награда» содержит только одно уникальное значение, то есть «2». Поэтому столбец «вознаграждение» удален.
  3. Столбец «person» переименован в «customer_id».

После очистки данных было выполнено объединение всех трех наборов данных. Для объединенного набора данных была выполнена EDA, ниже приведены результаты EDA:

  1. Демографические данные

Возраст. Было замечено, что средний возраст клиентской базы составляет около 54 лет. Минимальный возраст — 18 лет, максимальный — 101 год.

Доход. Было замечено, что средний доход клиентской базы составляет около 64 000 долларов США.

Пол: примерно 50 % клиентов — мужчины.

2. Анализ данных о предложениях

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

3. Разбивка данных о предложениях по типу предложения и каналу, группе дохода и возрастной группе

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

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

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

  • Женщины: почти для каждой группы дохода и возраста было отправлено больше предложений bogo , чем предложений скидки и bogoпредложений. просмотрено больше, чем скидка. Кроме того, несмотря на то, что предложения bogoпросматривались чаще, но предложения скидки были выполнены чаще, чем предложения bogo

Сводка EDA:

  • 50% клиентов — мужчины, средний возраст клиента — 54 года, средний доход — 64 тысячи долларов.
  • Почти одинаковое количество предложений скидки и bogo было отправлено клиентам, но предложений bogo было просмотрено больше, а предложений скидки было завершено более
  • Клиентам-мужчинам было отправлено больше предложений скидки, но они просмотрели больше предложений bogo и выполнили больше скидок, чем предложения bogo.
  • Клиентам-женщинам было отправлено больше предложений bogo, и они просмотрели больше предложений bogo, но выполнили больше предложений скидки, чем предложения bogo.
  • Тенденция к просмотру большего количества предложений bogo, но заполнению большего количества предложений скидки наблюдалась почти во всех возрастных группах и группах с доходом.

Подготовка данных для моделирования и построения прогнозной модели

Так как у нас было 3 набора данных: Портфолио, Профиль и Стенограмма. Нам нужна была стратегия для их объединения и подготовки данных, чтобы мы могли построить прогностическую модель.

Постановка задачи для модели. Предскажите, совершит ли пользователь предложение, на основе его транзакций и поведения при просмотре предложения.

Этапы подготовки данных:

  • После удаления строк со значениями nan для демографических данных клиентов (доход, возраст, пол и т. д.) мы создали 2 набора данных из данных расшифровки: а. Для данных предложения, б. Для данных транзакций
  • Мы извлекли год, когда клиент стал участником, из столбца «became_member_on» и преобразовали данные столбца «время» в количество дней, разделив их на 24.
  • Каждое предложение имеет длительность (срок действия), в течение которого оно действительно и указано в данных портфеля в столбце длительность (единицей является количество дней).
  • После того, как предложение отправлено клиенту, клиент должен потратить необходимую сумму денег, чтобы выполнить предложение, и у него есть время до окончания срока действия предложения.
  • Поэтому мы подготовим наши данные таким образом, чтобы для каждого предложения, которое было отправлено клиенту, мы проверяли, просматривал ли этот клиент это предложение в течение срока действия/действия этого предложения (встроенные функции для выполнения этой задачи).
  • Предложение считается успешным, если в течение его длительности пользователь просмотрел предложение и выполнил его.
  • После получения данных в требуемом формате - нужно закодировать категориальные функции и создать разделение тестов поезда (20% данных для тестового набора).

Модель прогнозирования

Сначала мы использовали классификатор Random Forest с параметрами по умолчанию, а затем использовали RandomSearchCV для настройки гиперпараметров. Наилучший результат был получен для следующего набора гиперпараметров:

{‘n_estimators’: 200,
‘min_samples_split’: 2,
‘min_samples_leaf’: 4,
‘max_features’: ‘auto’,
‘max_depth’: 9}

И показатели производительности модели были следующими: Точность 0,72 и F1-оценка 0,72.

На приведенной ниже диаграмме представлена ​​относительная важность всех функций, которые использовались при обучении модели. Топ-4 функции:

1. Вознаграждение за предложение
2. Сложность предложения
3. Продолжительность предложения
4. Доход клиента

Заключение

Из приведенного выше анализа и моделирования можно сделать вывод, что детали предложения являются наиболее движущими факторами для клиента, чтобы завершить предложение (вознаграждение, сложность, продолжительность и т. д.).

И вполне логично, что предложения bogo просматривались чаще, но выполнялись меньше, чем предложения скидки , потому что клиенты предпочли бы предложение "купи один, получи один", а не просто скидку.

Примечание. Поскольку было упомянуто, что учащийся может анализировать данные любым способом, который он считает нужным, я выделил использование только одной модели. Хотя можно было бы применять и другие модели, я доволен результатами классификатора случайного леса, потому что относительная важность признаков помогает понять, что движет завершением предложения.

Пожалуйста, найдите блокнот Jupyter и данные для этого анализа по ссылке ниже:

https://github.com/dpanshu5/Udacity-Capstone-Project-Startbucks