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

Оглавление:

1. Определение проблемы.

2. Анализ данных.

3. Заключительное замечание EDA.

4. Конвейер предварительной обработки.

5. Построение моделей машинного обучения.

6. Заключительные замечания.

Определение проблемы

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

Цель: здесь, с помощью сведений о заявителе, мы сможем предсказать, будет ли одобрен кредит заявителя на основе сведений, представленных в наборе данных.

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

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

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

3. Классификатор случайного леса.

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

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

Анализ данных

Описание набора данных:

Существует только 1 набор данных, который необходимо обучить и протестировать с помощью фактической целевой переменной, такой как «Статус кредита». Файл обучения будет использоваться для обучения модели, т.е. модель будет учиться на этом файле. Он содержит все независимые переменные и целевую переменную. Размер тренировочного набора: 614 строк и 13 столбцов.

Прочитайте файл Excel и преобразуйте его во фрейм данных:

Loan_ID: идентификатор кредита для заявителя, подающего заявку на кредит

Пол: Пол заявителя

Женат: семейное положение заявителя

Иждивенцы: Количество иждивенцев заявителя

Образование: статус образования заявителя (высшее/неполное высшее)

Self_Employed: Заявитель работает не по найму или нет

ApplicantIncome: Доход заявителя

Доход созаявителя: Доход созаявителя

LoanAmount: Сумма взятого кредита

Loan_Amount_Term: Срок кредита в месяцах

Credit_History: Предыдущие рекомендации кандидата по кредитной истории.

Property_Area: городская, полугородская или сельская местность.

Loan_Status: статус одобрения кредита (целевая переменная)

  • У нас есть 614 строк и 13 столбцов в наборе данных.
  • У нас есть максимальные столбцы как категориальные, включая метки, и немногие из них являются целыми.

понимание данных на высоком уровне. Проверка статистики набора данных:

Результаты:

· Для некоторых характеристик стандартное отклонение далеко от среднего, возможно, это связано с тем, что данные более разбросаны.

· Созаявитель имеет минимальный нулевой доход.

· Максимальный кредит применяется 700 с минимальным сроком 480.

· Минимальный кредит применяется 9 с минимальным сроком 12.

· Отсутствуют значения в сумме кредита, сроке кредита и кредитной истории.

Обработка пропущенных значений:

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

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

Давайте проверим каждую независимую функцию и визуализируем, как распределяются данные:

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

  1. Понимание распределения категориальных признаков.

2) Давайте проверим уникальное количество для каждой функции и ее распределения.

Действие принимается на основании наблюдения:

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

Понимание распределения непрерывных функций:

· 700 был максимальным одобренным кредитом.

· Были утверждены более высокие значения кредита.

· Данные выглядят разбросанными, в них есть асимметрия/выбросы, поскольку, возможно, немногие люди обращались за более высокими кредитами.

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

· Количество максимального значения дохода меньше, что также не одобрено для кредита.

· Людей с доходом (0–10000) больше, и у этих людей больше одобренных кредитов.

· Количество максимального значения дохода меньше, что также не одобрено для кредита.

· Людей с доходом (0–10000) больше, и у этих людей больше одобренных кредитов.

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

Заключительное замечание EDA

Пропущенные значения заполнены:

Преобразование категориальных столбцов в числовые:

Итак, у нас есть Пол, Женат, Иждивенцы, Образование, самозанятость, тип собственности и целевая переменная Статус ссуды в виде категориальных столбцов. Давайте импортируем и выполним кодирование с помощью метода кодировщика Label.

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

Действия, предпринятые на основании наблюдения:

· Мы видели, как категориальные и непрерывные данные распределяются и коррелируют с целевой переменной. Кроме того, я упомянул выводы под каждым графиком.

· Кредитная история больше коррелирует с целевой переменной, и у нас есть проблемы множественной коллинеарности между доходом заявителя, созаявителями и суммой кредита. Следовательно, мы добавили как ApplicantIncome, так и CoapplicantIncome к TotalIncome, поскольку доход созаявителя имеет некоторые значения 0, а общий доход имел бы больше смысла. Кроме того, удалены столбцы CoapplicantIncome и ApplicantIncome.

· Выполнено кодирование с использованием метода кодировщика Label для всех категориальных столбцов.

Проверка выбросов/асимметрии:

· Есть несколько столбцов с выбросами.

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

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

· У нас есть максимальный столбец как категориальный, нам нужно проверить асимметрию для непрерывных функций: сумма кредита и общий доход.

· Давайте удалим асимметрию с помощью метода журнала и квадратного корня:

Конвейер предварительной обработки

Разделите набор данных на тест и обучение

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

2) Поскольку набор данных не масштабируется, нам необходимо масштабировать данные, используя метод мин-макс масштабирования.

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

4) Окончательный размер набора данных поезда: 581 строка и 10 столбцов.

5) Создано разделение тестов поезда: мы разделили данные поезда и теста на размер теста 0,24 с лучшим случайным состоянием.

Построение моделей машинного обучения

Создание модели:

Теперь, после выполнения разделения тестов поезда, у нас есть x_train, x_test, y_train и y_test, которые необходимы для построения моделей машинного обучения. Мы создадим несколько моделей классификации, чтобы получить наилучшую точность, матрицу путаницы и отчет о классификации для всех следующих моделей:

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

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

3) Классификатор случайного леса:

4) Классификатор КНН:

5) Классификатор опорных векторов:

6) Адабустклассификатор:

7) Классификатор GradientBoosting:

1) Наблюдение:

Для каждой модели мы обучаем данные (x_train, y_train) и прогнозируем с помощью x_test. Теперь, с помощью значения y_test и прогноза, мы получили показатель точности. Таким образом, из всех моделей мы получаем самую высокую точность 89% для обоих алгоритмов (логистическая регрессия и SVC) с меньшей ошибкой типа I и II, но это может быть связано с переоснащением, поэтому нам нужно проверить перекрестную проверку, если модель переоснащена или нет.

Перекрестная проверка:

Мы будем выполнять перекрестную проверку для каждой модели с помощью sklearn.model_selection import cross_val_score и сравнивать с оценкой точности, какая бы модель ни давала меньшую разницу между оценкой перекрестной проверки и оценкой точности, она является наиболее подходящей моделью.

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

Теперь давайте проверим AUC-ROC и, соответственно, сможем выбрать наиболее подходящую модель.

Поскольку классификатор Gradient Boosting Classifier является наиболее подходящей моделью, основанной на оценке точности, разнице перекрестной проверки, матрице путаницы (ошибки типа I и II) и отчете о классификации (точность, отзыв и оценка F1). Давайте посмотрим, сможем ли мы увеличить оценку, используя настройку гиперпараметров.

Настройка гиперпараметров:

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

· Как мы видим, Score увеличился до 89% с меньшим количеством ошибок типа I и II.

· Разница между точностью теста и точностью модели также меньше для GBC.

После настройки гиперпараметров мы повысили точность модели до 89%, уменьшив ошибки типа I и II. Кроме того, показатель перекрестной проверки увеличился до 81%, что дает ту же разницу между показателями перекрестной проверки и точности модели.

Давайте спрогнозируем и сравним результаты:

Заключительные замечания

1) Сохранение модели: модель готова, и мы сохранили модель в формате «pkl» с помощью «joblib».

2) Давайте загрузим модель и предскажем.

Окончательный вывод:

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