Быстро, точно, градиентно: как наш подход к градиентному бустингу повышает эффективность моделей

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

Доброго времени суток, уважаемые читатели! Сегодня мы вновь рады приветствовать вас в увлекательном мире дата-сайентистов банка "Открытие". На связи Иван Кондраков, Константин Грушин и Станислав Арешин. Недавно мы поделились с вами нашим пайплайном разработки линейных моделей для решения задач бинарной классификации. Теперь же мы решили поведать о нашем опыте построения моделей градиентного бустинга. За последнее время команда проделала колоссальную работу: мы протестировали различные методы отбора факторов, нашли новые инсайты в данных, провели интересную (а, главное, полезную!) аналитическую работу и решили несколько Ad-hoc задач. Зовите всех к экранам, мы начинаем!

Градиентный бустинг в представлении Midjourney
Градиентный бустинг в представлении Midjourney

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

Итак, в первую очередь следует рассказать о самой решаемой задаче и о наших данных. Сравнение подходов было проведено на модели КИК (Кредитование на исполнение контракта). Это модель предсказания вероятности дефолтов клиентов, которым банк выдает кредит на исполнение контракта по 44-ФЗ, 223-ФЗ и 615-ПП. В случае выдачи экспресс-гарантии клиент дополнительно оценивается моделью КИК. И принимается решение о выдаче кредита на исполнение контракта, по которому была запрошена гарантия. Целевая переменная — просрочка по клиенту 90+ на горизонте 18 месяцев.

Наблюдения состоят из нескольких выборок:

  • Весь объем выданных экспресс-гарантий;

  • Набор не выданных экспресс-гарантий (отказные, а также одобренные, но не выданные);

  • Набор заключенных контрактов для транзакционных клиентов (так называемые условные заявки).

Также вкратце напомним пайплайн построения линейной модели для тех, кто все еще не ознакомился с нашей предыдущей статьей (а мы очень советуем!):

Иллюстрация пайплайна логистической регрессии
Иллюстрация пайплайна логистической регрессии

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

Перед нами стоит задача построения моделей градиентного бустинга и анализа полученных результатов, разумеется, в сравнении с существующей линейной моделью и ее модулями. Нам важно понять, насколько лучше алгоритм бустинга решает задачу ранжирования клиентов, мы оцениваем метрику Gini, смотрим на ее значение и на доверительные интервалы [0,025; 0,975].

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

  • Модель на всех факторах и всех наблюдениях, сравнение которой будем проводить с моделью стекинга;

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

Стоит сказать, что как базовое решение мы выбрали алгоритм CatBoost.

Обзор методов

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

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

Наш подход отбора факторов для бустинга
Наш подход отбора факторов для бустинга

Первичный отбор факторов

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

  • Удаление факторов, в которых более 95% значений — пропуски;

  • Удаление категориальных факторов с сильной грануляцией;

  • Удаление факторов по PSI train/test/val/oot или по годам.

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

Permutation importance

Данный метод, пожалуй, основной. Мы применяли его на определенном этапе при построении каждой нашей модели. Permutation importance используется для расчета важности факторов и последующего отбора в зависимости от критерия. Например:

  • Выбор топ N факторов;

  • Отбор факторов, средняя важность которых больше 0;

  • Выбор факторов, важность которых выше важности случайного фактора.

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

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

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

Prediction value change

Prediction value change показывает, насколько в среднем изменится прогноз модели при изменении значения фактора. Чем больше изменяется прогноз, тем  важнее рассматриваемый фактор. Метод чем-то похож на рассмотренный ранее Permutation importance, однако у него есть свои плюсы и минусы.

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

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

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

Отбор по SHAP

Значения SHAP (SHapley Additive exPlanations) используются для интерпретации результатов моделей машинного обучения. Они дают возможность объяснить результаты любой модели машинного обучения путем количественной оценки важности каждого признака в определении результатов. Идея значений SHAP заключается в том, чтобы разложить прогноз, сделанный моделью, на вклад каждого признака.

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

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

Корреляционный отбор

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

  • Сортировать факторы по gini фактора;

  • Строить однофакторные модели;

  • Использовать важности метода Prediction value change;

  • Использовать важности метода Permutation importance.

Мы остановились на последнем.

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

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

Модель на всех факторах

Вы, наверное, уже заскучали, но без описания используемых методов неподготовленному читателю было бы трудно понять, что происходит далее. Мы постарались максимально кратко и простыми словами рассказать, что применяли. А теперь, наконец, давайте посмотрим, как мы это применяли и что получили в итоге. Начинаем с самого интересного — рассмотрим модель на всех факторах. А потом посмотрим на модели на факторах из отдельных источников данных.

Ниже представлена воронка отбора факторов нашей самой большой модели:

Воронка отбора факторов модели на всех факторах
Воронка отбора факторов модели на всех факторах

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

На первом этапе проводится обор по первичным статистикам, затем Wrapper отбор по Prediction Value Change, как наиболее быстрый способ отсеять часть не влияющих на итоговые предсказания факторов.

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

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

Мы хотели бы продемонстрировать вам доверительные интервалы всех построенных в рамках этой подзадачи моделей, оценка проводилась бутстрепом на 500 итерациях на выборке OOT:

Доверительные интервалы всех протестированных в рамках построения модели на всех факторах моделей
Доверительные интервалы всех протестированных в рамках построения модели на всех факторах моделей

Итоговой моделью была выбрана модель "топ-250" (на графике выделена красным), как наиболее удовлетворяющая поставленным нами критериям. Gini данной модели 79,21, что довольно значительно превосходит нашу линейную стекинговую модель (выделена голубым), у которой 70,48. Плюс к этому ресурсы, затраченные на построение стекинга нескольких модулей линейной модели, несопоставимы с затратами на построение модели бустинга.

Еще при построении этой модели была решена одна очень интересная ad-hoc задачка. По воронке отбора факторов видно, что топ числовых постоянно меняется, а категориальные факторы сохраняются, то есть в топ-250 факторов их столько же, сколько и в модели на 935 факторах. Было решено построить и сравнить модели на только категориальных гранулированных, не гранулированных и числовых факторах:

Модель

Количество факторов

Gini OOT

Только гранулированные категориальные факторы

26

76,41

Только не гранулированные категориальные факторы

18

76,52

Только числовые факторы

917

76,45

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

Источник: https://habr.com/ru/companies/otkritie/articles/738618/


Интересные статьи

Интересные статьи

Проблема низкой энергоэффективности всей российской экономики известна. Жилищно-коммунальное хозяйство относится к такой сфере экономической деятельности, где стоимость энергетических ресурсов за...
Если Вам приходится постоянно обучать модели, будь то Machine Learning, или задачи в области Computer Vision, искать и классифицировать какие-либо объекты, то Вы знаете, что ожидание результата и мног...
Кажется, мы начали забывать, как выглядят по-настоящему многофункциональные вещи. Кто помнит перфокарты, которые использовали как бумагу для записей? А компакт-диски, из которых мастерили...
В материалах об аудиотехнике для домашней студии мы поговорили не только о мультимедиа-колонках, но и рассмотрели доступные «мониторные» наушники, плюс — модели для игр и...
Чтобы машины могли обрабатывать текст на русском и «понимать» его, в NLP используются универсальные языковые модели и трансформеры — BERT, RoBERTa, XLNet и другие — архитектуры от 100...