Обзор

На современном высококонкурентном рынке компании постоянно ищут способы улучшить свои маркетинговые стратегии и увеличить свои доходы.

Один из способов сделать это — использовать методы науки о данных для прогнозирования поведения клиентов и соответствующей адаптации маркетинговых кампаний.

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

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

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

Ниже приведены 3 соответствующих набора данных, которые я унаследовал; портфолио, профиль и стенограмма. Каждый из наборов данных требует некоторой очистки для удаления значений NaN, фиктивных категориальных переменных и объединения дополнительных наборов данных.

portfolio.json

  • id (string) — идентификатор предложения
  • offer_type (string) — тип предложения, т. е. BOGO (Купи один, получи один бесплатно), скидка, информационное
  • difficulty (int) — минимальные затраты, необходимые для выполнения предложения.
  • reward (int) — награда за выполнение предложения
  • duration (int) — время открытия предложения, в днях
  • каналы (список строк)

profile.json

  • age (int) — возраст клиента
  • became_member_on (int) — дата, когда клиент создал аккаунт в приложении.
  • gender (str) — пол клиента (обратите внимание, что некоторые записи содержат «O» вместо «M» или «F»).
  • id (str) — идентификатор клиента
  • income (float) — доход клиента

Примечание. У большого количества пользователей есть возраст, который поместил бы их в топ-5 самых старых людей, когда-либо зарегистрированных (› 117 лет). Это очевидная ошибка, которая соответствует значениям Null/NaN, которые мы видим в других столбцах. Мы займемся этим позже.

транскрипт.json

  • event (str) — описание записи (т. е. транзакция, полученное предложение, просмотренное предложение и т. д.)
  • person (str) — идентификатор клиента
  • time (int) — время в часах с момента начала теста. Данные начинаются в момент времени t=0
  • значение — (словосочетание строк) — либо идентификатор предложения, либо сумма транзакции в зависимости от записи

Стратегия решения проблемы

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

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

Предоставление этих скидок неосведомленным пользователям приводит к потере дохода для Starbucks.

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

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

Обсуждение ожидаемого решения

Созданная мной модель будет оценщиком бинарной классификации. Он просто будет пытаться предсказать, будет ли предложение просмотрено (1) или не просмотрено (0).

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

Показатели с обоснованием

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

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

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

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

Предварительный анализ данных показал следующее:

  • Данные состояли из 17 000 пользователей с более чем 300 000 отдельных взаимодействий и 13 определяющих функций.
  • Большинство клиентов составляли мужчины (57%), но женщины приносили наибольший доход (49,7%, 3,97 млн ​​долларов).
  • Самыми популярными предложениями с точки зрения просмотра пользователями были bogo (купи одно, получи другое бесплатно).

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

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

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

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

Сначала я удалил пользователей, у которых были значения NaN, связанные с полом и доходом. Это привело к потере около 13% пользователей и их взаимодействий с набором данных. Это разумный первоначальный компромисс, учитывая большой размер набора данных; после очистки осталось около 15 000 пользователей.

В последнем наборе данных, который я использовал, многие столбцы были фиктивны с помощью функции get_dummies() в Pandas, а также удалены строки NaN (например, строки где возраст пользователя превышает 117 лет, также имели значения NaN и поэтому были удалены).

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

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

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

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

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

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

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

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

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

Логистическая регрессия – это алгоритм обучения с учителем, который используется для прогнозирования бинарного результата (1 / 0) с учетом набора независимых переменных. Он работает с использованием уравнения, представляющего линейную зависимость между входными переменными и логарифмом шансов исхода. Алгоритм использует входные данные для поиска наилучшего набора коэффициентов, которые минимизируют ошибку между прогнозируемыми и фактическими результатами. После того, как модель обучена, ее можно использовать для прогнозирования вероятности исхода с учетом новых входных данных.

K-ближайшие соседи (KNN) — это алгоритм обучения с учителем, который используется для задач классификации и регрессии. Он работает, находя k ближайших точек данных к заданной контрольной точке, а затем присваивает класс или значение большинства k ближайших точек данных контрольной точке. Алгоритм основан на предположении, что подобные вещи находятся близко друг к другу. «k» в KNN представляет количество ближайших соседей (‘n_neighbors’в param_grid ниже), которые алгоритм будет учитывать при прогнозировании. Выбор k может иметь большое влияние на производительность модели, большее k сделает модель более надежной, но менее чувствительной, тогда как меньшее k сделает модель более чувствительной, но более подверженной шуму.

Настройка гиперпараметров

Мне удалось точно настроить гиперпараметры с помощью StratifiedKFold и GridSearch внутри конвейера.

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

Метод StratifiedKFold гарантирует, что каждая складка данных в обучающем наборе содержит репрезентативную пропорцию различных меток классов. Это было особенно полезно при работе с несбалансированными наборами данных, когда целевая переменная имеет значительно больше выборок, чем другие. Для этого проекта количество пользователей, которые не просматривали предложения, по сравнению с теми, кто просматривал, было примерно 1:3. Это означает, что даже базовая модель прогнозирования может предположить, что пользователи будут просматривать предложение в 75% случаев, и это даст разумную оценку точности.

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

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

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

Осложнения

На пути создания окончательной модели я столкнулся с множеством сложностей.

Наиболее важным из них была утечка данных во время процесса подбора. Некоторое время это оставалось незамеченным и дало невероятно высокие показатели отзыва по всем направлениям (~ 99%).

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

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

Полученные результаты

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

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

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

Сравнительная таблица

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

Заключение

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

Результаты анализа показали, что логистическая регрессия показала наилучшие результаты с показателем полноты 92%, за которым следует классификатор случайного леса с показателем полноты 90 % и k -Ближайшие соседи с показателем отзыва 89%.

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

Проблемы и сферы интересов

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

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

Улучшение

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

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

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

Подтверждение

Starbucks и Udacity — Предоставление набора тестовых данных

Аналитика Vidhya Team. (2021). Утечка данных и ее влияние на производительность модели машинного обучения [сообщение в блоге]. Доступно по адресу: https://www.analyticsvidhya.com/blog/2021/07/data-leakage-and-its-effect-on-the-performance-of-an-ml-model/