Введение:

Этот проект является частью Udacity Capstone Challenge, и данный набор данных содержит смоделированные данные, которые имитируют поведение клиентов в мобильном приложении Starbucks Rewards.

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

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

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

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

Анализ данных:

Набор данных содержит 3 файла-

  1. Портфель предложений описывает атрибуты (длительность, тип предложения и т. д.) каждого предложения.
  2. Профиль содержит демографические данные клиентов, включая их возраст, пол, доход и дату создания учетной записи в мобильном приложении Starbucks Rewards.
  3. Стенограмма включает в себя покупки клиентов, а также время, когда они получили, просмотрели и выполнили предложение.

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

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

1. Предлагаем данные портфеля-

Используемая терминология предложений:

  1. Бого — купи один, получи один бесплатно
  2. Скидка — скидка при покупке
  3. Информационная — предоставляет информацию о продуктах

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

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

Это довольно просто, так как содержит демографический профиль клиента.

  • Здесь мы можем найти недостающие значения в столбце доходов, а также в столбце возраста с возрастом 118 лет.

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

3. Транзакционные данные:

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

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

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

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

  • Объединение данных

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

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

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

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

  • Разделение стенограммы

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

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

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

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

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

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

Разработка функций:

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

  • Столбец, чтобы узнать о продолжительности членства клиента

Рассказывает о времени, прошедшем с тех пор, как пользователь стал участником.

  • Подсчет количества полученных предложений

Давайте визуализируем полученные предложения-

  • Разделение пользователей по поведению

Удалить сделки, не относящиеся к оферте.

  • Прошло время между получением предложения

Знать временной интервал между предложениями пользователю.

Реализация модели:

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

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

1. Подготовка

  • Подготовка набора данных
  • Разделение на обучающие и тестовые наборы
  • Исполнение модели

2. Моделирование

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

  1. Определить целевые и функциональные переменные
  2. Разделить для обучения и тестирования данных
  3. Применить масштабирование объектов

Я использовал классификатор DecisionTree в качестве базовой модели и классификатор случайного леса со случайно назначенными параметрами для сравнения производительности.

  • Модель предложения Bogo

Из вышеизложенного мы видим, что точность модели классификатора случайного леса в конечном итоге немного превосходит модель классификатора дерева решений, но в целом производительность обеих моделей примерно одинакова (82,14% против 81,77% соответственно с точки зрения точности). Но оценка F1 в модели случайного леса работает хуже по сравнению с классификатором дерева решений: 75,91% против 79,63%.

  • Модель предложения со скидкой

Опять же, модель классификатора случайного леса также имеет лучшую производительность по сравнению с классификатором дерева решений с точки зрения точности (87,23% против 86,72%), а оценка F1 также ниже (81,43% против 82,87%).

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

  • Модель информационного предложения

Производительность этой модели хуже по сравнению с двумя другими моделями, с точностью ниже 80% для обеих моделей, но модель RF по-прежнему работает лучше. Оценка F1 также хуже: 67,54% RF Classifier, хуже, чем у модели DT (68,66%). Мы могли упустить некоторую ценную информацию, удалив те транзакции (которые происходят только после просмотра предложения и в течение указанного периода времени), которые происходят независимо.

3. Рафинирование

Здесь мы попытаемся настроить параметры исходной модели с помощью метода GridSearch для повышения производительности. Мы попробуем настроить параметры для всех трех моделей.

  • Бого Модель

Повторный запуск модели с оптимальными параметрами из GridSearch-

Сравнивая две модели-

Как показано выше в сравнении, после использования параметров настройки точность теста немного улучшилась с 0,833 до 0,838, а показатель F1 увеличился с 0,759 до 0,779.

  • Модель со скидкой

Повторный запуск модели с оптимальными параметрами из GridSearch-

Сравнивая две модели-

Как показано выше в сравнении, после использования параметров настройки точность теста немного улучшилась с 0,872 до 0,873, а показатель F1 увеличился с 0,814 до 0,816.

  • Информационная модель

Повторный запуск модели с оптимальными параметрами из GridSearch-

Сравнивая две модели-

Как показано выше в сравнении, после использования параметров настройки точность теста немного улучшилась с 0,748 до 0,753, а показатель F1 увеличился с 0,681 до 0,678.

График обучения и точности тестирования для информационных моделей RF на данный момент дает следующую диаграмму:

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

Лучшие черты:

Взгляните на результаты наших 3 моделей и узнайте, какие элементы влияют на то, ответит ли клиент на предложение или нет.

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

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

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

Вывод:

На этом мы подошли к концу этого сложного проекта. Мы стремились ответить на 2 бизнес-вопроса:

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

Давайте посмотрим на отражение наших выводов в рамках проекта по этим вопросам.

Вопрос 1:

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

Мы увидели, что для всех моделей 3 главные переменные были одинаковыми, включая:

  1. Срок членства
  2. Доход
  3. Возраст

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

Вопрос 2:

Решение использовать 3 отдельные модели для прогнозирования эффективности каждого типа предложений оказалось с хорошей точностью для моделей Bogo и моделей скидок (82,83% для Bogo и 87,35% для скидок), но чуть менее точно для информационных предложений (75,3%). . Тем не менее, я бы счел 75% приемлемыми в бизнес-среде, что касается информационных предложений, для информирования пользователей о продукте не требуется никаких затрат.

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

Проблемы и улучшения:

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

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

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

Последние мысли:

Проект был довольно сложным, в основном из-за подготовки и очистки данных, но это был полезный опыт. Я благодарен Starbucks за набор данных и Udacity за потрясающую программу Data Scientist Nano Degree.

Полный исходный код с подробными комментариями можно найти на моем Github.