Ссылка на все коды, использованные в этом эссе:



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

Введение в набор данных

Я использовал набор данных под названием Набор данных клиентов по умолчанию для кредитных карт, предоставленный UCI Machine Learning. Этот набор данных включает 24 функции, начиная от базовой информации, такой как пол, и заканчивая счетами и отчетами о погашении, примерно 30 000 кредиторов. Функции и их описания перечислены ниже (аналогичные названия с разными индексами сокращаются с помощью круглых скобок)

  • ID: ID каждого клиента
  • LIMIT_BAL: сумма кредита в тайваньских долларах (включая индивидуальный и семейный/дополнительный кредит).
  • ПОЛ: Пол (1=мужской, 2=женский)
  • ОБРАЗОВАНИЕ: (1=аспирантура, 2=университет, 3=средняя школа, 4=другое, 5=неизвестно, 6=неизвестно)
  • БРАК: Семейное положение (1=замужем, 2=холост, 3=другие)
  • ВОЗРАСТ: Возраст в годах
  • PAY_(0- 6): Статус погашения в (сентябрь — апрель) 2005 г. (-1=оплата в срок, 1=задержка платежа на один месяц, 2=задержка платежа на два месяца, … 8=задержка платежа на восемь месяцев, 9 = отсрочка платежа на девять месяцев и более)
  • BILL_AMT(1–6): Сумма выписки по векселю в (сентябрь — апрель) 2005 г. (доллар США).
  • PAY_AMT(1–6): Сумма предыдущего платежа в (сентябрь-апрель) 2005 г. (NT-доллары).
  • default.payment.next.month: Платеж по умолчанию (1=да, 0=нет)

Исследование и подготовка данных

Если мы классифицируем данные по умолчанию и только по умолчанию, мы обнаружим, что данные сильно несбалансированы, как показано на рисунке 1. Почти 77% данных не по умолчанию, и только около 22% данных классифицируются как дефолт. Это приведет к очень высокой базовой точности и может ввести в заблуждение другие прогностические модели (если один бессмысленный фиктивный классификатор классифицирует все данные как отличные от значений по умолчанию, его точность будет равна 77%). Таким образом, чтобы избежать этой проблемы, нам необходимо провести недостаточную выборку набора данных, чтобы убедиться, что дефолтные и недефолтные кредиторы принимают примерно одинаковые веса, что может обеспечить эффективность наших прогностических моделей. Как показано на рисунке 2, я применил алгоритм NearMiss для обучения и тестирования раздела с одинаковым количеством кредиторов по умолчанию и кредиторов, не являющихся кредиторами по умолчанию.

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

На этом графике мы можем примерно увидеть, что недефолтные кредиторы и их семьи, как правило, имеют более высокие кредиты, а недефолтные кредиторы, как правило, старше. Однако эффект не очень очевиден из-за масштаба рисунка 3. Таким образом, чтобы иметь четкое представление, я увеличил распределения ограниченного Баланса, классифицированные по умолчанию и не по умолчанию, которые были показаны на рисунке 4. Мы могли оценить, что не -дефолтные кредиторы имеют примерно на 50 тысяч больше предоставленных кредитов по сравнению с дефолтными кредиторами.

Чтобы иметь более точные и математические измерения взаимосвязи между различными функциями и целевой переменной, я решил использовать матрицу корреляции для измерения существующих линейных взаимосвязей. Рисунок 5 — это результат, который я получил после запуска корреляционной матрицы со всеми столбцами в наборе данных. Следует обратить внимание на две части: 1. особенности корреляции с целевой переменной, 2. сильно коррелированные счета BILL_ATM (1–6) и PAY_ (0–6).

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

Во-вторых, мы всегда должны стараться избегать сосуществования сильно коррелирующих переменных внутри модели. Это связано с тем, что сильно коррелированные переменные заполнили бы модель избыточной информацией и размыли реальную картину за кулисами. Таким образом, нам нужно будет изменить и улучшить эти сильно коррелированные счета BILL_ATM (1–6) и PAY_ (0–6). Стратегия, которую я применил, заключается в создании новых переменных, содержащих разницу между каждыми двумя последовательными переменными с высокой степенью корреляции (код приведен ниже на рисунке 6). Таким образом, избыточная информация будет устранена, а новые изменения останутся для анализа.

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

Моделирование:

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

Я также разработал следующие процедуры для каждой модели: 1. Запуск модели, 2. Настройка гиперпараметров, 3. Перекрестная проверка модели как для тестового, так и для обучающего разделов, 4. Проверка и исправление переобучения. В качестве примера для этого процесса возьмем случайный лес (я бы поместил код других моделей в конец документа).

Сначала я запускаю классификатор случайного леса с некоторыми базовыми настройками случайных параметров.

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

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

Вот лучший набор параметров для модели случайного леса.

Наконец, я использовал перекрестную проверку, чтобы избежать предвзятости при выборе данных и получить «реальные» оценки точности того, насколько хорошо наша модель соответствует разделу обучения и тестирования. Причина, по которой я также хочу увидеть, насколько точно наша модель соответствует учебному разделу, заключается в том, что я буду использовать ее для определения того, является ли модель переобученной. Если одна модель соответствует обучающим данным, она будет работать фантастически в наборе обучающих данных, но очень плохо на тестовых данных. Таким образом, большая разница в двух показателях точности будет указывать на то, что модель переоснащается, в противном случае это не так. Если мы применим этот тест к результатам модели случайного леса, мы обнаружим, что разница между двумя показателями точности довольно невелика, всего около 0,006. Таким образом, мы можем заключить, что модель случайного леса не является переоснащением.

Поскольку модель случайного леса не показывает признаков переобучения, я хотел бы использовать модель дерева решений в качестве примера того, как я устраняю проблемы переобучения. На следующих двух графиках мы могли видеть, что начальная разница между точностью модели дерева решений для обучения и набора данных для тестирования составляет около 3%. Это указывает на то, что исходное дерево решений, вероятно, будет соответствовать обучающим данным. Чтобы уменьшить это несоответствие, я начал пробовать различные комбинации меньших гиперпараметров, таких как max_depth, min_samples_leaf. После ряда испытаний был найден лучший набор гиперпараметров, который уменьшил расхождение между показателями точности примерно до 1%. Это означает, что проблема переобучения решена.

Для других моделей могут быть лучшие варианты решения проблемы переобучения, кроме попытки использовать разные наборы гиперпараметров. Например, логистическая регрессия может использовать регуляризацию L1 или регуляризацию L2, чтобы уменьшить проблемы переобучения, просто изменив гиперпараметр «штрафа». Однако, поскольку логистическая модель в нашем случае не подходит, я бы не стал рассматривать такой процесс.

Сравнение моделей

Чтобы сравнить все пять моделей, которые мы разработали, я составил таблицу, в которой отображаются оценки точности наборов данных для обучения и тестирования для всех пяти моделей на рисунке 8. Таблица отсортирована с использованием «Точность для тестовых данных». По сравнению с оценкой точности базового классификатора мы могли видеть, что наши модели повышают точность не менее чем на 14% и не более чем на 35%. Мы также могли бы узнать, что модель случайного леса — самая точная модель, которую мы получили. Таким образом, это окончательная модель нас. Однако это не единственная причина, по которой мы выбрали случайный лес в качестве нашей окончательной модели.

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

Просто чтобы попробовать, как работает модель случайного леса, я нашел данные кредитора, у которого есть дефолтные платежи (целевая переменная = 1). И я ввел данные кредитора в нашу модель; предсказание [1.0] правильно соответствует истине.

Выводы из моделирования

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

Отражение

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

Коды для других моделей