В настоящее время можно инвестировать в кредиты других людей, используя онлайн-платформы однорангового кредитования, такие как, например, Lending Club. В Lending Club заемщики с более высоким кредитным рейтингом (более надежные и менее рискованные) получают более низкие процентные ставки по своим кредитам. Для сравнения, заемщики с более низким кредитным рейтингом (менее надежным и более рискованным) получают более высокие ставки. С точки зрения инвестора кредиты с более высокими процентными ставками более привлекательны, поскольку обеспечивают более высокую норму прибыли на инвестиции (ROI), но, с другой стороны, несут в себе риск не возврата вообще (дефолт). Таким образом, модель машинного обучения, которая может предсказать, какие кредиты с высокой процентной ставкой будут погашены с большей вероятностью. Это обеспечит добавленную стоимость за счет минимизации связанных рисков.

Понимание набора данных

В этом проекте я буду использовать библиотеки для обработки данных (Pandas, Numpy), визуализации данных (Matplotlib, Seaborn), машинного обучения (Scikit-learn, XGBoost) и некоторых статистических данных, чтобы получить некоторое представление и тенденции данных. . Набор данных состоит из 466285 строк и 75 столбцов. Используя df.info, мы знаем, что в некоторых столбцах есть отсутствующие столбцы, поэтому мы должны сначала обработать отсутствующее значение.

Очистка и подготовка данных

Перед моделированием данных нам нужно сначала очистить и подготовить данные, это может быть:

  1. Удаление или заполнение недостающих данных
  2. Удаление ненужных столбцов
  3. Удаление выбросов
  4. Стандартизирующее значение
  5. Исправление ошибки

Во-первых, мы удаляем столбец с большим количеством отсутствующих значений (более 200 тыс. отсутствующих значений), например all_util и max_bal_bc. Я выбираю этот способ, потому что значение трудно угадать, но это не меняет общего распределения данных. Для остальных отсутствующих значений мы можем просто удалить строки, чтобы удалить их. Количество строк уменьшается с 466 285 до 437 710. Затем мы переходим к количеству столбцов, потому что 75 столбцов — это довольно много. Столбцы с неопределенными/слишком большим количеством значений, такие как адрес, почтовый индекс и URL-адрес, будут удалены. Я делаю это, потому что это может повлиять на производительность модели машинного обучения, которую мы создадим позже. Слишком много столбцов не означает лучшую модель машинного обучения.

Далее мы можем проверить распределение столбцов с числовым значением. Посмотрите, имеет ли колонка дисбаланс распределения или вообще не имеет распределения. Оказывается, некоторые столбцы имеют только одно значение, поэтому столбцы можно легко удалить. Это не повлияет на модель, которую мы построим позже.

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

Мы также должны проверить выброс. Есть много обнаружений выбросов, которые мы можем использовать. Просто выберите один из способов. В этой статье используется обнаружение межквартильных выбросов. На рисунке ниже показано, как это работает. После удаления выбросов строки снова уменьшаются с 437 710 до 394 132.

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

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

Разработка функций

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

После этого переходим к порядковым столбцам. Мы должны преобразовать значение, чтобы модель поняла, что мы хотим. Столбцы term,grade, sub_grade и emp_length преобразуются в некоторые числа. Вы можете изменить значение, если оно разумно.

Обработка несбалансированных данных

Целевой функцией для этого набора данных является индикатор того, является ли кредит хорошим (0) или плохим (1). Чтобы определить хорошие кредиты, я использую их статусы кредитов и печатаю их количество ниже. «Текущий» и «Полностью оплаченный» считаются равными 0, а «Списано», «По умолчанию»: «Просроченные (16–30 дней)» и «Просроченные (31–120 дней)» считаются равными 1. Club предоставляет описание для каждого статуса:
Текущий: кредит погашен по всем непогашенным платежам.
В льготном периоде: кредит просрочен, но в течение 15-дневного льготного периода.
Поздний (16–30): кредит не был погашен в течение 16–30 дней.
Поздний (31–120): кредит не был погашен в течение 31–120 дней.
Полностью выплачен: Заем был полностью погашен либо по истечении 3- или 5-летнего срока, либо в результате досрочного погашения.
Дефолт: Заем не действителен в течение длительного периода времени.
Списано: Кредит, по которому больше нет разумных ожиданий дальнейших платежей.

Для решения проблемы несбалансированных данных мы можем использовать SMOTE для обработки большинства данных, а RandomUnderSampler — для обработки меньшинства данных. В результате мы получаем 138 690 строк для недефолтных кредитов и 69 345 строк для дефолтных кредитов. Он получает лучшую пропорцию, чем раньше.

Моделирование данных кредитного риска

Затем мы создаем 3 разные модели машинного обучения, называемые деревом решений, случайным лесом и XGBoost. Три модели построены таким образом, чтобы получить оценку соискателя кредита. Наконец, модели тестируются и рассчитываются характеристики, такие как точность, оценка f1 и оценка AUC. Это показывает, что XGBoost и случайный лес имеют очень похожий результат. Поэтому вы можете выбрать одну из этих моделей. В этой статье я использую модель XGBoost для подсчета баллов. Модель сохранена травлением и может быть использована в дальнейшем.

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

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

Первое, что я хочу увидеть, это распределение вероятностей предсказания. На рисунке ниже показано распределение и коэффициент приемлемости 0,85. Мы видим, что он делит результат на 2 разных раздела: по умолчанию и не по умолчанию. Используя этот порог, мы можем определить наилучшее значение для получения оптимального результата в качестве кредитора.

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

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

Из приведенного выше резюме мы знаем, что максимальную чистую прибыль мы можем получить, если установим коэффициент принятия 0,65, таким образом, порог модели будет 0,321, а прибыль составит около 42 032 060. Это около 11,7% кредита, выданного заемщику. Но мы должны отметить, что мы должны ожидать, что мы потеряем 65 196 150. Вроде бы много, но мы получим самый оптимальный чистый доход (за вычетом убытков). Но если вы не можете позволить себе потерять так много, вы можете рассмотреть другие стратегии коэффициента принятия. Опять же, это зависит от здравого смысла и способности управлять рисками.

Закрытие

Мы сделали так много всего, от подготовки данных до применения модели. Применение этой модели требует предметной области, связанной с самим кредитным риском, поэтому исследовать ее довольно интересно. Если вы все еще хотите узнать больше о коде, вы можете проверить его самостоятельно на моем Github здесь или вы можете проверить google colab здесь.