Проект Capstone для специалиста по обработке и анализу данных Udacity Nanodegree.

1. Введение

Иметь хороший продукт в нужное время по лучшей цене. Это секретная формула успеха Starbucks. В 32 660 магазинах Starbucks в более чем 80 странах ежедневно продается более 4 миллионов кофейных напитков. Однако как этой американской транснациональной корпорации удается с высокой точностью управлять качеством, ценой и временем?

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

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

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

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

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

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

Б. Показатели

Чтобы определить лучшую модель машинного обучения для создания механизма рекомендаций, в качестве метрики для сравнения использовалась среднеквадратическая ошибка (MSE). Разделив всю базу данных на обучающий и тестовый наборы данных и внедрив перекрестную проверку KFold, будут оценены три модели. Модель, которая может гарантировать самую низкую MSE, будет выбрана как наиболее подходящая модель для построения механизма рекомендаций.

2. Исследование данных и визуализация

Данные, доступные для анализа, структурированы в три разных DataFrames, а именно:

  1. Портфолио — набор данных, описывающий характеристики каждого типа предложения, включая его тип, сложность и продолжительность.
  2. Профиль – набор данных, содержащий информацию о демографических данных клиентов, включая возраст, пол, доход и дату создания учетной записи Starbucks Rewards.
  3. Транскрипт — набор данных, содержащий все случаи совершения покупки покупателем. Более того, он указывает, когда клиент просмотрел, получил и выполнил предложение.

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

А. Набор данных портфолио

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

Как показано на графике ниже, десять видов предложений делятся на три типа: выгодные, дисконтные и информационные. Можно отметить, что существует 4 вида рекламно-скидочных предложений и всего 2 информационных предложения.

Сложность, продолжительность и вознаграждение каждого типа предложения показаны на графике ниже. Можно отметить, что сложность и вознаграждение «бого»-предложений — также известных как «buy one и get one' — одинаковые. Кроме того, «информационные» предложения имеют нулевую сложность и вознаграждение. Примечательно, что одно из предложений скидок имеет наибольшую сложность, а это означает, что клиент должен потратить не менее 20 $, чтобы получить скидку 5 $.

B. Набор данных профиля

В наборе данных профиля клиента много пропущенных значений, особенно в отношении пола и дохода клиента, как показано в таблице и на графике ниже. Более того, можно отметить, что некоторые клиенты указали возраст 118 лет, что не соответствует действительности. И наоборот, столбец «became_member_on» не имеет пропущенных значений. Следовательно, этот набор данных необходимо очистить перед использованием в моделях машинного обучения.

C. Набор данных расшифровки

Набор данных расшифровки содержит все исторические данные о том, как клиенты взаимодействуют с предложением. Набор данных состоит из 17000 уникальных клиентов, идентифицированных идентификационным номером. Пример истории клиента (например, client_id = «0009655768c64bdeb2e877511632db8f») показан на рисунке ниже.

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

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

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

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

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

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

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

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

Другими словами, NR рассчитывается как разница между общим доходом (I) и общими расходами, связанными с этим предложением (R+C). Общий доход (I) представляет собой общую сумму денег, потраченных клиентом между двумя предложениями. Считается, что визуализация предложения повлияет на дальнейшее поведение клиента вплоть до получения другого предложения. Следовательно, общая сумма денег, потраченных в период между визуализацией предложения и получением другого предложения, определяет общий доход (I).

С другой стороны, общий расход предложения представляет собой сумму стоимости рекламы (C) и вознаграждения, полученного клиентом (R). Вознаграждение вычитается из чистого дохода (NR) только в том случае, если клиент выполнил (Delta_completed) предложение; в противном случае Starbucks не нужно давать вознаграждение (R) клиенту. Примечательно, что в этом исследовании стоимость рекламы составляет 0,1 доллара.

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

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

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

II. Предварительная обработка набора данных профиля

Предварительная обработка набора данных профиля заключается в удалении всех строк, содержащих нулевые значения (NaN или None) или возраст, равный 118. После очистки данных весь набор данных содержит 14 825 полных профилей клиентов из 17 000 из исходного набора данных. Распределение профиля клиентов по полу показано на графике ниже. Можно отметить, что мужчин в наборе данных примерно на 38% больше, чем женщин. Кроме того, очень немногие пользователи указали «другой» в качестве пола.

