Мой первый проект машинного обучения: прогноз кредита

Всем привет,

В последнее время я изучил много концепций ML и подумал о том, чтобы проверить полученные знания, поэтому я решил принять участие в онлайн-задаче «Практика: прогнозирование кредита».

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

О компании

Компания Dream Housing Finance занимается всеми жилищными кредитами. Они присутствуют во всех городских, полугородских и сельских районах. Сначала клиент подает заявку на ипотечный кредит после того, как эта компания подтвердит право клиента на получение кредита.

Проблема

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

Данные

Переменная

Описание

Идентификатор_кредита

Уникальный идентификатор займа

Пол

Мужской женский

Замужем

Заявитель женат (Да/Нет)

Иждивенцы

Количество иждивенцев

Образование

Образование кандидата (высшее/неполное высшее)

Самозанятый

Самозанятый (Да/Нет)

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

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

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

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

Сумма займа

Сумма кредита в тысячах

Сумма_кредита_Срок

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

Кредитная_история

кредитная история соответствует требованиям

Property_Area

Городской/полугородской/сельский

Статус_кредита

Кредит одобрен (да/нет)

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

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

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

3. Теперь, на третьем шаге, мы делаем базовый анализ того, как выглядят наши данные, поэтому я собираюсь запустить info(), который даст мне информацию о наборе данных, например, сколько столбцов присутствует, какие типы данных, значения Not Null и так далее. Затем я буду использовать head(), чтобы в основном взглянуть на то, как выглядят данные, а затем, наконец, я сделаю описание, которое даст мне профиль данных моих метрических столбцов, информация, которую я получаю с помощью описать(), в основном означает , медиана, максимальное, минимальное значения и т. д.

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

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

Если мы внимательно посмотрим на наш набор данных, мы узнаем, что из этих 7 полей 5 из них являются категориальными, а именно пол, женаты, иждивенцы, самозанятые и кредитная история, а 2 из них являются непрерывными — сумма кредита и срок суммы кредита.

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

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

Как мы видим, у нас есть пол как «мужской» почти в 4 раза больше, чем «женский». Итак, мы собираемся вменять мужской пол везде, где у нас есть пустые значения в поле «Пол». Теперь может быть неверным, что эти значения NULL на самом деле имели «мужской» в качестве пола, но нам нужно использовать наше лучшее суждение, чтобы вменить значения NULL. и имеет смысл приписать его «мужчинам», поскольку он присутствует в 4 раза больше, чем «женщина». Мы можем выполнить аналогичную проверку для всех других категориальных переменных, а затем приписать значения на основе режима, как показано ниже:

Теперь, когда мы закончили заполнение NULL для категориальных переменных, нам нужно теперь взглянуть на непрерывные. среднее значение. Вы можете посмотреть на description(), чтобы получить эти значения.

теперь, когда мы вменили все NULL, мы ожидаем, что наш набор обучающих данных будет полностью свободен от NULL, давайте проверим это:

5. Отлично! NULL больше не присутствует. Теперь, когда наши данные выглядят чистыми, нам нужно позаботиться еще об одной вещи, прежде чем мы сможем начать строить нашу фактическую модель, а именно о символьных значениях, которые у нас есть в наших категориальных переменных. что, давайте рассмотрим Пол. Мы знаем, что Пол является либо «мужским», либо «женским», но это не очень полезно для алгоритма прогнозирования, и нам нужно иметь числовое значение вместо значений символов, чтобы понять его и иметь лучший прогноз. Теперь, поскольку пол — это либо «мужской», либо «женский», мы могли бы рассмотреть возможность создания индикатора «1» для мужчин и «0» для женщин. Мы также могли бы создать два новых поля, одно как женское, а затем иметь индикатор 0 и 1, указывающий, является ли заявитель женщиной (1) или нет (0), и сделать то же самое для нового поля «Мужской». Подход, который я использовал здесь, состоит в том, чтобы полностью изменить значения в самих существующих столбцах. и не создавать новые. метод, который я использовал для поворота поля персонажа ds в индикаторы — это get_dummies(). можно выбрать любой доступный метод.

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

6. круто! Теперь наши данные готовы для обучения. Мы рассмотрим 3 алгоритма решения этой задачи:

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

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

Случайные леса

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

прежде чем мы перейдем к этапу подбора модели, нам нужно разделить наши переменные X и y, X в этом случае будет переменными, которые мы собираемся оценить, чтобы предсказать результат y. для X мы собираемся игнорировать Loan_ID как это не имеет значения и не влияет на право заявителя на получение кредита. Для Y мы просто сохраним «Статус кредита», поскольку это то, что нам нужно предсказать.

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

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

теперь предскажи:

импортируйте метрики и посмотрите, насколько точен наш прогноз с помощью логистической регрессии:

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

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

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

Следующим шагом будет проверка на NULL, их вменение, а затем создание фиктивных значений (индикаторов), как мы делали для набора обучающих данных.

Давайте теперь создадим отдельный фрейм данных для столбца Loan ID, а затем также создадим тестовый набор данных, который необходимо предсказать:

предсказывать:

проверить прогнозируемые значения:

создайте новый кадр данных с указанными выше предсказанными значениями:

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

Вот как выглядит окончательный вывод:

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

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

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

Спасибо!