Введение

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

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

Можем ли мы предсказать, нажал ли человек на рекламу, основываясь на характеристиках (столбцах) набора данных рекламной компании?

Оглавление

  1. Задний план
  2. Исследование/очистка данных
  3. Построение модели
  4. Прогнозы и оценки
  5. Вывод

Задний план

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

В логистической регрессии зависимая переменная — это двоичная переменная, которая содержит данные, закодированные как «1» или «0», «истина» или «ложь» и «да» или «нет». Следовательно, бинарный. Проще говоря, это означает, что результат модели логистической регрессии может быть только в одной из двух форм, то есть «1» или «0» и т. д.

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

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

Пример 1 — обнаружение спама

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

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

Пример 2 — прогнозирование опухоли

Точно так же классификатор логистической регрессии можно использовать для определения того, является ли опухоль злокачественной (раковой) или доброкачественной (не раковой). Опять же, обратите внимание, что целевой класс является бинарной классификацией, т. е. может быть только одним из двух результатов. Либо у пациента есть опухоль, либо ее нет, 1 или 0.

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

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

На секунду подумайте, что мы пытаемся здесь предсказать. Исходя из этого, можно с уверенностью предположить, что эта переменная может иметь два возможных результата: 1 и 0. Если пользователь нажимает на объявление, сценарий может быть представлен 1, а если пользователь не нажимает на объявление, сценарий может быть представлено 0.

Исследование/очистка данных

Импортируйте библиотеки

Чтобы разработать нашу модель прогнозирования, нам нужно будет импортировать необходимые библиотеки Python:

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

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

Теперь нам нужно загрузить данные в переменную по нашему выбору. Давайте установим эту переменную в ad_data:

Теперь может быть хорошей идеей взглянуть на наш DataFrame:

Этот набор данных содержит следующие функции:

  • Время, проведенное на сайте в день: время, проведенное покупателем на сайте в минутах.
  • Возраст: возраст клиента в годах.
  • Доход от региона: в среднем. Доход географического района потребителя
  • Ежедневное использование Интернета: в среднем. минут в день потребитель находится в Интернете
  • Тема объявления: заголовок объявления.
  • Город: город потребителя.
  • Мужчина: независимо от того, был ли потребитель мужчиной, 1 представляет мужчину.
  • Страна: страна потребителя.
  • Временная метка: время, когда потребитель нажал на объявление или закрыл окно.
  • Нажатие на объявление: 0 или 1 означают нажатие на объявление, 1 – нажатие на объявление.

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

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

Давайте быстро оценим диапазоны, в которых изменяются наши переменные:

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

  • Средний возраст пользователя — 36 лет, самому молодому — 19, самому старшему — 61. Можно с уверенностью сделать вывод, что целевая аудитория сайта — взрослые.
  • Процент мужчин, посещающих веб-сайт, немного ниже, чем женщин, мы видим, что соотношение 52%:48% в пользу женщин. Следовательно, наша выборка хорошо представлена ​​обоими полами.
  • Доход пользователей в области колеблется от 13 996,50 до 79 484,80 долларов. Довольно большое распределение доходов. Это говорит нам о том, что посетители сайта принадлежат к разным социальным классам.
  • Ежедневное время, проводимое пользователями на сайте, колеблется от 32,6 до 91,4 минут. Вау, вроде популярный сайт!

Исследовательский анализ данных

Продолжим анализировать наши данные, на этот раз визуально.

Из рис. 3 можно сделать вывод, что переменная «Возраст» имеет нормальное распределение данных.

Давайте построим двумерный совместный график, чтобы определить взаимозависимость двух переменных, а именно «Доход от района» и «Возраст».

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

Давайте также построим двухмерный график плотности для дальнейшего анализа возрастной демографии. На этот раз мы увидим, как связаны «возраст» пользователя и «время, проведенное на сайте».

