Использование логистической регрессии и ключевых финансовых показателей

Введение

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

Мы будем использовать эти данные, чтобы предсказать, объявила компания о банкротстве или нет.

Чтобы делать наши прогнозы, мы будем использовать модель логистической регрессии, реализованную с помощью scikit-learn на Python.

Предпосылки

Для этого урока вам необходимо скачать:

Я также рекомендую использовать Jupyter Notebook вместо IDE.

Github

Код и набор данных доступны на моем GitHub.

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

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

Логистическая регрессия - это алгоритм машинного обучения, который является основным методом решения задач двоичной классификации.

Он используется, когда зависимая переменная (т. Е. Целевая) является категориальной и двоичной.

Примером может быть прогноз, будет ли дождь (0) или нет (1) в данный день.

В нашем конкретном случае мы будем использовать эту модель, чтобы предсказать, является компания банкротом (0) или нет (1).

Набор данных

Набор данных содержит 7 переменных, 6 из которых являются ключевыми показателями финансового здоровья компании, а одна - «Класс», которая указывает, обанкротилась компания или нет.

Кроме того, вот что означает каждая аббревиатура:

  • B: банкрот
  • NB: не банкрот
  • N: отрицательный.
  • A: средний
  • P: положительный

Скачивание набора данных

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

Есть несколько способов сделать это. Мне особенно нравится хранить набор данных в репозитории GitHub проекта, над которым вы работаете, и скачивать его оттуда.

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

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

Здесь вы загружаете набор данных, создаете из него объект фрейма данных с именем df и распечатываете первые 5 строк фрейма данных и его форму.

Вот что это возвращает: фрейм данных, содержащий 250 строк и 7 столбцов.

Очистка данных

Здесь единственное, что вам нужно сделать, это искать нулевые значения в фрейме данных.

Для этого вы можете использовать функцию тепловой карты от seaborn.

Вот что возвращает эта функция:

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

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

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

Кодирование

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

У вас есть несколько способов кодирования переменных в зависимости от имеющихся данных.

Порядковое кодирование

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

Как всегда, одна картинка стоит 1000 слов:

Здесь «Отлично» будет закодировано как 3, «Хорошо» - как 2 и «Плохо» - как 1.

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

Наш набор данных

Scikit-Learn имеет встроенную функцию порядкового кодирования. Однако у него есть ограничения, так как он не позволяет вам указать конкретный порядок для переменных (например, «Отлично» можно закодировать как 1, а «Плохо» - как 3, что может помешать вашей модели правильно понять отношения между вашими переменными. ).

Поэтому мы будем использовать функцию .map () из pandas.

Вот как это сделать:

Сначала вы создаете порядковый словарь: N (отрицательный) связан с 1, A (средний) с 2 и P (положительный) с 3.

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

Когда вы используете функцию .head (), вы получаете следующее:

Здесь независимые переменные правильно закодированы. Все, что вам нужно сделать сейчас, это закодировать зависимую переменную (вашу цель).

Двоичное кодирование

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

В нашем случае нам нужно будет закодировать нашу целевую переменную, столбец Class и заменить B (Bankrupt) на 1 и NB (Not Bankrupt) на 0.

Вот как это сделать:

Разделение фрейма данных на X и Y

Теперь вам нужно разделить данные между независимыми переменными (X) и зависимыми переменными (Y).

После этого вам нужно разделить данные между данными обучения и тестирования.

Для этого вы используете встроенную функцию scikit-learn, train_test_split ().

Здесь я сохранил 80% данных для обучения модели и 20% для ее тестирования.

Подбор модели логистической регрессии

После этого все готово. Все, что вам нужно сделать, это построить свою модель и использовать .fit ().

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

Результаты

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

Матрица путаницы

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

Вот код для построения матрицы путаницы для данного классификатора:

Вот что показывает код:

Здесь мы видим, что наш классификатор допустил только 1 ошибку, когда он классифицировал 1 как 0, что означает, что он предсказывает отсутствие банкротства, пока это было банкротство.

Отчет о классификации

Scikit-learn имеет встроенную функцию для распечатки отчета о производительности данной модели классификации.

Вот что это распечатывает:

Здесь мы видим, что наша модель показала хорошие результаты при средней точности и запоминаемости 98%.

Вывод

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

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

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

Надеюсь, вам понравился этот урок!

Не стесняйтесь комментировать, что вы об этом думаете.

Кроме того, не забудьте подключиться к LinkedIn и GitHub, чтобы узнать больше о машинном обучении и науке о данных!

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