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

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

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

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

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

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

  1. Данные, соответствующие бизнес-требованиям или варианту использования, который мы пытаемся решить.
  2. модель классификации , которую мы считаем (или, скорее, оцениваем) как лучшую для нашего решения.
  3. Оптимизируйте выбранную модель, чтобы обеспечить максимальную производительность.

Начнем с данных

Безусловно, нам нужны данные по кредиту от кредитной организации. Хоум Кредит поделился историческими данными по кредитным заявкам для этого конкурса Kaggle. Подмножество данных, связанных с их кредитными заявками, было использовано для построения нашего классификатора. Замечательно то, что Home Credit предоставил общий словарь для этих данных. Это в значительной степени помогло понять данные.

Понимание меток двоичной классификации

Ярлыки обучения хранятся в переменной TARGET. Значения следующие:

0’: вернет ссуду вовремя

1’: возникнут трудности с выплатой кредита или он не выполнит свои обязательства.

Для нашей цели мы создадим контролируемый двоичный классификатор.

Небольшая предварительная обработка для использования этих данных

Следующие шаги были выполнены с данными

  1. Обработка выбросов
  2. Обработка отсутствующих значений
  3. Кодирование категориальных переменных
  4. Масштабирование функций
  5. Уменьшение размера данных

Обработка выбросов. Здесь я проверил значения, которые функционально невозможны. Эти выбросы были заменены на NaN.

Например, человека нельзя трудоустроить 365243 дня!

Аналогичным образом были проверены некоторые другие столбцы. Подробности этой работы можно найти здесь.

Обработка отсутствующих значений. Этот анализ был немного интересным.

Как видим, были столбцы, в которых отсутствовало более 60% данных. Однако ни одна из этих колонок не была опущена.

Вместо этого я вменял недостающие значения с помощью медианы.

Кодирование категориальных переменных. В наборе данных было 16 категориальных переменных.

Для вменения использовались следующие две стратегии:

  1. Примените Кодировку метки, если количество категорий в категориальной переменной равно 2.
  2. Примените One-Hot Encoding, если количество категорий в категориальной переменной больше 2.

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

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

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

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

Из этого графика на осыпях мы видим, что около 40 основных компонентов могут покрывать более 80% дисперсии данных. Соответственно, мы провели PCA:

Таким образом, мы могли бы уменьшить размерность на 83,33%, сохранив при этом 82,41% изменчивости данных.

Подробнее см. Здесь.

Давайте еще немного исследуем наши данные

Проблема несбалансированности классов

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

Как мы видим, в данных только около 8% меток равны 1 и около 92% меток равны 0.

Еще несколько наблюдений

Мы вычислили коэффициент корреляции Пирсона между каждой переменной и целью.

Четыре основных положительных корреляции с "TARGET": DAYS_EMPLOYED, REGION_RATING_CLIENT_W_CITY, REGION_RATING_CLIENT, NAME_INCOME_TYPE_Working

Четыре основных отрицательных корреляции с "TARGET": EXT_SOURCE_3, EXT_SOURCE_2, EXT_SOURCE_1, DAYS_BIRTH

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

Графики выше показывают, что риск затруднений с оплатой высок, когда рейтинги из внешних источников 1 и 3 низкие. Точно так же шансы на погашение выше, когда рейтинги из этих источников выше.

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

Мы хорошо разбираемся в данных наших кредитных заявок. Пришло время выбрать нашу модель классификации.

Нам нужна наша метрика

Выбор модели требует оценки, а оценка требует хорошей метрики. Это действительно важно. Если мы оптимизируем модель на основе неверной метрики, наша модель может не подходить для бизнес-целей.

У нас есть ряд показателей, например, точность, отзывчивость, прецизионность, оценка F1, площадь под кривой рабочих характеристик приемника на выбор.

Для классификации риска невозврата кредита мы выберем в качестве нашей метрики Площадь под кривой рабочих характеристик получателя (или ROC AUC).

Теперь вопрос: почему AUC? Я бы лучше сказал, а почему бы и нет?

Начнем с нашей проблемы, контекста и матрицы путаницы:

В нашем контексте

output = 1 означает, что у клиента возникнут трудности с оплатой

output = 0 означает, что клиент вернет деньги вовремя

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

TPR или истинно положительный показатель - это показатель «отзывчивости» или чувствительности. Частота FPR или ложных срабатываний является мерой ожидания ложных срабатываний модели.

