Обзор проекта
Кредит – это доверие. Доверие к тому, что кредитор возместит заемщику в будущем, большую часть времени взимая комиссию. На самом деле слово «кредит» происходит от латинского слова «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 и использующий фреймворк повышения градиента. Алгоритм известен как более быстрый для обучения, с низким потреблением памяти и высокой точностью.
Кроме того, я использовал некоторые другие методы, которые включают предварительную обработку и настройку гиперпараметров, перечисленные ниже:
- Преобразование Бокса-Кокса: помогает нормализовать ненормальные переменные.
- Дискретизация K-бинов: для переменных, где box-cox не работал, я использовал K-бины с параметром «квантиль», чтобы разделить переменную на порядковые аналогичные размеры выборки.
- One-hot Encoder: преобразует категориальные данные в фиктивные переменные.
- Standard Scaler: стандартизируйте все переменные
- 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, например, флаг, обозначающий рецессию, в большинстве случаев, когда наступает рецессия, я могу прекратить выдавать новые кредиты, но у меня все еще есть старые. Более того, здесь мы выбрали только кредиты, которые были одобрены, и большая часть усилий по кредитному моделированию приходится на часть, в которой было отказано (обычно называемую выводом об отказе — это модель сама по себе, она пытается выяснить, как отклоненный кредит может быть выполнен, если он будет одобрен).
Улучшение
Некоторые улучшения, которые можно было бы сделать, перечислены ниже:
- Как упоминалось в размышлении, важно знать (и отбросить), какие переменные являются информацией о будущем, я имею в виду информацию, которая приходит после одобрения кредита. Правильнее всего рассматривать только те переменные, которые присутствуют на момент утверждения.
- Одна тема, к которой не обращались, - это вывод об отказе, и иногда это самая важная часть для кредитной экспансии.
- Другой важной темой является то, как производится разделение поезд-тест. Здесь я использовал случайный подход, но на самом деле правильное разбиение по датам. Таким образом, я могу узнать, как работает моя модель, если бы я был имплантирован в определенную дату. В начале проекта я пытался это сделать, но большая часть контрактов была заключена ближе к рецессии, и поэтому, если бы я разошлась во времени, то могла столкнуться с двумя проблемами:
- Если я обучу свою модель до того, как рецессия начнет влиять на контракты (примерно в 2003 году — срок большинства контрактов составлял более 5 лет), у меня будет мало данных для обучения моей модели, и производительность, вероятно, будет худшей (много ложноотрицательных результатов).
- Если я тренирую свою модель, выбирая часть рецессии, то моя модель будет консервативной и, вероятно, в последующие годы будет иметь много ложных срабатываний.
Поскольку в статье из кейса тоже использовался случайный подход, я решил оставить его.
Рекомендации
Ли, Мин, Эми Микель и Стэнли Тейлор. «Должен ли этот заем быть одобрен или отклонен?»: Большой набор данных с рекомендациями по присвоению классов». Журнал статистического образования 26, вып. 1 (2018): 55–66.
Википедия. 2022. https://en.wikipedia.org/wiki/Receiver_operating_characteristic (по состоянию на 18 марта 2022 г.).