Обзор проекта

Кредит – это доверие. Доверие к тому, что кредитор возместит заемщику в будущем, большую часть времени взимая комиссию. На самом деле слово «кредит» происходит от латинского слова «credere», что означает верить или доверять. Из этих утверждений становится ясно, что акт предоставления кредита включает в себя вопрос: можно ли доверять заемщику (лицу или компании) для погашения средств, которые предоставит кредитор?

В прошлом решение о предоставлении кредита принималось индивидуально, анализируя 3 С кредита: «Характер» (история заемщика в выполнении своих обязательств), «Капитал» (активы заемщика, которые могут быть использованы в качестве гарантии или нет) и «Мощность» (достаточно ли доходов заемщика для погашения). Однако в настоящее время большинство этих решений автоматизировано с использованием моделей, которые предоставляют кредитные рейтинги.

В этом проекте я создал модель, которая обеспечивает вероятность дефолта (PD) набора данных от Small Business Administration (SBA). SBA — это учреждение из США, основанное в 1953 году с целью продвижения и помощи малым предприятиям на кредитном рынке США. SBA действует как страховая компания, беря на себя часть риска, гарантируя часть кредита. (Ли, Микель и Тейлор, 2018 г.)

Статья под названием «Должен ли быть одобрен или отклонен этот кредит?»: большой набор данных с рекомендациями по присвоению классов» стала основой для этого проекта и связанных с ним наборов данных.

Постановка задачи

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

1. Понимание бизнеса и данных (чтение статьи и метаданных)

2. Исследовательский анализ данных

3. Предварительная обработка данных и выбор функций

4. Создайте конвейер машинного обучения

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

6. Оцените модель

7. Протестируйте альтернативный алгоритм (и повторите шаги 4–6).

8. Сравните результаты

Метрики

Как правило, кредиторы больше заинтересованы в том, чтобы узнать PD от операции, чем в простой бинарной классификации (дефолт или нет). Это происходит потому, что с большими однородными группами с одинаковыми ВД мы можем допустить, что некоторые контракты не будут оплачены в полном объеме, и для поддержки проигранных мы взимаем большую плату со всей группы. Это тот факт, который различает, почему с одних клиентов взимается больше, чем с других. Имея это в виду, отличным подходом к сравнению и измерению моделей PD является получение рабочей кривой (кривая ROC) и расчет площади под кривой (AUC).

Кривая ROC представляет собой диаграмму с частотой ложных срабатываний (FPR) по оси x и частотой истинных положительных результатов (TPR) по оси y. Ниже мы можем увидеть, как рассчитать эти значения:

FPR = FP / (FP + TN)

ТПР = ТП / (ТП + ФН)

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

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

Вычисление интеграла кривой ROC — это то, что дает нам оценку AUC, где чем больше значение, тем лучше (у идеального классификатора AUC равен 1).

Исследование данных

В этом проекте используется набор данных «SBA Case», подмножество набора данных «National SBA», который включает данные с 1987 по 2014 год с 899 164 наблюдениями. Меньшая — это выборка, содержащая только займы из штата Калифорния и 2102 наблюдения. Данные содержат 35 столбцов, описанных ниже. (Ли, Микель и Тейлор, 2018 г.)

Исследовательская визуализация

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

Алгоритмы и методы

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

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

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

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

  1. Преобразование Бокса-Кокса: помогает нормализовать ненормальные переменные.
  2. Дискретизация K-бинов: для переменных, где box-cox не работал, я использовал K-бины с параметром «квантиль», чтобы разделить переменную на порядковые аналогичные размеры выборки.
  3. One-hot Encoder: преобразует категориальные данные в фиктивные переменные.
  4. Standard Scaler: стандартизируйте все переменные
  5. Grid Search CV: настройка гиперпараметров с k-кратной перекрестной проверкой

Ориентир

В качестве эталона я обнаружил в статье, на которой основан этот проект, что самая экономная модель, использующая три независимые переменные, имеет показатель AUC более 0,75. Я ожидаю, что мы сможем легко превзойти этот результат, используя логистическую регрессию и даже больше, используя LightGBM.

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