Распределение доходов клиентов по полу можно представить на графике ниже. Можно отметить, что средний доход женщины примерно на 16% выше, чем у мужчины.

Кроме того, женщины-клиенты старше мужчин в среднем на 3 года, как видно из графика ниже.

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

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

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

Предварительно обработанные данные расшифровки выглядят так, как показано на рисунке ниже, где client_id повторяется столько раз, сколько было получено предложений. Аналогично, каждое полученное предложение связано с двумя логическими переменными, указывающими, было ли предложение просмотрено и завершено, т. е. is_offer_viewed и is_offer_completed соответственно. Кроме того, каждое предложение связано с соответствующим чистым доходом (столбец net_revenue).

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

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

На гистограмме ниже показан средний чистый доход на одно предложение. Можно заметить, что 10-е предложение (т. е. fafdcd668e3743c1bb461111dcafc2a4), которое является предложением со скидкой, имеет самый высокий чистый доход, составляющий около 30 долларов. Напротив, первое предложение (т. е. 0b1e1539f2cc45b7b9fa7c272da2e1d7), которое является bogo-предложением, имеет самый низкий чистый доход среди всех возможных предложений Starbucks.

Б. Осуществление

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

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

Таким образом, с помощью фрагмента кода, приведенного ниже, очищенный портфель был объединен с очищенным фреймом данных стенограммы (df_client_offer) и очищенным профилем клиента (portfolio_clean).

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

Следовательно, объединив три кадра данных, можно получить некоторую ключевую статистику всех входных данных, как показано в таблице ниже. Таким образом, было просмотрено 78% предложений, выполнено только 52%. Средний чистый доход составляет около 19 $/чел. Предложения отправляются большую часть времени по электронной почте и мобильному телефону. Средний возраст клиентов Starbucks — 54 года, и большинство из них — мужчины.

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

  1. Базовая модель (BM): простая модель машинного обучения для прогнозирования чистого дохода с учетом только пола пользователя (Ж, М, ​​О) в качестве входных данных.
  2. Модель профиля клиента (CM): модель машинного обучения для прогнозирования чистого дохода с учетом полного профиля клиента в качестве входных данных (пол, возраст, доход и client_duration_days).
  3. Модель профиля клиента и канала предложения (COM): модель машинного обучения для прогнозирования чистого дохода с учетом полного профиля клиента (пол, возраст, доход и client_duration_days) и канала связи предложения (электронная почта, мобильная связь). , социальные и веб-сайты) в качестве входных данных.

Таким образом, три модели машинного обучения реализуют регрессор случайного леса или линейную регрессию, которые отличаются только количеством входных признаков. Из двух показанных ниже функций были реализованы три модели. Различия между тремя моделями (BM, CM и COM) заключаются в num_features, которые оцениваются в 3, 6 и 10 соответственно.

Примечательно, что базовая модель предназначена для проверки того, может ли модель оценить хотя бы средний чистый доход с разбивкой по полу. Это упрощенная модель, которая позволяет нам проверить, правильно ли работает модель машинного обучения. Следовательно, среднеквадратическая ошибка (MSE) базовой модели будет сравниваться с двумя другими моделями (CM и COM), чтобы определить наилучшую из них. Наиболее подходящей моделью линейной регрессии является модель, которая может гарантировать самую низкую MSE.

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

я. Базовая модель (BM)

Чтобы проверить, правильно ли работает предсказанная модель, будет оцениваться простая модель, которая использует только пол клиента (т.е. F, M и O) в качестве признака. Этот код реализован функцией compare_baseline_with_average_per_gender, доступной в этом репозитории GitHub. Оценка состоит из сравнения прогнозируемого значения — названного Прогнозирование чистого дохода на приведенных ниже графиках — для трех возможных входных значений (т. е. [1 0 0], [0 1 0] и [0 0 1]) с классифицированным значением. средний чистый доход всего набора данных.

