Рекламные предложения Star Bucks

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

Этот проект направлен на изучение поведения клиентов Star Bucks разных категорий в отношении акционных предложений компании. Эти предложения представлены в 3 различных формах, а именно: «Купи один, получи один бесплатно» (BOGO), «Скидка» и «Информационные». Информационная — это просто передача рекламы клиентам, побуждающая их продолжать покровительствовать компании. Предложения могут быть отправлены по 4 различным каналам, а именно: электронная почта, мобильные устройства, Интернет и социальные сети. Ожидается анализ того, как реагируют на эти предложения клиенты разного возраста, пола и уровня дохода. В этой работе будут использоваться 3 набора данных, а именно: Portugal.json, profile.json и Transcribe.json.

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

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

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

Метрики

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

  • Прежде всего, входные данные были масштабированы с помощью MinMaxScaler с одной стороны.

scale_val_m = MinMaxScaler()

и StandardScaler с другой стороны

scale_val_s = Стандартный масштаб()

  • Оценки модели рассчитывались по-разному с использованием обоих масштабированных наборов данных:

lin_reg_score_m = lin_regress.score(X_test_m, y_test)

lin_reg_score_s = lin_regress.score(X_test_s, y_test)

log_reg_score_m = log_regress.score(X_test_m, y_test)

log_reg_score_s = log_regress.score(X_test_s, y_test)

dec_score_m = dec_tree.score(X_test_m, y_test)

dec_score_s = dec_tree.score(X_test_s, y_test)

rand_score_m = rand_forest.score(X_test_m, y_test)

rand_score_s = rand_forest.score(X_test_s, y_test)

  • Показатели точности также рассчитывались по-разному с использованием обоих масштабированных наборов данных:

dec_acc_score_m = показатель точности (y_test, pred_dec_m)

dec_acc_score_s = показатель точности (y_test, pred_dec_s)

rand_acc_score_m = показатель точности (y_test, pred_rand_m)

rand_acc_score_s = показатель точности (y_test, pred_rand_s)

  • Отчеты о классификации оценивались по-разному с использованием обоих масштабированных наборов данных:

log_reg_report_m = отчет_классификации (y_test, pred_log_m)

log_reg_report_s = отчет_классификации (y_test, pred_log_s)

dec_report_m = отчет_классификации (y_test, pred_dec_m)

dec_report_s = отчет_классификации (y_test, pred_dec_s)

rand_report_m = классификационный_отчет (y_test, pred_rand_m)

rand_report_s = классификационный_отчет (y_test, pred_rand_s)

Результаты всех этих оценок будут видны в разделе результатов.

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

Для данных портфеля ниже приведен весь фрейм данных.

Некоторую статистику по данным можно увидеть ниже.

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

Для данных профиля ниже приведен характер фрейма данных.

Некоторую статистику можно увидеть ниже.

Самым молодым клиентам 18 лет и их 70 человек, а самым старым клиентам 118 лет и 2175 человек. Также оказывается, что количество пропущенных значений пола и дохода составляет 2175 каждое. Следовательно, похоже, что этих клиентов в возрасте 118 лет не существует.

Ниже приведен фрагмент данных стенограммы.

Некоторая статистика данных стенограммы показана ниже.

Ниже приведены возможные ответы клиентов.

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

Визуализация данных

Ниже представлены данные портфеля.

Данные профиля можно увидеть ниже.

Данные стенограммы здесь ниже.

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

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

. портфолио

Различные каналы связи были бинаризованы, как показано ниже.

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

  • Профиль

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

  • Стенограмма

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

Фреймы данных стенограммы и портфолио затем были объединены в столбце «offer_id», поскольку они оказались общими.

Затем полученный фрейм данных был объединен с фреймом данных профиля по адресу «customer_id».

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

Выполнение

Были реализованы четыре различных алгоритма, а именно:

  • Линейная регрессия
  • Логистическая регрессия
  • Классификация дерева решений
  • Случайная классификация леса

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

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

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

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

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

Все эти метрики можно получить только из упражнения по классификации.

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

Уточнение

Есть несколько возможных усовершенствований, которые можно внести в машинные пакеты и алгоритмы. Однако у каждого есть свои плюсы и минусы. Я решил установить параметр «random_state» метода «train_test_split», чтобы модель всегда назначала одни и те же подмножества данных различным переменным.

Я также использовал 2 разных масштабатора — MinMaxScaler и StandardScaler — для масштабирования тренировочного подмножества. Каждое из этих масштабированных подмножеств использовалось для упражнения по машинному обучению.

Некоторые параметры и атрибуты алгоритмов машинного обучения также можно настроить по желанию. Некоторые из параметров и атрибутов включают «max_depth», «min_samples_split», «max_leaf_nodes», «n_jobs» и т. д. Возможности безграничны.

Оценка и проверка

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

  • Линейная регрессия

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

Оценки почти равны, но оценка с данными MinMaxScale незначительно выше.

  • Логистическая регрессия

Ниже приведены оценки модели:

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

  • Классификатор дерева решений

Показатели приведены ниже:

Здесь оценка модели совпадает с оценкой точности с использованием данных MinMaxScale; но они разные, используя данные StandardScaler.

  • Случайный лесной классификатор

С моделью классификатора случайного леса был получен следующий результат:

В отличие от классификатора дерева решений, здесь и оценка модели, и оценка точности равны.

В отчете о классификации «0» и «1» означают «предложение просмотрено» и «предложение выполнено» соответственно. Видно, что во всех случаях значения «точность», «отзыв» и «f1-оценка» для просмотренного предложения выше, чем для завершенного предложения. Это связано с тем, что значение поддержки (11 478) для просмотренного предложения больше, чем значение поддержки (6783) для завершенного предложения. Таким образом, можно сказать, что больше клиентов только просматривают предложения, не завершая их, чем те, кто одновременно просматривает предложения и завершает их.

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

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

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

Обоснование

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

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

Отражение

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

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

Улучшение

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

Любой заинтересованный человек, который хочет улучшить эту работу, приветствуется и может посетить репозиторий github по адресу https://github.com/Izziboi/StarBucks-Promotions-Offer.

Благодарности

Я очень благодарна Богу за то, что он дал мне возможность осуществить этот проект. Это была утомительная задача. Sklearn, numpy и другие документы были очень полезны. В заключение я хотел бы поблагодарить Моша Хамедани. Он мой первый учитель Python, и то, чему я научился у него, помогло мне справиться с этим проектом. Примите мою искреннюю благодарность.

Еще раз спасибо всем.

Рекомендации

  1. https://classroom.udacity.com/nanodegrees/nd025/parts/059c574b-e0d0-4fa7-8acd-47d9df9d53b6/modules/b0daab3f-5ffc-4ce1-af45-0945e87321ad/lessons/7420189a-47a9-43ad-9154-c 9c0b98fdce5 /концепции/a99ff15a-f9e3-48b1-a9b7-c62f99beeba5
  2. https://pandas.pydata.org/docs/user_guide/visualization.html
  3. https://pandas.pydata.org/docs/reference/api/pandas.concat.html
  4. https://numpy.org/doc/stable/reference/generated/numpy.around.html
  5. https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html
  6. https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html
  7. https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler
  8. https://muthu.co/understanding-the-classification-report-in-sklearn/#:~:text=A%20Classification%20report%20is%20used,classification%20report%20as%20показано%20ниже