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

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

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

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

Давайте поговорим о том, что вам нужно…

Что вам нужно

Во-первых, как и любому приложению машинного обучения, вам нужны данные!

Это большое преимущество банков и крупных финансовых институтов, у них много данных!

«У нас нет лучших алгоритмов. У нас просто больше данных». — Питер Норвиг

Для своего проекта я использовал этот Dataset от Kaggle.

Теперь у нас уже есть Набор данных, давайте посмотрим на него.

Взглянув на наш Датасет, мы можем увидеть много интересных данных, они такие подробные, и это приятно!

И что самое приятное, наши Данные уже помечены! Это очень поможет нам!

Эти данные были предоставлены пользователем Burak Ergün из Kaggle, спасибо, братан!

Теперь, когда мы уже знаем, что у нас есть в нашем Датасете, пора форматировать малыша!

Форматирование нашего набора данных

Уже отформатированные данные находятся в репозитории этого поста Github!

Первое, что нам нужно сделать, это найти nan или неполные данные, и лично мне нравится делать это, строя Тепловую карту с помощью Seaborn, как показано на рисунке ниже:

У нас много строк с проблемой, и у нас есть 2 способа ее решения:

  • Исключить все строки с проблемными данными (не рекомендуется)
  • Заполните эти данные, используя такие методы, как «Среднее значение столбца» или «По корреляциям» с другими данными из строки.

В нашем Наборе данных более 900 000 примеров, и в этом конкретном случае мы можем просто удалить строки с отсутствующими данными.

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

Чтобы удалить данные, мы можем просто использовать метод dropna() из Pandas.

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

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

Используя эту аналогию, мы хотим удалить следующие столбцы:

data.drop(columns=[‘Loan ID’, ‘Customer ID’, ‘Months since last delinquent’, ‘Tax Liens’, ‘Years in current job’], inplace=True)

Вы можете подумать: «Зачем мне удалять эти столбцы? Больше данных означает большую производительность модели, верно?»

И ответ нет!

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

Мусор на входе, мусор на выходе! — Мой последний босс

Эта фраза действительно изменила мое мышление, и я лично рекомендую никогда не забывать ее!

Но сейчас у нас уже есть только те столбцы, которые будут полезны для нашей Модели, но если вы почините наш набор данных, у нас будет текстовая информация, а это бесполезно для нашей Модели!

Вы можете подумать: «Хорошо, давайте уберем эти столбцы, проблема решена!»

Но мы не можем просто отбросить эти столбцы, потому что самые важные столбцы нашего Набора данных (Статус кредита) имеют текстовый формат!

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

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

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

# Splitting Data:
X = data.drop(columns=[‘Fully Paid’])
y = data[‘Fully Paid’]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

У нас уже есть данные, разделенные и готовые для ввода в нашу модель!

Время заняться машинным обучением, детка!

Создание нашей модели

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

Я сделал это в POC-файле репозитория из этого поста.

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

Создать модель логистической регрессии очень просто, нам просто нужно использовать пакет sklearn.model_selection и импортировать LogisticRegression. .

# Building the Model:
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()

Теперь мы можем обучить нашу модель, используя наши X_train и y_train:

model.fit(X_train, y_train)

Обучение модели!

Теперь мы уже можем делать прогнозы в нашем X_test:

pred = model.predict(X_test)

Чтобы визуализировать производительность нашей модели, мы можем использовать Отчет о классификации и Матрицу путаницы из sklearn.metrics, как показано ниже:

# Checking the metrics:
from sklearn.metrics import classification_report, confusion_matrix
print(classification_report(y_test, pred))
print(‘===================================’)
print(confusion_matrix(y_test, pred))

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

У нас была хорошая производительность, и на самом деле мы можем улучшить ее, используя такие методы, как GridSearch, изменяя размер нашего набора для обучения и тестирования. Но пока этого достаточно!

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

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

На данный момент это все!

Увидимся в следующий раз!

Мои социальные сети:

Linkedin:https://www.linkedin.com/in/gabriel-mayer-779b5a162/

GitHub: https://github.com/gabrielmayers

Instagram: https://www.instagram.com/gabrielmayerl/