Классификация проста с логистической регрессией SciKit

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

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

С точки зрения статистики, мы пытаемся предсказать двоичное категориальное значение:

  1. 1 для пользователей, которые завершат курс
  2. 0 для пользователей, которые выбывают из курса

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

В этой статье мы будем использовать pandas и Numpy для обработки данных по своему вкусу и matplotlib с seaborn для визуализации. Мы будем использовать пакет statsmodels, чтобы проиллюстрировать, что скрывается за логистической регрессией. Наконец, мы будем использовать SciKit для подбора модели логистической регрессии. Плюс в том, что с помощью SciKit очень легко построить модель. Однако он намеренно меньше озабочен выводными аспектами. (Для более контролируемого построения моделей с подробным обзором вероятностных мер и статистических тестов используйте другие пакеты Python, такие как statsmodels, или просто переключитесь на другие инструменты, такие как R.)

В следующем примере мы спрогнозируем, заработал ли кто-то более 50 тысяч долларов в 1996 году, основываясь на нескольких характеристиках, таких как возраст, род занятий, годы образования, родная страна, семейное положение, пол и т. Д. (Для вашей информации, согласно этому калькулятор на основе дефлятора, 50 тысяч долларов в 1996 году эквивалентны 74 тысячам долларов сегодня.) Вы можете загрузить набор данных для взрослых из репозитория машинного обучения UCI. Я сохранил наборы данных как «train.data» и «test.test», если вы хотите скопировать код, я предлагаю вам тоже.

Подготовка данных

Используя pandas, мы читаем файлы и присваиваем им правильные имена столбцов, поскольку в наборе данных нет заголовка столбца. Мы удалим порядковый столбец «education», потому что мы будем использовать непрерывную версию «education-num». (Мы могли бы вменять недостающие значения, но для простоты мы их просто удалим.)

Целевые переменные: мы кодируем целевое значение как 1 и 0 и отделяем цели от данных обучения.

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

О логистической регрессии

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



Используя пакет statsmodels, мы можем проиллюстрировать, как интерпретировать логистическую регрессию. Несмотря на то, что в итоговом выводе statsmodels содержится много чисел, мы хотим выделить только одно: коэффициент термина «возраст».

Как вы интерпретируете это 0,0395? Это означает, что для увеличения возраста на один год шансы заработать более 50 тысяч долларов увеличиваются на 0,0395. Можем ли мы превратить это в разногласия? Мы можем точно. Если мы возведем в степень это число, мы увидим, что каждый дополнительный год возраста увеличивает шансы на 1,04. Мы также можем возвести в степень модель и увидеть, что увеличение на один год увеличивает шансы на 1,04.

Наконец, вероятность того, что кто-то заработает более 50 тысяч долларов в возрасте 40 лет, составляет почти 24%. Мы можем рассчитать это, используя следующее преобразование:

Подгонка модели

С этого момента мы будем использовать SciKit для создания нашей модели. Мы преобразуем наши фреймы данных pandas в матрицы:

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

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

Установив параметр C в SciKit LassoRegression, мы можем контролировать важность члена регуляризации. Чем меньше C, тем сильнее регуляризация. Поскольку мы не знаем точное значение C, мы можем выполнить поиск по сетке, который использует перекрестную проверку для поиска оптимального C.

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

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

Мы помещаем наши коэффициенты и название коэффициента и визуализируем коэффициенты, которые имеют наибольшее положительное и отрицательное влияние на вероятность заработка более 50 тыс. Долларов в год.

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

Подведение итогов

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

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