Определение проекта

Обзор проекта
Starbucks — одна из самых популярных кофеен в мире. Рекламный набор данных, предоставленный в рамках проекта Udacity Data Science Capstone, позволяет понять, как клиенты реагируют на различные рекламные акции, которые им предлагает Starbucks. Starbucks предоставила различные наборы данных, связанные с клиентами, портфелем, а также предложениями здесь.

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

В первую очередь компания выпускает три разных типа предложений; Buy-One-Get-One (BOGO), дисконтная и информационная.

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

Используемый набор данных доступен в моем Github Repository вместе со всеми другими кодами и ресурсами.

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

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

  • Каков средний возраст для каждого пола, получившего предложения?
  • Каковы коэффициенты конверсии для предложений, которые получили клиенты?
  • Какая возрастная группа получила больше всего предложений от всех клиентов и какие из них показали лучшие показатели конверсии?

Ответы на эти вопросы и EDA относительно некоторых других аспектов набора данных помогут нам разработать наши модели для получения точных ответов.

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

Понимание данных

Исследование данных
Нам предоставлены три набора данных в формате JSON, которые мы планируем использовать в проекте. Они перечислены как под -

profile.json

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

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

портфолио.json

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

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

стенограмма.json

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

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

Существует множество процессов очистки, которые необходимо выполнить в этих наборах данных, прежде чем их можно будет использовать. Они есть -

  • Набор данных профиля
     – Отсутствующие значения в столбце "Пол"
     – Отсутствующие значения, закодированные цифрой 118 в столбце "Возраст", которые становятся выбросами
     – В столбце "Доход" есть отсутствующие значения
  • Набор данных портфолио
    — имена каналов хранятся в виде списков, которые необходимо разделить для использования.
  • Набор данных стенограммы
     — столбец значений содержит всю информацию в формате JSON, которую необходимо структурировать в столбцы для использования.

Визуализация данных
Мы хотим получить общее представление о различных функциях набора данных.

Гистограммы выше показывают распределение возрастных групп и диапазонов доходов в наборе данных. Возраст в основном распределяется между 50–62 годами, в то время как есть крайняя группа клиентов в возрасте › 100 лет, которые нуждаются в очистке. С другой стороны, доход распределяется в районе 65к-70к.

Набор данных портфолио содержит три различных типа предложений. Скидка, купи-один-получи-один бесплатно (BOGO) и информационные типы предложений. Скидка и BOGO имеют вариативность и различные комбинации типов предложений.

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

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

Более 50% набора данных клиентов состоит из мужчин, за которыми следуют женщины (41%), а 3% составляют категорию «другие».

Также наблюдается, что средний возраст для всех полов колеблется в пределах 55–60 лет, как показано на рис.4.

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

Наконец, когда мы смотрим на воронку взаимодействия с предложениями Starbucks, первый шаг — это когда происходит транзакция, за которой следует предложение, полученное покупателем. Затем предложение можно просмотреть, и, если клиент совершает операцию по предложению, предложение может быть помечено как выполненное на последнем этапе. 14 000 раз мы получали транзакции от клиентов, из которых ~45% получали предложения. Коэффициент завершения предложения с момента его получения клиентом составляет 50% на основе предоставленного нам набора данных.

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

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

  • В категории возраст присутствуют отклонения (возраст › 100 лет), и мы хотим их исправить. Сначала мы заменяем выбросы возраста на NaN, который затем можно использовать для замены средним значением всего столбца возраста.
  • Мы также заменяем отсутствующие значения переменной income средним значением столбца.
  • В столбце gender есть некоторые пропущенные значения, и, поскольку это категориальная переменная, мы идем дальше и используем вменение режима, чтобы заменить отсутствующие строки значениями.
  • Мы преобразуем непрерывный столбец возраста в категориальный столбец, создавая группу возрастов. Эти корзины были «до 20», «20–35», «36–45», «46–60» и «61–80». Это облегчает интерпретацию модели во время обучения.
  • Используя набор данных расшифровки, мы разделили столбец value, чтобы получить различную информацию, содержащуюся в нем, такую ​​как идентификатор предложения, потраченные и полученные деньги.
  • Мы применяем одно горячее кодирование для категориальных столбцов, таких как тип предложения, пол и возрастная группа, потому что многие модели машинного обучения не способны обрабатывать большие размерности в столбце.
  • Мы разделяем столбец канала по его разделителю «|», а затем применяем одно горячее кодирование для всех категорий, полученных в столбце.
  • Мы используем Min-Max Scaler для масштабирования непрерывных переменных, таких как «доход_покупателя», «сложность_предложения», «длительность_предложения», «вознаграждение_предложения»,
    «время», «полученные_деньги» и «потраченные_деньги».

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

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

На приведенной выше диаграмме видно, что скидка имеет самый высокий коэффициент конверсии после ее получения покупателем. Коэффициент конверсии составляет ~ 55% для скидки с момента получения предложения до его завершения, тогда как для BOGO он составляет 51%.

Реализация
При разработке и сравнении различных моделей мы используем оценку F1, чтобы понять производительность модели, которая является функцией точности и полноты.
Оценка F1 является лучшим показателем, когда вы хотите найти правильный баланс между точностью и отзывом с неравномерным распределением классов в наборе данных. Мы используем четыре модели с набором данных; Логистическая регрессия, классификатор случайного леса, деревья решений и классификатор K-соседей (в качестве эталона). Мы начнем с реализации классификатора K Neighbours, чтобы получить оценку F1 для поезда и тестового набора. Оценка поезда составляет 55,82, а тест - 25,75, и эти оценки можно рассматривать как ориентир для улучшения.

Уточнение
Чтобы улучшить результаты тестов, мы также реализуем такие модели, как логистическая регрессия, классификатор случайного леса, классификатор дерева решений для сравнения результатов. Рис.9. показать, что классификатор дерева решений работает лучше как с обучающим, так и с тестовым набором данных, а это означает, что модель будет хорошо работать с невидимыми данными по сравнению с другими, когда она пыталась предсказать действие с предложениями. Более того, остальные модели работают довольно хорошо по сравнению с эталонными показателями классификатора K-Neighbours. Кажется, что в модели дерева решений нет проблем с переобучением, а также нет резкой разницы между результатами обучения и теста.

Оценка и проверка модели
В любой проблеме машинного обучения всегда рекомендуется использовать методы проверки для подтверждения результатов модели. Как видно на рис. 9., мы также выполнили оценку модели на тестовом наборе. Учитывая результаты классификатора дерева решений для F1 Score, результаты теста составляют 84,6, что значительно выше, чем у остальных моделей и их тестового набора F1 Score. Это означает, что модель будет хорошо работать с невидимыми данными.

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

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

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

Чтобы набор параметров соответствовал функции поиска по сетке, мы устанавливаем следующее:

  • max_features = авто, кв.
  • ccp_alpha = 0,1, 0,01, 0,001
  • максимальная_глубина = 5, 6, 7, 8, 9
  • критерий = Джини, энтропия
  • cv = 5

Используя вышеуказанные параметры в поиске по сетке, мы получаем балл F1 поезда 62,5 и балл теста 62,47, которые очень похожи как для поезда, так и для тестовых наборов.

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

  • max_features = Нет
  • ccp_alpha = 0.0
  • макс_глубина = Нет
  • критерий = Джини

Приведенные выше параметры для классификатора дерева решений дали нам лучшие оценки для поезда и теста F1.

Вывод

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

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

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