Во время EDA я обнаружил некоторые переменные, которые нужно исключить перед моделированием. Здесь я перечислю мотивацию выпавших:

Глядя на числовые переменные, я нашел некоторые переменные с выбросами. Для обнаружения выбросов я использую 3 стандартных отклонения от среднего (выше и ниже). Ниже мы можем увидеть процент выбросов:

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

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

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

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

Выполнение

Этап реализации был сделан в новом Jupyter Notebook после EDA. Выполните следующие действия:

1. Загрузка данных и обработка исходных данных (ручные преобразования и удаление)

2. Тестовое разделение и инкапсуляция всех трансформаторов

3. Создание конвейера, объединяющего преобразователи, стандартизация масштабатора и классификатора.

Уточнение

Для уточнения выполняем следующие шаги:

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

2. Создайте поиск по сетке и установите AUC в качестве целевой метрики.

3. Соответствуйте модели

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

  • Штраф: Нет, L1, L2 или ElasticNet
  • C (инверсия штрафа): начните с огромных значений, а затем я стал воронкой
  • Решатель: все возможно

Для LightGBM мы тестируем следующее:

  • Тип бустинга: все возможные
  • Максимальная глубина: от 3 до 12
  • Количество листьев: использует 2 ^ (максимальная глубина)

Оценка и проверка модели

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

Чтобы увидеть производительность моделей, я построил кривые ROC, используя тестовые данные.

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

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

Заключение

Полученные результаты хорошие. Мы начнем с контрольной спецификации 0,75 для оценки AUC. Модель логистической регрессии превзошла это значение и сама по себе привела нас к хорошим результатам.

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

Однако как сотруднику банка понятно, что в деле много упрощений и на самом деле вычислить ПД не так уж и просто. На самом деле некоторые переменные могут отсутствовать при оценке PD, например, флаг, обозначающий рецессию, в большинстве случаев, когда наступает рецессия, я могу прекратить выдавать новые кредиты, но у меня все еще есть старые. Более того, здесь мы выбрали только кредиты, которые были одобрены, и большая часть усилий по кредитному моделированию приходится на часть, в которой было отказано (обычно называемую выводом об отказе — это модель сама по себе, она пытается выяснить, как отклоненный кредит может быть выполнен, если он будет одобрен).

Улучшение

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

  • Как упоминалось в размышлении, важно знать (и отбросить), какие переменные являются информацией о будущем, я имею в виду информацию, которая приходит после одобрения кредита. Правильнее всего рассматривать только те переменные, которые присутствуют на момент утверждения.
  • Одна тема, к которой не обращались, - это вывод об отказе, и иногда это самая важная часть для кредитной экспансии.
  • Другой важной темой является то, как производится разделение поезд-тест. Здесь я использовал случайный подход, но на самом деле правильное разбиение по датам. Таким образом, я могу узнать, как работает моя модель, если бы я был имплантирован в определенную дату. В начале проекта я пытался это сделать, но большая часть контрактов была заключена ближе к рецессии, и поэтому, если бы я разошлась во времени, то могла столкнуться с двумя проблемами:
  1. Если я обучу свою модель до того, как рецессия начнет влиять на контракты (примерно в 2003 году — срок большинства контрактов составлял более 5 лет), у меня будет мало данных для обучения моей модели, и производительность, вероятно, будет худшей (много ложноотрицательных результатов).
  2. Если я тренирую свою модель, выбирая часть рецессии, то моя модель будет консервативной и, вероятно, в последующие годы будет иметь много ложных срабатываний.

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

Рекомендации

Ли, Мин, Эми Микель и Стэнли Тейлор. «Должен ли этот заем быть одобрен или отклонен?»: Большой набор данных с рекомендациями по присвоению классов». Журнал статистического образования 26, вып. 1 (2018): 55–66.

Википедия. 2022. https://en.wikipedia.org/wiki/Receiver_operating_characteristic (по состоянию на 18 марта 2022 г.).