О проекте
Инвестиционная платформа Advisors’ Axiom — это площадка для совместной работы инвесторов сегмента Premium и Private Banking, инвестиционных консультантов и финансовых экспертов, разработанная ПАО РОСБАНК.
Возможности платформы:
Задача
Необходимо было разработать MVP удобного онлайн-инструмента для управления капиталом для клиентов Росбанка сегмента Premium и Private Banking с возможностью следить за всеми изменениями их портфеля, а также мобильное приложение к нему.
Платформа на стадии MVP должна включать профиль инвестора и инвестиционного консультанта, который закреплен за каждым клиентом и помогает ему в формировании и реализации его инвестиционной стратегии.
Сервис должен не только содержать всю необходимую информацию по портфелю, но и сигнализировать о негативных изменениях портфеля для клиентов, и отслеживать происходящие в экономике изменения с помощью машинного обучения, анализировать состояние активов и фиксировать их динамику.
Реализация
Разнородные исходные данные из различных банковских учетных систем загружаются в БД PostgreSQL.
Загрузка информации, ее способы и оперативность находились под контролем специалистов банка и вне влияния команды разработки.
Способы загрузки информации:
Удаление БД и полная загрузка
Частичные insert
Частичный update
Частичный delete
Система производит подготовку данных в нужном формате и объеме, необходимых для целей визуального представления информации в интерфейсе.
Вследствие того что система не имеет сведений о способах поступления информации, ее объеме и частоте, процедуры обработки исходных данных каждый раз выполняют все расчеты с нуля на требуемую глубину на весь объем данных.
Это позволяет гарантировать корректность информации сразу после расчета на основе объема исходных данных, который был на момент расчета.
Все расчеты выполняются в разрезе одного клиента.
На примере типовой задачи по расчетам, например, активов из исходных данных:
Производится обход списка клиентов в БД и постановка для каждого клиента соответствующей задачи «расчет последней информации по активам» через брокер сообщений, т. е. генерируется множество независимых задач расчета по каждому клиенту.
Контейнеры-консьюмеры производят обработку сообщений из очередей.
Увеличение производительности достигается увеличением количества consumer-обработчиков.
База данных в этой схеме является потенциально узким местом, которое на текущий момент не масштабируется.
Однако считаем, что имеем запас производительности БД еще почти на 2 порядка до тех пор, пока эта проблема с объемом данных и производительностью БД действительно возникнет.
До тех пор увеличение производительности рекомендуется решать штатными тривиальными методами:
Увеличение ресурсов сервера БД.
Улучшение структуры таблиц исходных данных.
Разделение БД на чтение и запись.
Однако такую схему нельзя признать удовлетворительной на долгий срок, и тот временной период, который имеется в запасе, требуется использовать для перепроектирования схемы поставки исходных данных в систему.
По требованиям заказчика в качестве языка разработки был выбран python и django — в качестве фреймворка.
Django-админ выполняет роль чернового интерфейса к БД системы для административного персонала.
Система предоставляет restful-API для web-клиентов.
С точки зрения назначения и интерфейса есть два потребителя:
менеджер банка,
клиент банка.
Поэтому система делится:
на личный кабинет менеджера,
личный кабинет клиента.
Функционал API для личного кабинета клиента на 95% основан на API личного кабинета менеджера и представляет собой урезанную версию API.
Они работают на одной кодовой базе, но выполняются в разных контейнерах в средах банка с различными уровнями доступа:
личный кабинет менеджера доступен только из сети банка с устройств банка;
личный кабинет клиента доступен из сети Интернет.
Технически релиз основной части системы представляет собой контейнер с единым исходным кодом, который может быть запущен либо как личный кабинет менеджера, либо как личный кабинет клиента.
Основную часть системы можно представить как монолит, выполняющий несколько задач:
Админ-панель как технический интерфейс для просмотра и отладки исходных данных.
API для личного кабинета менеджера.
API для личного кабинета клиента.
Обработчики-консьюмеры задач из очередей.
Админ-панель и API для личного кабинета менеджера объединяются в одном контейнере.
Другие функции выполняются каждая в своем отдельном контейнере.
Сопутствующая функциональность реализуется в микросервисной архитектуре. В частности, отдельно реализованы вынесены такие сервисы, как:
Генератор PDF-отчетов (php).
Профилирование клиентов (опросник клиентов и расчет риск-рейтинга).
Новостной модуль (парсинг и анализ новостей с помощью машинного обучения).
Внешнее API для поставщиков услуг.
Взаимодействие между микросервисами и основным функционалом осуществляется через брокер сообщений и restful-API.
Нейросеть для оценки тональности новостей
Для машинного обучения модели мы использовали более 20 тысяч страниц новостей на английском языке и более 10 тысяч страниц новостей на русском языке. При этом был обучен собственный дескриптор слов, поскольку в новостях много специализированных терминов.
После был сформирован собственный набор данных из 10 тысяч новостей, которые сначала были размечены автоматически с использованием вычисляемого индикатора прогноза аномальной доходности. А потом аналитиком была произведена ручная разметка собранных статей с точки зрения общей тональности новости и влияния на рыночную стоимость компании (в средней и долгосрочной перспективе), что позволило достичь большей точности в работе системы.
Особое внимание к вопросам безопасности
В процессе интеграции платформы с внутренней банковской инфраструктурой специалисты Росбанка внедрили системы мониторинга базы данных Imperva, сбора событий и инцидентов SIEM, обеспечения безопасности обмена данных WSO2, тестирования кода Solar AppScreener и приняты другие меры по обеспечению конфиденциальности.
Результат
Вeб-версия платформы включает в себя следующее:
Представление услуг и продуктов банка в виде единого каталога продуктов (ценные бумаги, счета, депозиты, страхование, доверительное управление и т. п.).
Объединение данных из нескольких учетных систем, агрегация, приведение к виду, понятному пользователю, обогащение и предоставление в едином интерфейсе.
Расчет доходности активов в денежном и процентном выражениях по различным активам (каждый тип актива может иметь собственную методику расчета).
Вывод истории операций по различным активам из разнородных источников данных.
История стоимости активов за различные временные периоды.
Вывод актуальной рыночной цены и средней цены покупки актива.
Различные интерфейсные группировки активов для более удобного предоставления информации.
Система анализа портфелей клиентов как для клиентов, так и для их менеджеров. Например:
Изменение портфеля клиента.
Изменения ценной бумаги клиента.
Концентрация всех активов в одной валюте.
Концентрация всех активов в одном продукте.
Портфель не соответствует эталонному.
И др.
Генерация pdf-отчетов по каждому клиенту в ежедневном режиме.
Процесс ребалансировки портфеля клиента (подбор продуктов для клиента, которые могут ребалансировать его портфель в соответствии с риск профилем).
Предоставление новостей по продуктам клиента с оценкой их тональности (хорошо или плохо).
Профилирование клиента (опрос и присвоение риск-рейтинга).
Формирование заявок на покупки продуктов различных типов.
Мобильное приложение для инвестирования Premium и Private клиентов состоит из двух частей:
личный кабинет финансового эксперта,
личный кабинет клиента.
Основные блоки приложения:
Динамика портфеля всех клиентов менеджера за год.
Лидер роста, падения и выплат по инвестиционному портфелю на текущую дату.
Новости по компаниям — положительные/отрицательные/нейтральные.
При переходе на конкретную новость можно увидеть, каких клиентов она может заинтересовать.
Актуальные продукты, которые доступны к приобретению.
Каталог клиентов с фильтрацией по необходимым параметрам.
Отчеты с подробным содержанием портфеля клиента.
Покупка инвестиционных продуктов.
Предложение по ребалансировке портфеля клиента.
Нейросеть для оценки тональности новостей
Приложение с заданным периодом времени автоматически считывает свежие новости из определенного перечня сайтов-источников, умеет получать текст новости по ссылке (URL) на страницу сайта-источника.
Каждая новость, попадающая на оценку и формирование анонса автоматически привязана по заданному перечню тегов к необходимой компании.
Изображение подбираются для новости автоматически на основе тегов категории компании.
Для перевода новости на русский язык используются внешние сервисы, обеспечивающие качественный машинный перевод текста.
Корректировка анонсов, изображений и публикаций выполняются через панель администрирования модератором контента.
Технологический стек:
PHP
Django
Postgres