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

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

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

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

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

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

TRAIN:
1 787 571 записей
135 155 клиентов
DEF.mean = 3.35%

TEST:
1 665 298 записей
120 567 клиентов

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

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

План решения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Количество признаков Значение показателя ROC AUC
20 0.74894
40 0.74898
60 0.74675

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

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

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

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

Заключение

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

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

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

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