Machine learning в Loginom на примере задачи c Kaggle

3 декабря 2018
4 комментария

В мае 2018 года популярный среди экспертов в Data Science ресурс Kaggle разместил конкурс по оценке вероятности дефолта потенциального заемщика. Покажем, как с помощью Loginom, не прибегая к кодированию, решить поставленную задачу, то есть пройти весь путь от подготовки данных до построения модели.

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

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

Цель - создать методику оценки кредитоспособности заемщиков. Информация из бюро кредитных историй и внутренняя информация банка:

TRAIN:
307 511 записей по 24 825 клиентов
DEF.mean = 8%

TEST:
48 744 записи
 

Необходимо оценить DEF для TEST
Метрика: ROC AUC

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

План решения

  1. Стандартизируем исходные данные и выберем из них наиболее значимые для анализа
  2. Объединим исторические данные с исходной заявкой
  3. Проведем квантование и сформируем конечные классы
  4. Построим несколько моделей
  5. Оценим качество и выберем лучшую модель

Разберемся с данными

Обучающая выборка состоит из более, чем 300 тыс. записей: информации, полученной из кредитного бюро, внутренней информации банка (если клиент уже пользовался услугами банка), а также данным, доступным из текущей заявки на кредит.

Имеется 7 таблиц с данными, которые связаны между собой следующим образом:

Исходные данные

Исходные данные

Название блокаРасшифровкаОписание
credit_card_balanceБаланс кредитной картыБаланс карты, кредитный лимит, траты в течение месяца по категориям, количество операций по категориям
installments_paymentsКалендарь платежейИстория предыдущих займов: календарь платежей, сколько взносов было сделано для оплаты, когда надо было заплатить, когда по факту был сделан платёж, сколько надо было заплатить, сколько по факту было оплачено
POS_CASH_balancePOS кредитыДанные по кредитам, полученным в этом банке: условия предыдущего кредита, количество оставшихся платежей, статус кредита, дни просрочки
previous_applicationПредыдущая заявкаПредыдущие заявки по кредитам в этом банке: платёж по кредиту, сумма в заявке, сумма банка, первоначальный взнос, процентная ставка, стоимость товара, код отказа, условия кредита
bureau_balanceПлатежи из кредитного бюроЕжемесячные данные по предыдущим кредитам по бюро
bureauИнформация из кредитного бюроВалюта займа, сумма, остаток кредита, дата обновления информации, количество пролонгаций, тип кредита, платёж по кредиту
application_{train/test}Текущая заявкаДанные о заемщике: тип клиента, тип работы, организация, сумма заявки

Таблица расшифровки исходных данных

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

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

Предобработка данных

По платежам из кредитного бюро можно посчитать:

  • количество просрочек на 1 месяц, 2 месяца и т.д.
  • общее количество просрочек

Сценарий для данных из кредитного бюро

Полученная таблица объединяется с общей информацией из кредитного бюро. После преобразований на выходе получаем: общее количество кредитов, количество активных, закрытые, bad debt, sold, количество дней от кредита в кредитном бюро до текущей заявки, а также различные агрегаты от сумм кредита, текущего долга, платежей и т.д. На выходе имеем 97 столбцов.

Аналогично с платежами из кредитного бюро, для столбцов, указанных в балансе кредитной карты, считаем различные агрегаты для одного заёмщика. На выходе имеем 132 столбца.

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

С помощью POS кредитов можно получить количество просрочек, общее количество дней просрочек, агрегаты, связанные с просрочками, количество различных кредитов заёмщика, общее количество POS кредитов. На выходе имеем 61 столбец.

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

Объединим исторические данные с текущей заявкой

Все полученные файлы объединяются с текущей заявкой. В итоговой таблице получается 544 столбца: 1 столбец id заявки, значение выходной переменной, 542 признака.

Сценарий объединения всех значимых данных

Сформируем конечные классы

Для полученных признаков, используя обработчик «Конечные классы», посчитаем коэффициенты WoE и IV для того, чтобы сократить число этих признаков.

Результатом работы обработчика «Конечные классы» является преобразование входных столбцов в последовательность интервалов, называемых конечными классами, каждому из которых присваивается определенная метка. Кроме этого, для каждого входного столбца может быть вычислен уровень значимости (отсутствует, очень низкая, низкая, средняя, высокая и очень высокая), на основе которого может производиться отбор переменных в модели бинарной классификации.

Из 542 признаков только у 214 информационный индекс IV > 0,02.

Визуализация Конечных классов

Из оставшихся 214 признаков в порядке убывания выделим 20, 40 и 60 значимых для дальнейшего анализа.

Построим модель, используя метод логистической регрессии

Три полученных набора признаков прогоняем через обработчик «Логистическая регрессия».  Для вычисления результата можно было применить и другие алгоритмы, например «Нейросеть (регрессия)», пока ограничимся логистической регрессией.

Оцениваем качество модели на обучающей выборке.

Метрикой качества построенных моделей считаем ROC AUC.

Количество признаковЗначение показателя ROC AUC
200.748
400.763
600.746

Сценарий решения методом логистической регрессии

Фрагмент итоговой таблицы

Оценка качества логистической регрессии

Модель, занявшая 1-ое место на конкурсе на Kaggle показала результат ROC AUC = 0.80570. Лучший результат, модели, построенной в Loginom = 0.763.

Заключение

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

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

Проект, данные и описание можно скачать по ссылке. Для просмотра потребуется установить бесплатную версию Loginom Academic.

#практика#логистическая регрессия#задача

Смотрите также