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

Авторы: Лопа Наяк, Аман Сангал

Описание Проекта

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

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

Задачи проекта

Импорт библиотек Python

Давайте импортируем все наши основные пакеты в нашу среду Python. В этой статье мы будем предоставлять фрагменты кода из нашего блокнота Jupyter. (Чтобы легко понять, как интегрировать Jupyter Notebook в вашу статью на Medium, перейдите по ссылке здесь)

Загрузка набора данных

Мы начинаем проект с загрузки набора данных в наш блокнот Jupyter. Мы загружаем набор данных в кадр данных pandas с именем df. Чтобы сохранить конфиденциальность данных, автор набора данных анонимизировал имена объектов. Мы назначаем буквы A-P в качестве имен функций. Чтобы быстро просмотреть набор данных, мы печатаем первые пять строк, используя df.head().

Знание данных

Чтобы лучше понять наши данные, мы используем удобные функции pandas df.info() и df.describe(). Давайте сначала распечатаем информацию о наборе данных, используя df.info().

На выходе мы получаем следующую информацию о данных: данные содержат в общей сложности 690 записей, то есть данные об утверждении или отклонении 690 заявок на кредитные карты, всего 16 столбцов, включая 15 переменных характеристик и одну выходную переменную. В выходном столбце Dtype мы видим несколько объектов с Dtype как объект (строковый или смешанный). Алгоритмы машинного обучения (ML) требуют, чтобы все переменные признаков имели числовой тип данных. Мы подробно обсудим этот вопрос позже в разделе анализа. Давайте более подробно рассмотрим наши данные с помощью df.describe(). Результат показан ниже:

df.describe() печатает суммарную статистику столбцов с числовым типом dtype. Из 4 функций 2 имеют диапазон от 0 до 28, 1 — от 2 до 67 и 1 — от 1017 до 100 000. Чтобы обеспечить сходимость минимизации функции стоимости в моделях машинного обучения, все переменные функций масштабируются с использованием различных методов масштабирования функций. Это подробно обсуждается в разделе анализа.

Обработка отсутствующих значений:

Нравится нам это или нет, но реальные данные беспорядочны. Очистка данных является важной частью каждого проекта по науке о данных, и в каждом наборе данных могут быть пропущенные значения для нескольких столбцов, соответствующих вводу данных. Прежде чем приступить к анализу данных и делать выводы, необходимо понять наличие пропущенных значений в нашем наборе данных. Отсутствующие значения в наборе данных могут обозначаться различными соглашениями (?, NaN…). Для столбца с dtype как int/float отсутствующие значения обозначаются NaN. Для столбцов с категориальными типами данных мы печатаем уникальные значения. Мы видим, что в наборе данных есть некоторые отсутствующие значения, и они помечены ‘?’.

  • Чтобы быть последовательными во всем наборе данных, мы заменяем все эти отсутствующие значения, обозначенные как ? с NaNиспользуя df.replace
df = df.replace('?',np.nan)

Мы использовали isnull().sum() для суммирования общего количества пропущенных значений в столбце.

Очень небольшая часть (0,61%) значений в нашем наборе данных отсутствует.Существует несколько возможных стратегий для работы с отсутствующими значениями. Для обсуждения пропущенных значений обратитесь к статьям 1, 2. В нашем случае мы будем использовать импутацию стратегию, чтобы исправить отсутствующие значения. Для отсутствующих значений в категориальных столбцах мы использовали метод pandas ffill, чтобы заменить отсутствующие значения значением из предыдущей строки. Для отсутствующих значений в числовых столбцах мы заменили их средним значением неотсутствующих значений в этом столбце. Теперь набор данных не содержит пропущенных значений.

Анализ

Задача прогнозирования того, будет ли одобрена или отклонена заявка на получение кредитной карты, на основе значений переменных признаков — это задача классификации машинного обучения под наблюдением. Нам нужно разделить набор данных на функции и целевые переменные. Следуя популярному соглашению, мы называем фрейм данных с переменными признаков как X, а кадр с целевой переменной — как y. Для реализации алгоритмов машинного обучения мы используем популярную библиотеку Python scikit-learn.

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

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

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

В частности, из 690 случаев 383 (55,5%) заявки были отклонены, а 307 (44,5%) заявок были одобрены. Это говорит нам о том, что наш набор данных имеет одинаковое представление обоих результатов нашего двоичного классификатора.

Используя sklearn train_test_split, мы разделили кадры данных функции (X) и целевого (y) на обучающий набор (70%) и тестовый набор (30%). Обучающий набор используется для построения модели классификации, а тестовый набор используется для оценки производительности модели.

xTrain, xTest, yTrain, yTest = train_test_split(X, y,
                                               test_size=0.30,
                                               random_state=2)

Классификаторы машинного обучения

Теперь у нас есть набор данных, готовый для создания классификатора на основе машинного обучения. Существует несколько моделей классификации, которые можно использовать для этой задачи. В этом анализе мы построим пять различных типов моделей классификации, а именно: логистическая регрессия, дерево решений, повышение градиента, XGBoost и K-ближайшие соседи (KNN). Это наиболее популярные модели, используемые для решения задач классификации. Все эти модели можно удобно реализовать с помощью пакета python scikit-learn, кроме модели XGBoost, которая реализуется с помощью пакета XGBoost.

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

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

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

б) Дерево решений

Вторая модель, которую мы пробуем для нашей задачи классификации, — это модель дерева решений. Мы использовали алгоритм sklearn DecisionTreeClassifier для построения модели. Мы находим оптимизированное значение гиперпараметра max_depth, изменяя его от 1 до 10 с шагом 1. Значение max_depth определяет, сколько раз дерево решений может разделяться. На графике зависимости точности от глубины для обучающих и тестовых данных мы видим, что для max_depth = 3 и обучающая, и тестовая точность одинаковы. Мы выбираем это значение для нашей модели, поскольку оно позволяет избежать моделей, которые являются либо переоснащенными, либо недостаточно приспособленными. Окончательный показатель точности теста нашей модели дерева решений составляет 85,5 %.

в) Усиление градиента

Третья модель, которую мы пробуем для нашей задачи классификации, — это Gradient Boost. Для повышения градиента мы используем значение гиперпараметра sklearn по умолчанию. Это дает нам точность 98,1 % и 87 % для обучающих и тестовых наборов данных соответственно.

г) XGBoost

Четвертая модель, которую мы пробуем для нашей задачи классификации, — это XGBoost. Мы построили эту модель, используя алгоритм XGBClassifier, предоставляемый пакетом XGBoost. Используя модель XGBoost со значениями по умолчанию для гиперпараметров, на тестовом наборе данных мы получили точность 87 %.

д) КНН

Пятая модель, которую мы пробуем для нашей задачи классификации, — это K-ближайшие соседи (KNN). Мы построили модель, используя алгоритм KNeighborsClassifier от sklearn. Мы оптимизировали гиперпараметр n_neighbors, перебирая диапазон значений от n=2 до n=20 и сравнивая показатели точности. Мы выбираем значение n_neighbors=10, так как оно позволяет избежать как переоснащения, так и недообучения. При наличии 10 соседей показатель точности тестовой выборки составляет 72%.

Вывод:

Мы испробовали пять различных моделей классификации для нашей задачи прогнозирования одобрения кредитных карт. Точность обучения и тестирования моделей представлена ​​на рисунке ниже. Мы получили лучшую точность тестовых данных (88%) от классификатора логистической регрессии. Небольшая разница в оценках точности обучения и теста указывает на отсутствие переобучения и недообучения.

Сводка

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

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

Авторы

[1] Лопамудра Наяк

[2] Аман Сангал