Использование машинного обучения для поиска предложений, которые понравятся клиентам.
Понимание бизнеса
В отличие от крестного отца, приведенного в заголовке, у современного бизнеса есть более перспективные методы убеждения клиентов: сила больших наборов данных и статистических методов, позволяющих делать из них выводы. Более известный как машинное обучение. Starbucks — международная сеть кофеен, торгующих напитками, едой и товарами. Приложение Starbucks — важный канал прямого маркетинга, который помогает увеличить продажи, рассылая предложения. Знание того, как группы клиентов реагируют на различные виды предложений, сделало бы процесс намного более эффективным и увеличило бы доход. В контексте Udacity Data Science Nanodegree Starbucks предоставила набор данных смоделированных данных о клиентах и транзакциях о предложениях, отправленных через их приложение. В следующей статье я покажу, как можно использовать данные для прогнозирования выполнения предложений (Jupyter Notebook на GitHub).
Предоставленные данные состоят из трех файлов. Файл портфолио содержит идентификаторы предложений и метаданные о каждом предложении (длительность, вознаграждение и тип предложения)
В файле профиля мы находим демографические данные для каждого клиента, а файлы расшифровки содержат записи о транзакциях, полученных предложениях, просмотренных предложениях. , и предложения завершены.
Обзор схемы данных и ее переменных:
portfolio.json
id (string) — идентификатор предложения
offer_type (string) — тип предложения, т. е. BOGO, скидка, информационная
сложность (int) — минимально необходимый потратить на выполнение предложения
вознаграждение (целое число) — вознаграждение за выполнение предложения
продолжительность (целое число) — время, в течение которого предложение будет открыто, в днях
каналы (список строк)
profile.json
age (int) — возраст клиента
стал_member_on (int) — дата, когда клиент создал аккаунт в приложении
gender (str) — пол пользователя the customer
id (str) — id клиента
profit (float) — доход клиента
transcript.json
event (str) — описание записи (например, транзакция, полученное предложение, просмотренное предложение)
person (str) — идентификатор клиента
time (int) — время в часах с момента начала испытания. Данные начинаются в момент времени t=0
value — (dict of strings) — либо идентификатор предложения, либо сумма транзакции в зависимости от записи
Клиент мог получить три типа предложений — BOGO купи одно и получи одно бесплатно, скидку, если он потратит определенную сумму или просто информационное предложение. Помимо транзакций, регистрируются три других типа событий: «предложение получено», «предложение просмотрено» и «предложение выполнено». Но эти данные имеют подводный камень: если клиент выполняет все условия предложения, будет событие «предложение завершено», даже если клиент не просматривал предложение в приложении, что следует учитывать при подготовке данных.
Очистка данных/подготовка данных
В данных профиля отсутствует значение — у 2 175 клиентов (из 17 000) отсутствует информация о возрасте, доходе и поле. Поскольку они не предоставляют никаких демографических данных, я решил исключить их из набора данных.
Чтобы проанализировать данные, я построил аналитическую таблицу, в которой предложение назначается транзакции, если выполняются все условия: Клиент просмотрели предложение и
потратили необходимую сумму в течение срока действия предложения. После очистки данных мы можем взглянуть на некоторые первые результаты. Всего клиентам было отправлено 66 501 предложение, из которых 18 577 были выполнены. Это коэффициент завершения предложения 27,93%. Как вы можете видеть на рисунке ниже, коэффициенты предложения сильно различаются в зависимости от типа и вознаграждения. За тестовый период клиенты тратят около 1,7 млн долларов. Около 25% дохода может быть отнесено к офферу.
Прежде чем мы сможем применить какой-либо алгоритм машинного обучения, набор данных нуждается в дальнейшем преобразовании.
Тип предложения преобразуется из символьного в целочисленное значение, закодированное горячим способом, с отдельным столбцом для каждого значения.
Из столбца стал_членом мы можем извлечь год, а также сделать одно горячее кодирование для новой функции.
Когда все преобразования завершены, данные разделяются на обучающие и тестовые данные.
Алгоритмы
Прогнозирование успеха клиентов по завершении предложения является проблемой классификации. Я выбрал два типа алгоритмов дерева решений для этой задачи:
- Random Forrest (создает множество деревьев решений и строит среднее значение всех прогнозов)
- Gradient Boosting Tree (также основано на нескольких деревьях решений, но результат вычисляется в итеративном подходе)
Random forrest достигает точности 72%, а Gradient Boosting — только 70%. Оба метода показывают стабильные результаты при применении к тестовым данным, что означает, что алгоритмы не были переобучены на обучающем наборе данных.
Выводы
Как показывают результаты, разработанная модель машинного обучения может помочь в принятии более эффективных решений о том, какое предложение подходит какому клиенту. Тем не менее, точность 72% оставляет потенциал для дальнейшего улучшения. Большие наборы данных или учет большего количества функций (например, предпочтения клиентов в отношении продуктов) могут помочь улучшить результаты.