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

Введение

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

Поскольку это проблема бинарной классификации (по умолчанию или нет), логистическая регрессия, вероятно, будет наиболее распространенным методом. Логистическая регрессия отличается от линейной регрессии тем, что она использует сигмовидную функцию для оценки вероятности, которая может находиться только в диапазоне от 0 до 1. Следовательно, логистическую регрессию можно использовать в машинном обучении для прогнозного моделирования. Если вероятность невыполнения обязательств для конкретного заявителя на получение кредита высока, его автоматически можно отнести к категории высокого риска. Тогда кредитор может либо отказаться выдать кредит, повысить проценты, либо потребовать активы в качестве залога.

Обзор данных

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

data_def = data[data["Default"] == "Y"]
data_non_def = data[data["Default"] == "N"]
data_non_def = data_non_def.sample(n=len(data_def), random_state=123)
data = pd.concat([data_def, data_non_def])

В этом анализе мы сосредоточимся на том, как сумма кредита и процентная ставка влияют на риск дефолта. Данные будут разделены на обучающие и тестовые данные в соотношении 80:20.

X = data[["Amount", "Rate"]]
y = data["Default"]
y = y.apply(lambda x: 1 if x == "Y" else 0)

X_train, X_test, y_train, y_test = train_test_split(X,
                                                    y,
                                                    test_size=0.2,
                                                    stratify=y,
                                                    random_state=123)

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

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

def scaler_transform(data, scaler=StandardScaler()):
    scaler.fit(data)
    data_scaled = scaler.transform(data)
    data_scaled = pd.DataFrame(data_scaled)
    data_scaled.columns = data.columns
    data_scaled.index = data.index
    return data_scaled


X_train_scaled = scaler_transform(data=X_train)

Далее лучшие параметры логистической регрессии можно определить с помощью поиска по сетке:

logreg = LogisticRegression(random_state=123)
parameters = {'solver': ['liblinear', 'saga'],
              'C': np.logspace(0, 10, 10)}
logreg_cv = GridSearchCV(estimator=logreg,
                         param_grid=parameters,
                         cv=5)
logreg_cv.fit(X=X_train_scaled, y=y_train)

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

logreg = LogisticRegression(C=logreg_cv.best_params_['C'],
                            solver=logreg_cv.best_params_['solver'],
                            random_state=123)

logreg.fit(X_train_scaled, y_train)
y_pred_train = logreg.predict(X_train_scaled)

print(confusion_matrix(y_true=y_train, y_pred=y_pred_train))
print(classification_report(y_true=y_train,
                            y_pred=y_pred_train,
                            target_names=["Not default", "default"]))

Результат:

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

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

Черная пунктирная линия показывает границу решения, созданную логистической регрессией. Он показывает, что если стандартизированная ставка по кредиту выше 0, что означает, что она выше средней, вероятность дефолта по кредиту возрастает.

Используемые коды доступны на GitHub.

Заключение

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

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

Ссылка:



https://machinelearningmastery.com/ логистическая-регрессия-фор-машинное обучение/

https://machinelearningmastery.com/standardscaler-and-minmaxscaler-transforms-in-python/