В этом блоге мы углубимся в данные Starbucks и сосредоточимся на поведении клиентов к предложениям.

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

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

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

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

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

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

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

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

Показатели

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

Мы будем использовать оценку F1 для оценки производительности модели, поскольку она представляет собой средневзвешенное значение полноты и точности. Традиционный или сбалансированный показатель F (оценка F1) представляет собой гармоническое среднее значение точности и полноты, при котором показатель F1 достигает своего наилучшего значения при 100 и худшего при 0.

Описание входных данных

Данные содержатся в трёх файлах:

  • портфолио.json — содержит идентификаторы предложений и метаданные о каждом предложении (длительность, тип и т. д.).
  • Profile.json — демографические данные для каждого клиента
  • стенограмма.json — записи транзакций, полученных предложений, просмотренных предложений и завершенных предложений.

Вот схема и объяснение каждой переменной в файлах:

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

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

profile.json —пользователи программы вознаграждений (17 000 пользователей x 5 полей)

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

transcript.json —Журнал событий (306648 событий x 4 поля)
person: (строка/хэш)
событие: (строка) предложение получено, предложение просмотрено, транзакция, предложение завершено
значение: (словарь) разные значения в зависимости от типа события
идентификатор предложения: (строка/хеш), не связанный ни с какой «транзакцией»
сумма: (числовая) деньги, потраченные в «транзакции»< br /> вознаграждение: (числовое) деньги, полученные за «предложение выполнено»
время: (числовое) часы после начала теста

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

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

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

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

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

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

Причина такого большого количества возрастных значений в удивительных 118

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

Что касается гендерного распределения — в приложении доминируют мужчины с колоссальным доминированием в 61%.

Подготовка и очистка данных

Чтобы построить модель, нам нужно объединить наборы данных. Но прежде чем объединить их — мы очистим и сделаем данные понятными для зрителей.

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

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

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

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

ЭДА

  • Распределение доходов

  • Наиболее используемые типы предложений

  • Поведение клиентов в отношении предложений

  • Распределение по возрасту

  • Наиболее часто используемое предложение клиентов

  • Распределение по возрасту по предложениям/мероприятиям

Теперь мы подошли к последнему шагу — построению модели ML.

Построение модели машинного обучения

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

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

Предложение получено: 1, предложение просмотрено: 2, предложение выполнено: 3

  • Столбцы месяца и года инженера-функционала
  • Масштабирование и нормализация непрерывных данных с использованием масштабатора minmax

Далее мы разделим модель на 66 % на 34 % для обучения и тестирования, чтобы проверить, насколько наша модель соответствует видимым и невидимым данным.

Эталонная модель

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

Мы обучили и протестировали данные на двух разных алгоритмах, кроме эталонного.

Модели, которые мы должны использовать, должны достичь показателя F1. Для решения этой проблемы можно использовать модели категоризации. RandomForestClassifier и DecisionTreeClassifier — две модели машинного обучения, которые мы намерены применить на практике. Обе модели основаны на деревьях, но дерево решений использует все интересующие функции и переменные и строится на всем наборе данных, тогда как случайный лес случайным образом выбирает наблюдения/строки, а также определенные функции и переменные для построения нескольких деревьев решений, а затем усредняет результаты.

Ниже показано, как они противостоят друг другу с точки зрения очков в Формуле-1.

Основываясь на приведенной выше статистике, мы можем с уверенностью заявить, что классификатор дерева решений является лучшим алгоритмом с показателем F1 64,3.

Улучшение модели

Это подводит нас к нашему последнему шансу улучшить производительность модели, то есть использовать GridSearchCV для настройки гиперпараметров.

На основе этих параметров ниже приведены окончательные результаты.

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

Ниже приведены результаты и выводы

Оценка модели

Набор проверки используется для оценки модели. И случайный лес, и дерево решений лучше эталона. Наилучший результат дает модель DecisionTreeClassifier, настроенная с помощью гиперпараметра, поскольку ее оценка F1 при проверке составляет 70+, что намного выше эталонного показателя. Модель RandomForestClassifier также показала хорошие результаты по сравнению с эталоном: показатель теста F1 составил 43,11. Наша задача, которую нужно решить, не настолько чувствительна, для чего требуется очень высокий балл F1, поэтому оценки хорошие и достаточные, и их можно использовать для целей классификации, чтобы предсказать, ответит ли клиент на предложение.

Отражение

  • Структура набора данных стенограмм была немного сложной, что усложняло задачу.
  • Наличие большего количества данных о поле «О» помогло бы улучшить оценку F1 всех моделей, поскольку это делает его несбалансированным набором данных.
  • Результаты не самые лучшие, даже после применения GridSearchCV. Так что это определенно можно улучшить.

Улучшения

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

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

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

Благодарности

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