Привет, Хабр!
Мы продолжаем серию статей про Data Science задачи, решаемые нами в Центре развития финансовых технологий.
В прошлых статьях (тут, а также тут) мы рассказывали про решение задач премодерации контента, но не вдавались в детали того, с помощью какого инструментария мы это делали.
Сегодня же речь пойдет о том, что помогает нам решать эти задачи, а именно - про нашу Data Science экосистему.

Чтобы заранее сформировать ожидания читателя, скажем, что здесь мы не станем детально описывать каждый компонент, чтобы не превращать статью в техническую спецификацию, и остановимся только на ключевых моментах. Если будет интерес к нашей реализации инструментария, мы сможем раскрыть детали в последующих статьях, просто напишите нам об этом в комментариях.
Описание решения
Итак, наши главные требования к программной составляющей экосистемы на старте работ звучали так:
Решение должно быть построено на базе программных решений с открытым кодом (Open Source).
Решение должно поддерживать горизонтальное масштабирование.
Решение должно иметь простую архитектуру с возможностью развертывания в сжатые сроки.
Решение должно позволять взаимодействовать с источниками и приемниками информации в пакетном и событийном режимах.
Решение должно позволять хранить данные в реляционном и nosql форматах.
Для имплементации этих задач мы выбрали следующие программные компоненты:
Kubernetes как среда контейнеризации.
JupyterHub + JupyterLab в качестве рабочего места DS. При этом однопользовательские сервера JupyterLab создаются в отдельных контейнерах, для входа реализована интеграция со службой контроля доступа.
AirFlow как средство оркестрации моделей машинного обучения и потоков данных. Компоненты Airflow также контейнеризованы и управляются в рамках кластера, реализована интеграция со службой контроля доступа.
MLFlow как инструмент управления жизненным циклом ML-моделей, а также Data Science экспериментами.
GitLab SCM как система контроля версионности, GitLab CI как средство реализации процессов непрерывной интеграции, Nexus как хранилище бинарных артефактов моделей машинного обучения и прокси-репозиторий PyPi (репозитория библиотек Python).
Стек ELK как инструментарий сбора и анализа логов, а также обеспечения требований информационной безопасности (ИБ) по мониторингу событий ИБ.
Grafana как средство технического мониторинга состояния кластера, а также визуализации и мониторинга результатов ML-моделей.
А также MPP СУБД Greenplum, как хранилище результатов работы прототипов и экспериментов.
При этом все сервисы интегрированы с Банковской службой контроля доступа, что позволяет централизованно управлять правами доступа и ролевой моделью, а также упрощает доступ пользователям к сервисам.
Все вышеперечисленные инструменты формируют следующий архитектурный ландшафт:

Остановимся подробнее на том, как и какие функции нашей экосистемы мы используем.
Разработку и прототипирование моделей, а также решение аналитических задач мы осуществляем в JupyterLab, в котором пользователь имеет следующие возможности конфигурирования однопользовательского сервера:
Выбор одного из заранее собранных окружений.
Для этого мы завели три окружения при этом каждое последующее включает в себя библиотеки из предыдущих окружений:
Для дата аналитиков. Сюда включили базовые библиотеки для анализа данных (numpy, pandas, matplotlib, seaborn)
Для DS (sklearn, xgboost, catboost, lightgbm, scipy, библиотеки для работы с текстовыми данными: nltk, gensim, pymorphy2 и другие)
А также окружение для DS (Deep Learning), включающее в себя библиотеки для работы с нейросетями (torch, tensorflow, transformers).
Установка библиотек из прокси-репозитория PyPi (размещенном в Nexus). Библиотека устанавливается в текущий экземпляр однопользовательского сервера JupyterLab.
Выбора параметров однопользовательского сервера JupyterLab (CPU, RAM). При этом в зависимости от роли пользователя установлены ограничения на выбор ресурсов. Максимальное доступное количество ресурсов на одного пользователя сейчас установлено в размере 64 ядра CPU и 256 GB RAM.
В качестве основного источника информации для прототипирования используется Корпоративное Озеро Данных на базе экосистемы Hadoop, консолидирующее в себе внутренние системы Банка и внешние источники.
Для хранения результатов работы прототипов и экспериментов используется Massive Parallel Processing СУБД Greenplum.
Также исследователи данных имеют возможность следить за изменениями результатов моделей во времени, используя для это��о Модуль мониторинга моделей на основе Grafana. Применение данного модуля позволяет своевременно обнаружить изменения в метриках моделей и/или входных данных и принять решение о переобучении модели или инициировать детальный анализ выявленных изменений.
Надо сказать, что при разработке моделей машинного обучения мы руководствуемся принципами MLOps. В качестве инструмента по управлению Data Science экспериментами мы используем MLFlow, что позволяет нам логировать метрики и параметры модели, а также различные артефакты экспериментов, принимать решения о внедрении моделей, а также выполнять ретроспективный анализ процесса изменения метрик ML-моделей.
Таким образом, рабочее место исследователя данных представляет собой JupyterLab, с возможностью получения информации по различным источникам данных, реляционным хранилищем результатов экспериментов, а также инструментами управления жизненным циклом моделей и мониторинга их результатов.
Немного про задачи
В начале этой статьи мы упомянули, что с помощью экосистемы Data Science мы уже решили задачи премодерации текстового и графического контента на площадках нашей экосистемы. Помимо этого, с использованием вышеперечисленных инструментов мы разрабатываем рекомендательные системы, строим аналитику продаж банковских (и не только) продуктов, оптимизируем текущие процессы, изучаем поведение наших клиентов и посетителей площадок, учимся выстраивать коммуникации с ними и делать сервисы максимально удобными для пользователя благодаря умному поиску и персонализации контента.
DS экосистема позволяет нам понять кто наш клиент, прогнозировать склонности и интерес наших клиентов к продуктам, предсказывать их будущее поведение и многое другое.
Планы на будущее
В настоящее время мы планируем активно развивать направление искусственного интеллекта в РСХБ. Как следствие, мы планируем реализовать более тесное взаимодействие инструментов с платформой клиентских данных (CDP), а также с площадками экосистемы РСХБ в онлайн режиме. Более того, в связи с расширением скоупа задач в части NLP и CV мы планируем задействовать возможности GPU для увеличения вычислительной мощности кластера.
