Всем привет! На связи дата-сайентисты стрима разработки моделей для корпоративного сегмента ВТБ — Андрей Бояренков, Иван Кондраков и Денис Дурасов.
Как уже писали ранее в другой статье, внедрение процесса AutoML позволило нам во многом автоматизировать рутину и разработки, и применения моделей. Соответственно, у нас появилось больше времени для RnD-задач, которые могли бы быть полезны нашим заказчикам, чтобы охватить моделями новые процессы, а также провести исследования новых алгоритмов.

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

Если рассказать более детально, то и бизнес-подразделениям, и риск-подразделениям банка полезно понимать, по каким заёмщикам есть высокая вероятность в ближайшем будущем выйти в просрочку. Обладая таким знанием, можно предпринять какие-либо действия: связаться с клиентом, понять, какие у него трудности в бизнесе, возможно, предложить реструктуризацию задолженности под новые планируемые денежные потоки компании и тому подобное.
Целевой переменной для новой модели решили взять факт выхода в просрочку, не отнесённую к технической — то есть просрочку свыше 5 дней на горизонте 90 дней. В качестве выборки для разработки модели была собрана статистика по ежемесячным срезам кредитного портфеля за последние 5 лет.
Метод логистической регрессии
В первую очередь решили построить модель методом логистической регрессии, который привычен и понятен заказчику. И при этом данный алгоритм даёт максимальную интерпретируемость результатам полученной оценки по модели. В качестве источников использовали следующие домены данных:
Кредитная история;
Информация из источников агрегаторов (например, «СПАРК-Интерфакс»);
Арбитражные дела;
Исполнительные производства;
Финансовая отчётность;
Транзакционные данные.
Отметим, что мы разрабатывали модульную логистическую регрессию. То есть для каждого модуля, который включал в себя отдельный домен / источник информации, если это возможно (в домене есть данные по сегменту, домен имеет достаточное покрытие выборки), строилась отдельная модель. Затем полученные модели с определяемыми на статистике весами были объединены в одну стекинговую модель по ИП и одну стекинговую модель по ЮЛ. Для корректности итогового стекинга разбиение выборки было единое для всех модулей с учётом критерия применимости. При этом пайплайн мог варьироваться в зависимости от модуля. В общих чертах он выглядел примерно так:

Пайплайн для нас стандартный, ранее мы уже освещали его, также наши коллеги рассказывали про внутреннюю библиотеку Scorekit для построения линейных моделей, так что за подробностями сюда. Отдельно по использованию в моделях различных источников и подходы к стекингу можно почитать в другой нашей статье.
Коэффициент Джини новой модели на тестовой выборке получился 68,7 % по индивидуальным предпринимателям (ИП) и 66,1 % по юридическим лицам. В итоговую модель вошло 24 фактора по юридическим лицам и 14 факторов по индивидуальным предпринимателям из указанных ранее доменов данных. При этом у всех факторов была ожидаемая бизнес-логика, например, чем больше просрочек было в истории у заёмщика или чем более нестабильные поступления — тем больше вероятность выхода заёмщика в просрочку.
Самым предсказательным получился модуль кредитной истории и модуль транзакционной активности заёмщика. Более детальное распределение коэффициентов Джини по модулям и весам каждого из модулей можно посмотреть в следующей таблице:
Сегмент | Модуль | Кредитная история | Арбитражи | Транзакции | СПАРК-Интерфакс | Фин. отчётность | Госзакупки | Стекинг |
ЮЛ | Джини, % | 59 | 38 | 42 | 33 | 34 | 22 | 66,1 |
Вес модуля, % | 49 | 15 | 12 | 6 | 13 | 4 | 100 | |
ИП | Джини, % | 65 | 31 | 54 | - | - | - | 68,7 |
Вес модуля, % | 57 | 13 | 30 |
|
|
| 100 |
Далее совместно с заказчиком стали подбирать cut-off для модели. Отбирая 10 % худших по скору клиентов, можно добиться Recall (доля выявленных просрочек от всех просрочек) более 50 %. Отдельно убедились, что модель хорошо работает на таком продукте, как возобновляемые кредитные линии, так как именно по данным продуктам банк имеет возможность в случае необходимости приостановить лимит кредитования. А также провели ретро-тест: насколько новая модель может улучшить действующий процесс мониторинга, основанный на сигналах раннего предупреждения (Early warning signals, EWS), показывающих возможное снижение кредитоспособности заёмщика. По расчётам, добавление скорингового балла по нашей модели в качестве EW-сигнала в процессе мониторинга увеличивало покрытие клиентов с предсказанной заранее просрочкой с 78 % до 93 %.
Метод градиентного бустинга
Далее задались вопросом, насколько модель градиентного бустинга покажет результат лучше модели логистической регрессии. За основу взяли алгоритм CatBoost. Про наш пайплайн градиентного бустинга уже рассказывали, а также в статье про внутреннюю библиотеку Autobinary для «деревянных» моделей.
Верхнеуровнево процесс Feature Selection и построения модели в пайплайне бустинга выглядел следующим образом (на примере модели по ИП):
Этап отбора | До Feature Selection | Удаление пропусков (>97,5 %) | Отбор по PSI | Target Permutation | Permutation Importance | PI & TP | FS |
Факторов итого | 2035 | 1903 | 1609 | 342 | 115 | 65 | 12 |
От первоначальной выборки, % | 100 | 93,5 | 84,6 | 21,3 | 7,1 | 3,2 | 0,6 |
По пропускам смотрим, чтобы процент пустых значений не превышал 97,5.
С целью получения более стабильной модели по PSI (индекс стабильности популяции) мы исключаем нестабильные факторы, которые сильно меняются в выборке со временем. Смотрим, чтобы индекс PSI в любом из исследуемых временных периодов (по годам, полугодиям, кварталам и месяцам) не превышал 10 %.
Для сокращения признакового пространства исключаем факторы с корреляцией более 80 % (по методу Спирмэна), из пары скоррелированных факторов исключается тот, у которого меньше ранжирующая способность по коэффициенту Джини.
Далее отбираем факторы с помощью алгоритма Permutation Importance, который работает следующим образом. В первую очередь происходит обучение модели со всеми факторами, подданными алгоритму на вход. Затем значения каждого фактора по отдельности случайно перемешиваются 10 раз. После каждой случайной перестановки значений фактора оценивается его важность — как снижение оценки модели по целевой метрике (в нашем случае коэффициента Джини) на валидационной выборке. Соответственно, данная процедура нарушает связь между фактором и целевой переменной, и таким образом снижение метрики показывает, насколько сильно модель зависит от фактора. Критерием отбора было то, что важность фактора должна превышать важность случайно инициализированного фактора и при этом должна быть больше 0.
Далее происходит отбор по алгоритму Target Permutation. На первой итерации алгоритма строятся модели на кросс-валидации с 5 фолдами со всеми факторами, подданными алгоритму на вход. Затем рассчитывается средняя важность фактора на 5 фолдах методом PredictionValueChange, который показывает, насколько в среднем изменится прогноз модели при изменении значения фактора. Чем больше изменяется прогноз, тем важнее рассматриваемый фактор. На второй итерации метода перемешиваются значения целевой переменной, которые нарушают связь между фактором и целевой переменной. Затем заново строятся модели на кросс-валидации с 5 фолдами со всеми факторами и рассчитывается средняя важность фактора. Итоговая важность фактора рассчитывается как разница между важностью на первой итерации и на второй. Чем больше разница, тем фактор более значим для модели. Логика заключается в том, что если фактор правильный и вносит вклад в результат модели (имеет высокую важность на первой итерации), то на второй итерации с перемешанной целевой переменной он должен работать плохо и иметь низкую важность. Критерием отбора было то, что важность фактора должна превышать важность случайно инициализированного фактора и должна быть больше 0.
Для построения финальной модели на шорт-листе из 65 факторов было применено несколько различных алгоритмов, зашитых в стандартный внутренний пайплайн:
Forward Selection. Последовательный метод отбора факторов для оптимизации признакового пространства и определения финального списка факторов. Алгоритм итеративно по одному добавляет в модель факторы, которые дают наибольший прирост. Все вычисления производились на кросс-валидации с 5 фолдами. В первую очередь строится модель со всеми факторами, считается средняя важность методом Prediction Value Change. На первой итерации в модель добавляется фактор, имеющий наибольшую важность при построении базовой модели со всеми факторами. На второй итерации рассматриваем следующий по важности фактор: если при добавлении фактора прирост среднего значения коэффициента Джини превышает заданное значение (0,01 %), то добавляем его в модель, в противном случае пропускаем его. Так алгоритм итеративно проходит по всем факторам, поданным на вход. В результате получаем финальный список факторов, которые дают прирост при добавлении в модель.
Backward Selection. В данном алгоритме наоборот, сначала в модель включены все 65 факторов, далее на каждой итерации исключается фактор с наименьшей важностью. Критерием остановки является превышение значения tolerance 0,01 % коэффициента Джини.
По данной модели лучше себя показал Forward Selection, по результатам которого и была финализирована модель из 12 факторов.
Ранжирующая способность модели бустинга без выделения отдельных модулей по индивидуальным предпринимателям получилась 69,3 % (+0,6 % Джини), по юридическим лицам — 67,9 % (+1,8 %). Можно сказать, что ранжирующая способность на бустинге получилась, хоть и несущественно, выше, чем у метода логистической регрессии. Учитывая, что построение одной «плоской» модели бустинга менее трудозатратно по времени и сложности по сравнению с модульной логистической регрессией, а ранжирующая способность у бустинга в нашем случае выше и при этом бизнес-логика используемых факторов также вполне объяснима, — решили, что целевой моделью для внедрения будет градиентный бустинг.
Интерпретация результатов
Соответственно, следующим шагом было интерпретировать факторы модели, так как заказчику было важно понимать, как работают факторы в модели и из чего складывается та или иная оценка по конкретному наблюдению.
Для этого воспользовались библиотеками SHAP и PDP. Про интерпретацию с помощью библиотек SHAP и PDP уже достаточно много написано, например: Как интерпретировать предсказания моделей в SHAP, Что внутри чёрного ящика: понимаем работу ML-модели с помощью SHAP, Интерпретация моделей и диагностика сдвига данных: LIME, SHAP и Shapley Flow, Интерпретируемая модель машинного обучения. Часть 2.
Интерпретацию того, как факторы работали в нашей модели, можно увидеть на следующем графике:

В качестве напоминания о том, как интерпретировать графики SHAP: каждая линия на этом графике представляет фактор модели, сортировка сверху вниз идёт по важности факторов. Каждая точка для определённого фактора представляет отдельный прогноз в выборке, а её положение на оси x отражает значительность и направление влияния на прогноз относительно среднего прогноза по выборке. Например, если наблюдение по определённому фактору имеет значение SHAP, равное +0,01, это означает, что значение фактора для данного наблюдения приводит к увеличению прогноза / целевой переменной на эту величину.
Справа располагается шкала значений факторов. Если точка красного цвета, это означает, что значение этого фактора очень высокое, синего цвета — низкое значение фактора. Если множество прогнозов дают похожий результат для данного фактора, это приводит к тому, что линия становится намного шире (точки в сводке начинают накапливаться).
Дополнительно смотрим графики PDP. На примере следующего графика по фактору «Выручка за последний квартал» видно, что с ростом выручки вероятность выхода в просрочку снижается. Таким образом, важно заказчику показывать оба графика, так как PDP может хорошо дополнять SHAP с точки зрения раскрытия бизнес-логики фактора.

Подбор гиперпараметров
Подбор гиперпараметров финальной модели осуществляем с помощью Optuna. Но прежде чем их настраивать, хорошо бы понять, как на нашей выборке качество модели бустинга зависит от тех или иных гиперпараметров. Это позволит в дальнейшем более оптимально настраивать гиперпараметры
В целях данного исследования экспертно выбрали 10 гиперпараметров бустинга и ограничили область допустимых значений по ним, смотрите в таблице ниже:
№ | Гиперпараметр | Описание | Область значений |
1 | learning_rate | размер шага на каждой итерации при движении к минимуму функции потерь | действительные числа (0; 1) |
2 | depth | глубина дерева | целые числа [3; 8] |
3 | l2_leaf_reg | коэффициент регуляризации L2 | целые числа [2; 10] |
4 | random_strength | рандомизированность при выборе сплита | целые числа [1; 40] |
5 | subsample | величина подвыборки теста | числа [0.3; 0.9], кратные 0.1 |
6 | colsample_bylevel | процент выбираемых фич при случайном выборе | действительные числа (0; 1) |
7 | min_data_in_leaf | минимальное количество наблюдений в узле | целые числа [1; 500] |
8 | bootstrap_type | тип бутстрэпа | ['Bayesian', 'MVS', 'Bernoulli'] |
9 | score_function | функция выбора оптимального дерева | ['L2', 'Cosine'] |
10 | loss_function | вид функции потерь | ['Logloss', 'CrossEntropy'] |
Далее построили большое количество моделей (11,5 тыс.) на 12 финальных факторах со случайно выбранными значениями из области допустимых по каждому из гиперпараметров из таблицы выше. Далее взяли результаты полученных моделей в качестве выборки для построения новой модели, в которой гиперпараметры и их значения выступали в качестве факторов, а значения Джини на тесте — в качестве целевой переменной.
В результате стало возможным построить графики SHAP для факторов модели, то есть, по сути, для примененных гиперпараметров:
По результатам рассмотрения данного графика стало понятно, какие гиперпараметры самые значимые для нашей выборки (learning_rate, depth и colsample_by_level) и как именно их значения влияют на качество модели.

Как результат в нашем кейсе, ограничив количество гиперпараметров, подбираемых в Optuna, только теми, которые показали себя значимыми для данной выборки при аналогичном количестве trial (60), мы увеличили качество финальной модели на 0,95 % — с 69,30% до 70,25% — коэффициента Джини на тесте. Таким образом, затратив несколько больше времени на определение значимых гиперпараметров, можно получить более качественную модель
Дополнительно можно посмотреть взаимосвязь гиперпараметров для оценки их совместного влияния на нашей выборке, примеры ниже:




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