Акции — показывать или не показывать?

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

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

Влияние на бизнес

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

Обзор данных

  • У каждого клиента в данных есть некоторые скрытые черты, которые влияют на их модели покупок и связаны с их наблюдаемыми чертами. Люди производят различные события, включая получение предложений, открытие предложений и совершение покупок.
  • Клиенты: содержит характеристики каждого клиента в нашем наборе данных, включая возраст, пол, количество участников и доход.
  • Предложения: описывает различные функции каждого типа предложения. Существует 10 различных типов предложений, каждое из которых имеет свои собственные требования к тому, сколько денег следует потратить в течение определенного времени, чтобы получить определенное вознаграждение.
  • Существует три типа предложений, которые можно отправлять: купи-один-получи-один (BOGO), скидка и информационное. Предложение BOGO — это предложение, в котором вознаграждение равно требованию. Информационное предложение – это предложение, в котором нет требования/вознаграждения
  • События: записи, связанные с покупками, полученными предложениями, просмотренными предложениями и выполненными предложениями.

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

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

  1. пользователь выполнил предложение и просмотрел предложение ИЛИ
  2. пользователь не завершил предложение и не просмотрел предложение

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

Обработка и исследование данных

  • В таблице профилей есть строки с пропущенными значениями в столбцах пола и дохода. Мы решили исключить этих клиентов из нашего анализа.
  • Чтобы вычислить маркировку, описанную выше, нам нужно сопоставить события «предложение-получение» с событиями «предложение-просмотр» и «предложение-завершение». Это сложно, потому что клиент может получить одно и то же предложение несколько раз, и нам нужно устранять неоднозначность между ними при сопоставлении. Мы делаем это, перебирая события получения и используя их функцию продолжительности, чтобы решить, истек ли срок их действия или они активны. Более подробную информацию можно найти в репозитории github.
  • Далее мы рассмотрим распределение функций клиента. Из возрастного распределения ясно, что в столбце возраста есть выбросы, превышающие 100 лет. Мы решили не отбрасывать эти строки, скорее мы можем ожидать, что модель узнает, что они являются выбросами, и при необходимости обработает их по-другому.

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

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

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

Модели

Мы выбираем классификаторы на основе дерева и их ансамбли для моделирования проблемы классификации:

  1. Деревья решений
  2. Случайные леса
  3. Ада Буст
  4. Повышение градиента

Эти модели не требуют нормализации/масштабирования признаков, поэтому мы оставляем их как есть.

Чтобы оценить наши модели, мы будем использовать показатель F-бета (бета = 0,5), который придает большее значение точности, чем отзыву. Это связано с тем, что за отправку предложений неотвечающим клиентам взимается плата:

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

Обучение и тестирование

Мы оставляем 25% данных для тестирования, а остальные используем для обучения наших классификаторов. Чтобы лучше понять, как работают наши классификаторы, мы обучаем их с различными частями обучающего набора (2%, 20%, 100%) и наблюдаем влияние на показатели оценки.

Как мы видим, дерево решений и случайный лес переобучаются, поскольку они могут получить высокие баллы на тренировочном наборе, но не на тестовом наборе. В то время как AdaBoost и GradientBoosting лучше обобщают невидимые данные. AdaBoost превосходит GradientBoosting с точки зрения F-оценки (которая составляет ~ 0,55) и, следовательно, будет нашим окончательным выбором.

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

Мы выполняем поиск в сетке по Learning_rate и number_of_estimators, используемым классификатором AdaBoost, чтобы увидеть, можем ли мы улучшить производительность. Из нашей сетки наилучшие результаты получаются при Learning_rate, равном 0,9, и при n_estimators, равном 50. Но это не дает значительного улучшения F-показателя.

Важность функции

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

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

Вывод

Мы использовали контролируемый подход машинного обучения, чтобы попытаться ответить на вопрос, должны ли мы показывать конкретную рекламную акцию данному клиенту. Мы курировали заданные наборы данных для создания бинарных меток из событий и использовали функции, связанные с клиентом и предложением, в качестве входных данных для решения задачи обучения. Мы смогли обучить классификатор AdaBoost с F-оценкой 0,55. Случайный выбор метки с вероятностью 50–50 дает нам F-показатель 0,44, и, следовательно, мы рассматриваем это как улучшение на 22% по сравнению с базовым уровнем.

Что мы можем улучшить:

  • Мы можем обучить классификатор для каждого из различных рекламных предложений, чтобы повысить производительность, а не просто использовать их функции.
  • Мы можем попытаться провести различие между предложением, которое было просмотрено очень рано, и предложением, которое было просмотрено поздно, потому что это может по-разному повлиять на покупателя.
  • Например, предположим, что пользователь выполнил 8 долларов из 10 долларов, необходимых для завершения предложения, прежде чем увидеть предложение. И если предложение имеет вознаграждение в размере 4 долларов, то пользователь может быть вынужден пойти и потратить 2 доллара, чтобы получить большее вознаграждение. Это не должно позволять нам предвзято относиться к нашему ответу, говоря, что мы должны делать такие предложения этим людям.

Использованная литература:

Весь код, созданный в рамках этого проекта, можно найти здесь https://github.com/dileepkini/Purchase_Behavior.