Из рис. 5 мы можем с уверенностью сказать, что молодые пользователи, как правило, проводят больше времени на веб-сайте. Объединив результаты рисунков 4 и 5, мы можем утверждать, что пользователи в возрасте от 20 до 40 лет могут быть основной целевой группой маркетинговой кампании.

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

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

Давайте также определим взаимозависимость «Ежедневного времени, проведенного на сайте» и «Ежедневного использования Интернета».

На рисунке выше мы видим, что формируются два кластера. Понятно, что пользователи, которые проводят больше времени в Интернете, как правило, проводят больше времени на веб-сайте.

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

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

А пока давайте начнем строить нашу модель машинного обучения!

Построение модели

Обучайте и тестируйте наборы данных

Теперь мы должны разделить наш набор данных на две отдельные части. Набор для обучения и набор для тестирования. Мы можем использовать scikit-learn для этого.

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

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

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

Давайте вернемся к нашей модели и продолжим определение наших входных и выходных переменных. Выше мы упомянули, как мы будем определять наши входные переменные, т. Е. X.Выходная переменная y будет представлять столбец «Нажатие на рекламу», поскольку это то, что пытается предсказать наша модель. Мы произвольно решим выделить 30% от общего объема данных для тестового набора.

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

Мы продолжим и импортируем логистическую регрессию из библиотеки sklearn.linear_model:

Следующие шаги будут включать инициализацию модели, а также ее подгонку к нашим наборам обучающих данных:

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

Прогнозы и оценки

Чтобы делать прогнозы, мы можем использовать .predict(, передать наши тестовые данные и сохранить результат в переменной с именем «предсказания»:

Итак, предсказание сделано. Однако вам может быть интересно, как мы узнаем, были ли наши прогнозы верными? Другими словами, как мы оцениваем производительность нашей модели?

Импортируя scikit-learn's «accuracy_score», мы можем быстро оценить точность нашей модели:

Logistic Regression Accuracy: 0.9233333333333333

Точность нашей модели логистической регрессии составляет 0,923 или 92,3%. Общепринятой практикой при визуализации точности модели классификации является использование матрицы путаницы.

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

  • Истинно положительный: вы/модель предсказали положительный результат, и это правда.
  • Истинно отрицательный: вы/модель предсказали отрицательный результат, и это правда.
  • Ложноположительный результат (ошибка 1-го типа): вы/модель предсказали положительный результат, но он оказался ложным.
  • Ложноотрицательный результат (ошибка типа 2): вы/модель предсказали отрицательный результат, и он оказался ложным.

Теперь давайте импортируем матрицу путаницы из sklearn_metrics и посмотрим, что у нас получилось:

Отлично, теперь мы можем сопоставить приведенную выше матрицу с рис. 8, чтобы понять, о чем она говорит:

  • 149 предположений нашей модели были истинно положительными, т.е. модель думала, что пользователи нажали на объявление (результат 1), и они действительно нажали на объявление
  • 128 предположений нашей модели были верно отрицательными, т.е. модель считала, что пользователи не нажимали на объявление (результат 0), и они действительно не нажимали на объявление
  • 15 предположений нашей модели были ложноотрицательными, т.е. модель думала, что пользователи не нажимали на объявление (результат 0), но на самом деле они нажимали на объявление
  • 8 предположений нашей модели были ложноположительными, т.е. модель думала, что пользователи нажали на объявление (результат 1), но на самом деле они не нажали на объявление

Наша матрица путаницы говорит нам, что общее количество точных прогнозов равно 149 + 128 = 277.. Она также говорит нам, что количество неправильных прогнозов равно 15 + 8 = 23..

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

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

Accuracy of model = (TP+TN)/(TP + TN + FP + FN)
                    (149+128)/(149+128+8+15)
                  =  0.9233333333 = 92.3%

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

Вывод

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

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

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

Спасибо за чтение!

Оставайтесь в безопасности и берегите себя.