TPR = TP / (TP + FN)

FPR = 1 - специфичность = 1 - TN / (TN + FP) = FP / (TN + FP)

Значение AUC варьируется от 0 до 1. Чем выше AUC, тем лучше модель предсказывает, кто погасит ссуду вовремя, а у кого возникнут трудности с выплатой ссуды.

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

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

Выберем нашу модель классификации

Мы выбрали нашу метрику. Пора выбирать нашу модель.

Были оценены следующие модели:

  1. Логистическая регрессия
  2. RandomForestClassifier
  3. GradientBoostingClassifier
  4. РешениеДеревоКлассификатор
  5. GaussianNB
  6. XGBClassifier
  7. ЛГБМ-классификатор

Их кривая ROC и AUC были следующими:

Многие модели классификации хорошо себя зарекомендовали на нашем наборе данных. Однако лучше всех выступил LGBClassifier.

Поэтому мы будем использовать модель повышения светового градиента (или LGBMClassifier) ​​для классификации риска для данных нашей кредитной заявки.

Давайте теперь оптимизируем выбранную нами модель

Мы выбрали наш классификатор LGBMClassifier на основе его оценки ROC AUC по данным нашей заявки на получение кредита. Однако нам нужно настроить нашу модель, чтобы она работала еще лучше.

Давайте посмотрим на список гиперпараметров, которые можно настроить:

целевая функция выполняет K-кратную перекрестную проверку параметров и использует оценку ROC AUC. Его цель - увеличить количество очков.

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

Настройка гиперпараметров предполагает выбор набора значений. Для этого процесса отбора я реализовал следующие две стратегии:

Поиск по сетке: метод поиска по сетке проверяет все комбинации значений в сетке, оценивает каждую комбинацию гиперпараметра с целевой функцией и записывает набор вместе с оценкой в ​​«историю записей».

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

Мы наблюдали улучшение показателя ROC AUC, хотя и незначительное, после оптимизации нашей модели LGBMClassifier.

Подробности этой оптимизации можно найти здесь.

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

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

Насколько надежна наша модель

Здесь модель была протестирована на нескольких наборах данных, и для каждого набора был вычислен показатель ROC AUC.

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

Мы заметили, что окончательная модель LGBMClaissifer довольно устойчива. Мы протестировали модель на 5 наборах данных. Мы получили средний показатель ROC AUC 0,680479 с дисперсией 0,000613.

Интерпретация оценки AUC

Оценка AUC около 0,7 - это не так уж и плохо.

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

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

Жизнь не ложе из роз

Это действительно правда! Этот проект столкнулся с множеством проблем.

Проблема дисбаланса классов существовала для выбранного набора данных.

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

В качестве подсказки, пожалуйста, посмотрите это:

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

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

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

Резюме на данный момент

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

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

Мы могли оценить различные классификаторы и выбрать наиболее подходящий для нашего набора данных.

Наконец, мы смогли продемонстрировать несколько стратегий оптимизации для нашей модели.

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

  1. выбор правильных данных в соответствии с целью или постановкой задачи,
  2. правильная обработка и понимание данных,
  3. выбор модели, и,
  4. оптимизация модели.
  5. И да, пожалуйста, не недооценивайте потребность в огромных вычислительных мощностях.

Улучшение

Некоторые аспекты реализации в Jupyter notebook можно улучшить.

Улучшение 1. Ввод пропущенных значений

В случае подстановки пропущенных значений NaN заполнялись «медианными» значениями. «Медиана» хорошо работает при сортировке данных. Лучшим подходом, безусловно, будет использование модели обучения с учителем для «предсказания» значений NaN.

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

Улучшение 2: выбор гиперпараметров для LGBMClassifier

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

Однако более разумным методом будет сочетание случайного поиска и поиска по сетке следующим образом:

  1. Используйте случайный поиск с большой сеткой гиперпараметров
  2. Используйте результаты случайного поиска, чтобы построить сфокусированную сетку гиперпараметров вокруг наиболее эффективных значений гиперпараметров.
  3. Выполните поиск по этой уменьшенной сетке гиперпараметров. Мы можем ограничить количество итераций или нет, в зависимости от доступных аппаратных ресурсов или максимально допустимого времени.

использованная литература

Репозиторий Github, содержащий блокнот Jupyter для связанной работы

Данные предоставлены Хоум Кредит.