Понимание реакции клиентов Starbucks на предложения

Вызов Starbucks Capstone Challenge

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

Проект включает смоделированные данные, которые имитируют поведение клиентов в приложении вознаграждений Starbucks. Предложения рассылаются пользователям приложения из разных демографических групп. Предложения могут быть информационными, скидками или «Купи 1, получи 1 бесплатно» (BOGO). Эти предложения отправляются пользователям по разным каналам. Подвох в том, что не все пользователи получают одно и то же предложение.

Этому проекту было предоставлено 3 набора данных:

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

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

В 2020 году у Starbucks около 32 660 магазинов по всему миру. В течение месяца 37,8 миллиона американцев посетили Starbucks. С таким количеством клиентов Starbucks может использовать много данных для продвижения своего бренда. Анализируя поведение своих клиентов, они могут принимать решения на основе целевой аудитории. Используя данные о клиентах, предложениях и транзакциях, Starbucks хотела бы получить представление и узнать об эффективности предложений.

Метрики проекта

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

Исследовательский анализ данных

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

портфолио

Этот набор данных содержит низкую изменчивость, поскольку предложения были установлены Starbucks. Как упоминалось ранее, было три типа предложений (БОГО, Скидка, Информационное). Специально для этого проекта было 4 дисконтных, 4 БОГО и 2 информационных предложения. Предложения были разной продолжительности, самая короткая действовала в течение 3 дней, а самая длинная — в течение 10 дней. Для столбца channels было четыре разных канала отправки предложений клиентам. К счастью, в этом наборе данных не было отсутствующих значений.

Профиль

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

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

На двух вышеприведенных графиках показано распределение доходов мужчин и женщин. Распределение доходов мужчин смещено вправо, в то время как распределение доходов женщин показывает более нормальное распределение. Это означает, что для набора профильных данных женщины имеют более высокий средний доход, чем мужчины (71,3 тыс. долл. США для женщин, 61,2 тыс. долл. США для мужчин).

Наконец, мы разделим возраст клиентов, чтобы предотвратить переоснащение, как показано ниже.

Расшифровка

Набор данных расшифровки аналогичен набору данных портфолио тем, что в нем нет отсутствующих значений. Мы удалили строки для customer_id, которые мы удалили в наборе данных профиля. Мы заметили, что 45,45% событий были транзакциями, а 54,55% — предложениями. Нам нужно изменить имя столбца person на customer_id, чтобы упростить слияние.

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

Перед слиянием нам нужно очистить и преобразовать данные в пригодную для использования структуру. Значения в столбце value были извлечены и назначены отдельным столбцам на основе их key. В данном случае offer_id, сумма и вознаграждение. Затем мы сразу закодировали события для каждой комбинации customer_id и offer_id, как показано ниже.

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

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

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

Эталон:

Четыре разные модели будут обучены с использованием точности и показателя f1 в качестве основных показателей производительности. Мы создали эталонную модель с использованием K-ближайших соседей (KNN), которая достигла f1-оценки 88% в наборе обучающих данных и 84% в наборе тестовых данных. Недостатком KNN является то, что он непараметрический, что означает, что алгоритм не делает предположений о характере распределения. Кроме того, алгоритм чувствителен к выбросам.

Уточнение

Мы выполнили перекрестную проверку с использованием KFold от Scikit-Learn для обучающих данных с использованием трех разных моделей (RandomForestClassifier, AdaBoostClassifier и LogisticRegression).

Мы видим, что у RandomForestClassifier (RFC) была лучшая производительность, поэтому RFC был выбран для тонкой настройки.

Существует множество методов точной настройки модели машинного обучения, для этого проекта было выбрано использование GridSearchCV. Этот подход позволяет нам найти наилучшие параметры, которые оказались максимальной глубиной 15, максимальными признаками 10, минимальными выборками, разделенными как 10, и n оценок как 100.

Оценка

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

Из приведенного выше графика мы можем сделать следующие выводы:

  • То, сколько клиент тратит, больше всего влияет на то, откликнутся ли они на предложение. Прогнозирование и понимание того, сколько клиент тратит, повысит скорость отклика на предложение.
  • Продолжительность членства (как долго клиент является членом Starbucks) также может влиять на ответ на предложение. Постоянные участники уже сталкивались с подобными предложениями в прошлом. Таким образом, они понимают, как они работают и какие из них того стоят. Для предложения BOGO клиент может сохранить его, когда ему нужно купить более одной чашки (с компаньоном) или если был популярный рекламный напиток.
  • То, как предложения доставляются клиентам, также может повлиять на реакцию клиента. Таким образом, назначение большей квоты для одного носителя может увеличить количество откликов.
  • Сложность соответствует тому, сколько клиент должен потратить, чтобы иметь возможность использовать предложение. Это может коррелировать с тем, сколько клиент тратит. Если сложность высока и предложение дается тому, кто не тратит много, то вероятность того, что он ответит, меньше.
  • Продолжительность — это то, как долго длится предложение, учитывая большую свободу действий, когда им нужно использовать предложение, что может повысить скорость отклика. Когда предложение длится дольше, у клиента больше шансов, что он пойдет в Starbucks, чтобы совершить покупку.

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

Вывод

Отражение

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

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

Улучшения

  1. Наряду с предсказанием того, ответит ли клиент на предложение, мы можем предсказать, сколько клиент потратит на основе каждого предложения. Это совпадает с тем, как функция «расходы» влияет на модель.
  2. Работая в рекламной индустрии, мне часто приходилось проводить сегментацию клиентов. На основе данных, которые у нас есть, кроме 3 наборов данных, приведенных в этом проекте. Если бы у нас был доступ к другим приложениям или контенту, мы могли бы выполнить сегментацию и создать разные группы пользователей. Эти группы будут основываться на демографических характеристиках и/или содержании, которое интересует каждого клиента. Проще говоря, сегментация на основе продуктов и поведения. Это позволит Starbucks нацеливаться на конкретную аудиторию для достижения более высокой скорости отклика.