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

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

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

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

Исследование данных

Целью моего исследования и визуализации файлов данных Starbucks Capstone Challenge является определение этапов предварительной обработки и поиск закономерностей.

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

Starbucks Capstone Challenge предлагает данные о портфеле, обобщающие предложения клиентов.

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

Данные профиля клиента

Данные профиля клиента Starbucks Capstone Challenge описывают демографические данные клиентов. Есть пять характеристик этих данных, которые я наблюдал во время своего исследовательского анализа данных. Во-первых, примерно 13% данных по полу и доходу отсутствуют. Во-вторых, возраст клиента составляет 118 лет, когда отсутствует доход клиента (т.е. NaN). В-третьих, пол клиента не указан для ~ 1,5% данных. В-четвертых, год, когда клиент стал участником программы вознаграждений, распределяется неравномерно. Это говорит о том, что эта функция может быть полезным отличием клиентов. В-пятых, месяц, когда клиент стал участником программы вознаграждения, примерно одинаков. Следовательно, эта функция, вероятно, бесполезна для прогнозирования того, было ли предложение клиента успешным.

Чтобы очистить данные профиля клиента, я заменил столбец «Значения NaN в доходе» на «Среднее значение», а «Отсутствующие значения пола» - на «NA». Я упустил недостающее значение при создании наборов данных для обучения и тестирования.

Данные о транзакциях клиента

Данные о транзакциях клиентов Starbucks Capstone Challenge описывают покупки клиентов, а также время получения, просмотра и выполнения предложения.

Чтобы очистить данные транзакции, я использовал цикл for и перебирал столбец «значение», поскольку он содержит словарь и находит ключи. После итерации по столбцу «значение» я обнаружил следующие ключи: [«идентификатор предложения», «сумма», «вознаграждение»]. Следующим моим шагом было поместить каждый ключ в отдельный столбец и удалить столбец «значение».

Анализ данных

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

Во-вторых, я попытался найти offer_types, к которым относятся эти рекламные акции, и общее количество транзакций.

Приведенный выше график ясно показывает, что BOGO (купи один, получи один бесплатно) является наиболее часто используемым, за ним следует скидка с небольшой разницей. Хотя информационный занял третье место с разницей в ~ 40000, это огромный разрыв.

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

График выше показывает, что большинство клиентов - это взрослые от 50 до 65 лет, за которыми следуют пожилые люди.

Теперь проверим профили по гендерным группам.

Покупатели-мужчины больше, чем покупатели-женщины.

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

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

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

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

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

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

Поскольку у нас есть простая проблема классификации, я буду использовать точность для оценки своих моделей. Мы хотим увидеть, насколько хороша наша модель, увидев количество правильных прогнозов по сравнению с общим количеством прогнозов. Почему выбирают точность? Сначала давайте определим точность, соотношение правильно обозначенных предметов ко всему пулу предметов. Кроме того, точность отвечает на такие вопросы, как: Сколько учеников мы правильно пометили из всех учеников? Это похоже на нашу ситуацию, правда? потому что мы хотим видеть, сколько клиентов используют предложения Starbucks. Кроме того, точность = (TP + TN) / (TP + FP + FN + TN). Не забывайте, что это простая задача классификации, поэтому это мое мнение и рассуждения о том, почему использовать самый простой (точность).

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

особенности будут:

  • Мероприятие. (Будет заменено с категориального на числовое)
  • Время. (нормализовано)
  • Offer_id. (Будет заменено с категориального на числовое)
  • Количество. (нормализовано)
  • Награда. (нормализовано)
  • Возрастная группа. (Будет заменено с категориального на числовое)
  • Пол. (Будет заменено с категориального на числовое).
  • Доход. (нормализовано)

В то время как нашей целью будет тип предложения.

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

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

сравнить характеристики модели

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

Основываясь на приведенной выше таблице, мы можем видеть, что модели достигли 100% точности в наборах данных для обучения и тестирования на 4 моделях. Чтобы избежать переобучения, я выберу Логистическая регрессия, поскольку она дает хорошие результаты 80,5% при обучении и 92,8% при тестировании наборов данных. Логистическая регрессия здесь лучше использовать, поскольку у нас мало биномиальных результатов. Здесь также хорошо, потому что у нас есть приличный объем данных для работы. Теперь давайте улучшим нашу модель, чтобы добиться лучших результатов.

Улучшения модели

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

Параметры, которые я использовал для настройки модели

Заключение

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

Улучшения

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

Получите код здесь