Наша команда Графовой аналитики стрима Моделирование КИБ и СМБ занимается различными исследовательскими задачами для двух основных направлений: риск- и бизнес-моделирования.  В данной статье мы расскажем о том, как продвинутые подходы машинного обучения, в частности нейронные сети, помогают генерировать признаки для моделей, сокращая трудозатраты на проработку гипотез и операционные издержки при подготовке данных для моделей.  В Банке в рамках моделирования для сегментов крупного, среднего и малого бизнеса используется и разрабатывается большое количество ML-моделей, которые позволяют решать различные задачи: от кредитного скоринга компаний, формирования предодобренных предложений клиентам до определения склонности клиентов к различным продуктам и их удержания, а также выявления мошеннической активности и фрод-мониторинга. Традиционно для построения большого пула моделей требуется формировать промышленные витрины с интерпретируемыми признаками, которые опираются на различные источники данных в Банке. Разработка витрин требует значительных ресурсов по их наполнению и реализации, кроме того необходимо постоянно проводить мониторинг качества данных и анализировать корректность расчета фичей.  Однако продвинутые ML-подходы позволяют работать напрямую с сырыми данными и сокращают время на проработку гипотез для формирования признаков. Для целей построения моделей в Банке используются различные источники информации о клиенте. Например, в качестве данных для формирования признаков используется детальный профиль клиента из CRM-систем, его обороты по различным экономическим операциям, финансовая отчетность, кредитная история и многое другое.  Таким образом, каждый признак, используемый при моделировании, характеризуется своим доменом данных. При этом на текущий момент в промышленной эксплуатации находится огромное количество признаков (~500-1000 фичей) для каждого из доменов, каждый из которых рассчитывается по определенному алгоритму (первоначально проработанному экспертно). Одним из самых значимых источников информации в Банке о клиенте являются его транзакции по расчетным счетам, а также информация об остатках на счетах. Кроме того, в рамках задачи кредитного скоринга важную роль играет кредитная история клиента. Все эти банковские сущности представляют собой не что иное, как последовательность данных по клиенту на определенные периоды времени. Так информация о кредитной истории и остатках на счетах накапливается в банковских системах на ежедневной основе, а транзакции детализируются вплоть до даты-времени их проведения. Как показывает практика, с последовательностями данных неплохо справляются рекуррентные нейронные сети (RNN). Это вид нейронных сетей, где связи между элементами образуют направленную последовательность. Благодаря этому появляется возможность обрабатывать серии событий во времени или последовательные пространственные цепочки.  Используя подходы, основанные на RNN, можно извлечь важную значимую информацию из сырых данных на последовательностях без необходимости обрабатывать огромное многообразие данных вручную. Применяя нейросетевые подходы к исходным атрибутам последовательности данных, на выходе получается общий эмбеддинг (числовой вектор) клиента, который содержит в себе всю совокупную информацию об этой последовательности, будь то совершаемые им проводки или изменения в погашении задолженности по кредитным договорам. Компоненты такого вектора можно использовать в качестве фичей, встраивая в модели в виде дополнительных признаков или заменяя соответствующие признаки из домена. Как было указано выше, в рассматриваемой задаче основными источниками информации о последовательностях данных являются транзакции клиентов, их остатки на банковских счетах, а также внутренняя кредитная история. Какие же исходные сырые данные можно использовать из указанных источников при формировании входной последовательности по клиенту? Транзакции представляют собой неструктурированную информацию о совершаемых клиентом операциях по своим счетам. При этом в них содержатся как входящие (поступления), так и исходящие (списания) проводки по отношению к клиенту.  Основные значимые атрибуты транзакций приведены ниже: Сумма транзакции и валюта платежа Информация об отправителе и получателя: маски счетов, наименования Назначение платежа – текстовое описание проводки (по сути цель платежа) Кроме того, транзакция содержит дату ее проведения. Таким образом, появляется возможность сортировки последовательности в правильном порядке. Информация о том, кем является рассматриваемый клиент в рамках отдельной транзакции – отправителем или получателем, также учитывается при сборе последовательности и используется при моделировании. В Банке также реализована модель классификации транзакций по экономическому смыслу, например, она позволяет выявлять платежи за различные услуги, договоры поставок, оплату аренды, а также специфические банковские операции: гашение и выдача кредитов, пополнение депозитов, платежи по займам. Данная разметка также используется в качестве атрибута исходной последовательности. Не менее значимой информацией, представляющей собой последовательность, является история об изменении остатков на различных счетах клиента в Банке.  Основные атрибуты – это сумма баланса на банковском счете, непосредственно номер счета, а также валюта счета.  По маске счета можно характеризовать клиента с точки зрения финансовой составляющей. Например, как изменяется его остаток на депозитах, баланс расчетного счета, тратятся и пополняются кредитные средства. Под кредитной историей клиента в Банке подразумевается проведение им траншей и гашений по открытым кредитам, а также отслеживание просрочек при их наличии. Традиционно, факторы на кредитной истории используются в моделях как показатели на определенный момент времени (на месячную отчетную дату). Однако тот факт, что информация хранится на ежедневной основе, позволяет упаковать ее в последовательность и учитывать при моделировании историю изменений траншей по клиенту. В результате на основе каждого источника данных собирается последовательность временных точек с их основными атрибутами.  Все исходные данные хранятся в песочницах в Hadoop, для сбора и обработки данных используется PySpark.  Каждая последовательность по клиенту на рассматриваемую дату упорядочивается по event time – дате совершения события в последовательности (дата проведения транзакции, дата изменения остатка на различных счетах). Пример сырых транзакционных данных приведен ниже.  Затем проводится обработка атрибутов последовательности.  Например, для категориальных признаков на всей выборке производится Frequency Encoding – кодирование по частоте для каждого уникального значения категориального атрибута. Таким образом, для уникальных значений с наибольшей частотой присваивается наименьший порядковый номер и так далее. При этом для пропусков присваивается отдельное значение (например, «empty»), чтобы корректно учесть при кодировании. Пример процесса Frequency Encoding для классов транзакций, содержащих 54 уникальных значений, приведен ниже. После обработки атрибутов проводится упаковка табличной структуры данных последовательности по клиенту в массив на уровне ключа (ID клиента). Такой формат в дальнейшем удобно считывать и обрабатывать для передачи на вход NN. Ниже приведен в качестве примера приведен итоговый вид последовательности с преобразованными атрибутами, которые в дальнейшем используются при построении модели. [{             ID клиента: id_00001,              Дата транзакции: [2022-02-04   12:00:00.0, 2022-01-31 10:25:00.0, 2022-01-17 14:08:00.0, 2021-12-24   15:25:00.0, 2021-12-03 12:40:00.0],              Тип транзакции: [0, 0, 1, 0, 1],              Маска счета клиента: [1, 1, 1, 1,   1],             Маска счета контрагента: [2, 1, 5,   9, 8],              Класс транзакции: [4, 1, 2, 3, 9],              Сумма транзакции: [800 000.00,   10 500 000.00, 5 000 000.00, 1 450 000.00,   90 000.00], }] Итоговые наборы данных последовательностей для моделирования также хранятся в Hadoop, откуда подгружаются для моделирования. После сбора последовательностей можно приступать к выстраиванию архитектуры и обучению NN. В качестве основного фреймворка для наших задач выступает PyTorch, а все моделирование проводится на серверах с GPU. В первую очередь, используя собранные данные, необходимо сформировать представление отдельного элемента последовательности. При этом элемент последовательности состоит из определенного набора атрибутов. Рассматриваемые атрибуты представляют собой как числовые, так и категориальные признаки.  Для числовых признаков применяются различные преобразования, например, логарифмирование, либо данные атрибуты остаются без изменений. Для категориальных исходных признаков применяется слой эмбеддингов (torch.nn.Embedding), который позволяет каждое уникальное значение признака преобразовать в векторное представление заданной размерности.  В результате данных преобразований формируется представление отдельного элемента последовательности, которые затем подаются на вход рекуррентной нейронной сети. Общую архитектуру для моделирования можно представить в виде следующей схемы: В качестве основных видов RNN для обработки последовательности используются LSTM или GRU со своими исходными параметрами. После применения рекуррентных слоев получается некоторый вектор, который в случае решения supervised-задачи проходит через полносвязные слои и преобразуется в предсказание рассматриваемой целевой переменной. Вектор из последнего полносвязного слоя представляет собой эмбеддинг клиента на основе рассматриваемой последовательности. В случае unsupervised-задачи этап с преобразованием в предсказание рассматриваемой целевой переменной отсутствует. Модель обучается таким образом, чтобы минимизировать используемую в unsupervised-задаче кастомную функцию потерь (например, contrastive loss (https://doi.org/10.1109/CVPR.2006.100), triplet loss (https://arxiv.org/abs/1412.6622)).  Преимущество unsupervised-эмбеддингов в том, что они позволяют формировать универсальное векторное представление клиента без привязки к целевой переменной, которые в дальнейшем можно дообучать под конкретные задачи. В рамках текущих экспериментов проводилось построение различных baseline-моделей на NN. В рамках supervised-задачи использовались различные целевые переменные: склонность к различным продуктам Банка в LAL-моделях, а также дефолт клиента для скоринговых моделей. Здесь решается задачи бинарной классификации, поэтому в качестве loss-функции используется Binary Cross Entropy Loss между целевой переменной и предсказанием. Для unsupervised-задачи были проведены эксперименты с использованием подхода CoLES (Contrastive Learning for Event Sequences). Функция потерь в данном подходе связана с расстояниями между полученными эмбеддингами на последовательностях. При моделировании использовалась реализация из фреймворка PyTorch-LifeStream. Дополнительно полученные таким образом эмбеддинги обучали под приведенные выше целевые переменные. При этом по некоторым моделям удалось улучшить метрики качества на 3-4 пп. При построении baseline-NN в основном варьировались следующие параметры: Размерность эмбеддингов (64, 128, 256 компонент).  В результате большая размерность позволяет получить более стабильные и точные результаты. Длина передаваемой на вход последовательности. В данном случае отметили, что в зависимости от домена данных и сегмента моделирования есть своя оптимальная длина последовательности, которая выдает лучший результат. При этом если продолжать увеличивать входной поток, то модель становится менее стабильной и точной. Таким образом, наиболее далекие элементы последовательности не несут полезной информации. Применение dropout-подхода.  Данный подход по сути представляет собой технику регуляризации нейронной сети через изменение структуры внутренних представлений. Этот подход позволят добиться более качественных результатов. Нейронные сети представляют собой сложные модели, задача их обучения далеко нетривиальная, и чтобы достичь успехов необходимо знать различные специфичные приемы. Например, в рамках наших экспериментов столкнулись с сильной нестабильностью эмбеддингов при их применении в моделировании.  Решить данную проблему нам помог подход batch normalization, который позволяет провести регуляризацию модели. В результате удалось добиться стабильных и качественных результатов при инференсах эмбеддингов на выборки для обучения и тестирования под конкретные задачи.  Построенные модели векторных представлений позволяют получить сопоставимые метрики при замене признаков из соответствующего домена, на основе которого формируется последовательность данных, а при добавлении улучшить ранжирование текущих моделей.  В рамках наших задач при использовании последовательности транзакций и остатков в моделях склонности клиентов к различным продуктам Банка удается построить модели с аналогичной, а иногда и лучшей ранжирующей силой. При этом нет необходимости использовать огромный набор факторов на основе указанных источников, а достаточно применять полученные эмбеддинги, разработанные на коротком списке сырых данных. В рамках использования данных кредитной истории в скоринге за счет эмбеддингов получается значительно повысить качество ранжирования, до 5-10 пп, так как мы используем историю изменений в кредитной истории по клиенту.  На данный момент проведены предварительные эксперименты по формированию векторных представлений и их использованию в качестве признаков для моделирования. В планах расширять и уточнять текущие подходы, улучшить качество за счет подбора гиперпараметров и оптимизировать процесс обучения, а также внедрять полученные решения в текущие процессы Банка.