ВВЕДЕНИЕ

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

В настоящее время данные генерируются в очень больших масштабах, и эти данные могут способствовать успеху бизнеса за счет понимания потребностей клиентов. Этот проект был выполнен в качестве задачи Capstone. Набор данных представляет собой моделирование поведения клиентов в мобильном приложении Starbucks Rewards. Периодически Starbucks рассылает пользователям предложения, которые могут быть рекламой, скидками или купив один, получи второй бесплатно (BOGO). Важной характеристикой этого набора данных является то, что не все пользователи получают одно и то же предложение.

Отреагирует ли Заказчик на предложение?

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

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

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

3. Сравните производительность моделей логистической регрессии, случайного леса и градиентного бустинга.

4. Точная настройка параметров модели с наибольшей точностью и оценкой F1.

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

Цель здесь состоит в том, чтобы предварительно обработать данные и найти в них полезную информацию.

Данные — портфель предложений

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

  1. Разделите переменную канала с несколькими метками, используя scikit-learn MultiLabelBinarizer
  2. Переименуйте переменную id в offerid, чтобы отличить ее от идентификатора клиента.
  3. Горячее кодирование категориальной переменной offer_type

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

  • Столбец «id» переименован в «offerid».
  • «Продолжительность» переименована в «длительность дней».
  • Удалены символы подчеркивания в именах столбцов.
  • Горячее кодирование столбцов «offer_type» и «channels»

Данные — Профиль клиента

Эти данные описывают демографию клиентов. Во время EDA были замечены следующие идеи:

  • Столбцы пола и дохода содержат примерно 13% отсутствующих данных.
  • Пол клиента не указан для ~1,5% данных
  • Месяц, в течение которого клиент стал участником программы вознаграждений, приблизительно одинаков.
  • Возраст клиента составляет 118 лет, если доход клиента отсутствует.
  • Год, когда клиент стал участником программы вознаграждений, распределяется неравномерно.

Для очистки данных был реализован следующий процесс:

  • Удалены клиенты с отсутствующими данными о доходах
  • Удалены профили клиентов, в которых отсутствовал атрибут пола.
  • Столбец «id» переименован в «customerid».
  • преобразовал столбец became_member_on в объект даты и времени
  • Год начала членства клиента с горячим кодированием и возрастной диапазон клиентов

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

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

В-третьих, я построил график распределения клиентов по возрастным группам. Эти результаты показывают, что средний возраст клиентов составляет от 50 до 60 лет.

Данные — транзакции клиентов

Эти данные описывают модели покупок клиентов. Из EDA были сделаны следующие выводы:

  • Необходимо разделить предложение клиента и данные о покупке
  • 45% событий — это покупки клиентов, а 55% событий описывают предложения клиентов.

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

  • Столбец «person» переименован в «customerid».
  • Удалены идентификаторы клиентов, которых нет в профиле клиента.
  • Столбец «time» переименован в «timedays».
  • Создан DataFrame, описывающий предложения клиентов. Это включало создание столбца offerid, анализ типа события предложения и одно горячее кодирование типов событий предложения клиента.

Объединить все данные

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

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

а. Инициализировать текущий идентификатор предложения

б. Посмотрите описание текущего предложения

в. Инициализировать период времени, когда предложение действительно

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

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

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

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

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

г. Инициализировать словарь, описывающий текущее предложение клиента

час Обновить список словарей, описывающих эффективность предложений для конкретного клиента

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

Делать прогнозы

Для реализации модели прогнозирования были выполнены следующие шаги:

  • Разделите объединенные данные на набор для обучения и тестирования.
  • Сделал наивную модель. Точность этой модели составляет 0,47, а показатель f-1 — 0,64.

Этот результат говорит о том, что распределение предложений в смоделированных данных мобильного приложения Starbucks примерно однородно. Кроме того, вероятность успеха предложения клиента колеблется от ~ 6% до 75%, причем два наименее успешных предложения являются информационными.

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

Мы можем ясно видеть, что модель Random Forest дает очень хорошие прогнозы по сравнению с другими моделями.

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

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

Вывод

Проблема заключалась в том, чтобы построить модель, предсказывающую, отреагирует ли покупатель на предложение. Анализ показывает, что модель случайного леса имеет наилучшую точность обучающих данных и показатель F1. Полученная модель случайного леса имеет точность обучающих данных 0,768 и показатель F1 0,760. Точность набора тестовых данных, равная 0,734, и показатель F1, равный 0,723, предполагает, что модель случайного леса не соответствовала обучающим данным.

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

  1. Предложить награду
  2. Продолжительность предложения
  3. Сложность предложения (сколько денег клиент должен потратить, чтобы завершить предложение)
  4. Доход клиента
  5. Создавал ли клиент учетную запись в мобильном приложении Starbucks Rewards в 2018 году.

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

ПРИМЕЧАНИЕ. Код этого проекта можно найти в следующем репозитории: Github.