Основываясь на результатах, показанных на трех графиках выше, базовая прогнозируемая модель может оценить средний чистый доход участников с ошибкой менее 6% для женщин и мужчин и менее 32% для других полов. Точность прогноза «Другой» низкая, поскольку количество людей, указавших «Другой» в качестве пола, очень мало (менее 2% клиентов).

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

Как показано в приведенном ниже коде, Регрессор случайного леса был настроен с помощью GridSearch, как показано в приведенном ниже коде:

Параметры n_estimentors, min_samples_split и boostrap были настроены для настройки модели. В результате ниже показаны оптимальные параметры для настройки каждой из десяти моделей RandomForestRegressor. Поэтому в большинстве случаев рекомендуется активировать начальную загрузку, min_samples_split стоит либо 2, либо 4, а n_estimators варьируется от 10 до 30.

Более того, в процессе обучения и проверки модели использовалась перекрестная проверка с использованием 5 тысячных раз, чтобы проверить, есть ли в модели систематическая ошибка. Перекрестная проверка реализуется с помощью приведенного ниже кода. Это позволяет нам проверить, является ли модель переоснащением или недообучением. Анализируя результаты перекрестной проверки выше, можно отметить, что MSE значительно варьируется для каждого Kfold, что указывает либо на несбалансированность набора данных, либо на недостаточное соответствие модели.

II. Модель профиля клиента (CM)

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

  • Возраст клиента
  • Доход клиента
  • Количество дней, в течение которых пользователь является клиентом
  • Пол клиента (Ж, М и О)

MSE для каждой из этих моделей показан на графике ниже. Важно подчеркнуть, что на этапах обучения и проверки модели также использовались перекрестная проверка GridSearch и KFold. Показанная на этом графике MSE представляет собой среднее значение тренировки 5 KFold. Для простоты в этом сообщении блога не будут показаны результаты MSE на итерацию Kfold и результаты GridSearch. Однако полный анализ доступен в моем репозитории GitHub.

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

III. Модель профиля клиента и канала предложения (COM)

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

4. Результаты и обсуждение

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

A. Сравнение трех моделей линейной регрессии

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

На приведенном выше графике можно заметить, что Модель профиля клиента (CM) и Модель предложения клиента (COM) с использованием линейной регрессии могут обеспечить самый низкий средний показатель MSE. Важно подчеркнуть, что средняя MSE является средней среди десяти предложений. На приведенном ниже графике представлены значения MSE, полученные для каждого предложения и каждой модели машинного обучения.

На этом графике можно заметить, что модель CM (раздел 3.B) и COM (раздел 3.C) привели к очень похожей среднеквадратической ошибке, которая ниже, чем у BM (раздел 3.A). Следовательно, это указывает на то, что канал предложения (социальные сети, Интернет, электронная почта и т. д.) не влияет на оценку чистого дохода. Чтобы упростить модель линейной регрессии, лучше использовать модель CM для построения механизма рекомендаций, поскольку это более простая модель машинного обучения.

B. Создание механизма рекомендаций

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

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

Предложение в ранге №1:

Из приведенного выше графика можно заметить, что предложение со скидкой со сложностью 10, длительностью 10 и вознаграждением 2 (т. е. ID = ‘fafdcd668e3743c1bb461111dcafc2a4’) является наиболее подходящим предложением для отправки в большинстве случаев. Разработанный движок рекомендовал данное предложение более чем 12000 из 14825 клиентов.

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

Предложение в ранге #2:

Второе лучшее предложение для отправки клиентам также является предложением скидки. Однако это предложение со скидкой со сложностью 7, продолжительностью 7 и наградой 3.

Предложение в ранге №3:

Третья позиция более разнообразна, что видно на графике ниже. Третьим лучшим предложением часто является бого-предложение с длительностью 5, сложностью 5 и вознаграждением 5 (т. е. ID = f19421c1d4aa40978ebb69ca19b0e20d). Большинство клиентов, которые воспользуются этим предложением, - женщины 78 лет.

5. Заключение

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

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

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

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

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

После запуска движка через 14825 профилей клиентов можно заметить, что есть некоторые предложения, которые считаются «бестселлерами», такие как предложение со скидкой со сложностью 10, продолжительностью 10 и вознаграждением 2.

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