Анализ данных о том, как клиенты взаимодействуют с кампаниями предложений, и определение того, какие из них выгодны для отправки предложений.

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

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

1. Помогает оценить, сколько общих скидок вы предложите своим клиентам в новой кампании предложений.

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

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

Весь код с анализом и моделированием доступен на GitHub.

О данных

Используемые данные представляют собой набор данных с смоделированными данными, которые имитируют поведение клиентов в мобильном приложении Starbucks Rewards. Было 3 файла JSON с различной информацией, которую можно использовать для анализа данных:

  1. portfolio.json: содержит информацию о предложениях, например продолжительность, сложность и приз предложения.
  2. profile.json: содержит демографические данные для каждого клиента, такие как возраст, пол и доход.
  3. transcript.json: содержит записи о транзакциях и предложениях взаимодействия клиентов.

Примеры этих наборов данных с кратким объяснением их соответствующих столбцов можно увидеть ниже.

  • вознаграждение: награда за выполнение предложения.
  • каналы: (список строк)
  • сложность: минимальная сумма, необходимая для завершения предложения.
  • продолжительность: время, в течение которого предложение остается открытым, в днях.
  • offer_type: тип предложения, т. е. BOGO, скидка, информационное.
  • id: идентификатор предложения.

  • пол: пол клиента.
  • age: возраст клиента.
  • id: идентификатор клиента.
  • became_member_on: дата, когда клиент создал учетную запись приложения.
  • доход: доход клиента.

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

Как клиенты взаимодействуют с каждым типом предложения?

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

В наборе данных есть три типа предложений: скидки, BOGO (купите одно — получите другое бесплатно) и информационные.

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

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

Какой тип предложения имеет более высокий средний чек на покупку?

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

Как мы видели в наборе данных transcript.json, каждый клиент может получить, просмотреть и завершить предложение в определенный период, представленный атрибутом «время». Кроме того, в наборе данных portfolio.json каждый тип предложения имеет атрибут «длительность». Таким образом, предполагается, что каждая покупка, совершенная между моментом получения покупателем предложения и истечением срока действия предложения, была вызвана предложением.

Итак, я сделал блок-схему с каждой покупкой, сделанной любым покупателем по типу предложения, связанному с объяснением выше. Покупки, совершенные вне периода действия предложения, были отнесены к категории «без предложения».

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

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

У скольких клиентов средний чек с предложениями выше, чем без предложений?

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

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

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

Из 16 578 клиентов в наборе данных только 20% в среднем тратят больше на покупки с предложениями, чем без предложений.

Выводы на данный момент

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

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

На какого клиента должны быть нацелены предложения?

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

  1. Выбор функций и разработка функций

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

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

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

  • qty_bogo_offer_received: количество полученных предложений BOGO.
  • qty_bogo_offer_viewed: количество просмотренных предложений BOGO.
  • max_difficulty_discount: максимальная сумма, необходимая для получения скидки.
  • mean_difficulty_bogo: средняя сложность предложений BOGO.
  • max_duration_informational:максимальная продолжительность информационных предложений.
  • mean_reward_bogo: среднее вознаграждение за выполнение предложений BOGO.
  • min_reward_discount: минимальное вознаграждение, получаемое за выполнение предложений о скидках.

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

Целевая характеристика либо «истинна», если покупатель просмотрел какое-либо предложение и выполнил его, либо «ложь», если нет.

2. Разделение данных

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

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

В этом проекте размер набора для обучения, проверки и тестирования составляет соответственно 11,475, 3,825 и 1,700.

3. Работа с отсутствующими данными

На обучающем наборе только два признака имеют пропущенные значения: пол и доход.

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

4. Обработка категориальных переменных

На обучающей выборке есть только один категориальный признак: пол.

В этой функции был применен метод One Hot Encoding, преобразующий каждую опцию категории в логический столбец.

5. Тестирование моделей машинного обучения

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

5.а. Дерево решений как базовая модель

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

Дерево решений получило оценку точности 0,838 и сбалансированную оценку точности 0,663. Матрицу относительной путаницы можно увидеть ниже.

5. б. Random Forest как первый претендент

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

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

Случайный лес получил оценку точности 0,846 и сбалансированную оценку точности 0,703. Матрицу относительной путаницы можно увидеть ниже.

5. в. Машины опорных векторов в качестве альтернативы

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

Лучшей моделью SVC оказалась модель с RBF ядра и C, равным 10. Она была обучена с помощью обучения и оценена на проверочном наборе.

Модель SVC получила оценку точности 0,845 и сбалансированную оценку точности 0,698. Матрицу относительной путаницы можно увидеть ниже.

6. Выбор лучшей модели и оценка ее на тестовом наборе

Обе модели, использующие случайный лес и машины опорных векторов, дали лучшие результаты, чем базовый уровень дерева решений. Среди двух лучших моделей модель Random Forest показала результаты немного лучше, чем модель SVC, поэтому модель была выбрана для использования в тестовом наборе.

Модель случайного леса получила оценку точности 0,842 и сбалансированную оценку точности 0,693. Матрицу относительной путаницы можно увидеть ниже.

Выводы

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

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

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

Следующие шаги

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

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

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

Посмотрите ссылку на GitHub этого проекта и попробуйте сами.