Инвестиции от роботов. История одного «школьного» проекта

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

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

В среде «взрослых» разработчиков есть предубеждение, что проекты, которые сделаны школьниками несерьёзные и вообще не дело это — давать детям настоящую разработку. Так вот у ВТБ другое мнение. Мы работаем над поддержкой молодых талантов, помогаем им развиваться и считаем, что именно созданные школьниками и студентами наработки в будущем помогут развитию российской экономики.

Ниже о проекте Buy Or Sell Service (или скромно BOSS), который был создан командой школьников при поддержке ВТБ и представлен на конкурсе «Большие вызовы» от образовательного центра «Сириус» расскажут непосредственные участники. Представляем молодых разработчиков: Фёдора Томилова, Данилу Ушакова, Глеба Зуева, Елизавету Пушкарёву и Виталия Бабанского.

BOSS, просто BOSS

Добрый день, Хабр, на связи Даниил Ушаков. Мне 17 лет, я из г. Ливны Орловской области, окончил 10-й класс МБОУ «Гимназия». На проекте работал над разными задачами. Начиная с непосредственной разработки сервиса и заканчивая бизнес-презентацией результатов. Я занимался распознаванием именованных сущностей (NER) в новостях, выявлением и визуализацией их связей, написал кастомный парсер MOEX`а (Московской биржи), который впоследствии был использован вместо предшественника, вдобавок на мне был весь фронтенд-системы. Расскажу о проекте в целом.

VTB Buy Or Sell Service (BOSS), — призвана снабдить инвесторов беспристрастным, но умным инструментом для анализа и принятия инвестиционных решений.

Наглядная новостная аналитика: справа — аргументы, слева — тикеры
Наглядная новостная аналитика: справа — аргументы, слева — тикеры

BOSS на основе анализа новостного потока и публичных данных составляет «общее впечатление» о новостном фоне вокруг той или иной ценной бумаги и даёт рекомендацию — покупать или продавать. То есть на входе у системы лента СМИ и API Мосбиржи, а на выходе — список тикеров с пометкой Buy/Sell.

— Как оно работает? — Хорошо работает!

Привет, Хабр! Я Виталий Бабанский. Мне 16 лет, родом из Москвы. Моей задачей в проекте было дать остальной команде исходные данные, поэтому мне нужно было придумать и выстроить работу с котировками Московской биржи и создать парсинг новостных СМИ, таких как РБК, РИА, «Ведомости» и другие. Далее расскажу, как всё работает в нашем проекте.

Вот так мы собираем новости
Вот так мы собираем новости

Первым этапом работы BOSS является парсинг новостных источников и данных биржи (они, кстати, доступны публично в XML-формате), который запускается по расписанию. Новости распределяются по категориям-тегам с помощью модели классификации с соответствующими весами. Логистическая регрессия (по метрике accuracy она предсказывает, упадут или вырастут акции, выдавая, соответственно, 0 или 1) в итоге точна более чем на 60% (по нашим измерениям).

Без бэкенда всё это лишь красивая оболочка

Привет, я Фёдор Томилов, учащийся СУНЦ УрФУ, перешёл в 11-й класс на математическо-информационный профиль.

Моя основная роль в проекте визуально не видна, но очень важна: я бэкендер и админ, хотя немного умею и во фронтенд. Мои скилы: бэк — Python+FastAPI/aiohttp, SQLAlchemy, aioredis; фронт — Typescript+React. Умею писать SQL-запросы, работаю с PostgreSQL, Redis, MongoDB и более пяти лет знаком с Linux, поэтому в проекте я выполнял (помимо бэкендера) роль системного администратора.

В основе BOSS лежали выделенные инстанции с «голой» UBUNTU, на основе которых я построил архитектуру из 5 микросервисов, написанных на FastAPI, практически полностью асинхронных. Я развернул базы данных, настроил NGINX и далее занимался тем, чтобы сервис мог вообще обрабатывать запросы пользователей и не падать от каждого чиха. Как говорится, «деплоил код на прод без страха».

В BOSS используются две базы данных — Redis и PostgreSQL, обращения к которым централизованы с помощью Major API-сервера. В PostgreSQL попадают напрямую данные MOEX, а в Redis (для хранения в оперативной памяти) — данные после препроцессинга.

Как я уже упоминал, для бэкенда применяется асинхронная технология. При тестировании удалось получить вот такие характеристики производительности:

Среднее время запроса

0,46 сек

Максимальное время запроса к API

0,77 сек

Количество одновременных запросов от пользователей

1000

Интенсивность подачи запросов

2000 запросов в секунду

Вы можете в комментариях написать, хороши они или плохи, по вашему мнению, но моё — заключается в том, что мы добились отличной скорости и стабильности проекта в заданных условиях.

«Человека вынули, AI поставили…»

Меня зовут Елизавета Пушкарёва, я учусь в математическо-информационном классе СУНЦ УрФУ, занимаюсь машинным обучением и работаю над проектами, связанными с его применением. В проекте BOSS занималась разработкой таких моделей машинного обучения, как Word2Vec, LDA, DTM, и ещё ряда архитектур. Виталий уже, наверное, упомянул, что в BOSS происходит оценка новостного фона и тут, конечно, не обошлось без машинного обучения (к слову, современные fintech-системы в принципе не могут уже обойтись без поддержки AI).

Вот он какой, ML-ансамбль
Вот он какой, ML-ансамбль

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

Модельная стратегия, на которой тестировалась эффективность работы системы, следующая. В начале периода (2011 г.) создаётся портфель акций, взвешенный по капитализации в соответствии с индексом MOEX. Далее каждую неделю производится ребалансировка портфеля в зависимости от рекомендаций алгоритма: бумаги с «хорошим» новостным фоном покупаются, а бумаги с «плохим» — продаются.

Брокерские и биржевые комиссии (как и налоги) в тестах не учитывались, но представляется, что эффект получается достаточным для их покрытия.

Все любят красивые дашборды и графики

Я Глеб Зуев, учусь в лицее № 1535. В проекте BOSS отвечал за визуализацию полученных данных и вывод их пользователю на экран в понятной человеку форме. Сначала данные симулировались, а на их основе выстраивался график нужного вида. Казалось бы, что сложного построить и вывести на экран график? Но мне пришлось попотеть.

Вот так выглядит сведённый график
Вот так выглядит сведённый график

Некоторые графики были слишком тяжеловесными. Массив данных был огромен, из-за чего он долго загружался при запросе. В итоге решили конвертировать некоторые графики сразу в HTML-код. Кроме того, я написал первоначальный прототип приложения, который был представлен на финальной предзащите.

Что дальше?

Конечно, простор для улучшений и дополнений такой системы просто огромен.

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

С другой стороны, есть множество вариантов для улучшения софтверной части. Порог принятия решения BUY/SELL можно сделать адаптивным (сейчас он фиксирован) — такая модуляция по времени пригодилась бы во времена кризисов, когда на рынках высокая волатильность и решения нужно принимать более осторожно. Сам классификатор тоже можно реализовывать по-разному — например, с использованием модели случайных весов.

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

Источник: https://habr.com/ru/company/vtb/blog/574524/


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

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

Мы готовились к выходу Java 15 ради некоторых её новых возможностей. В частности — текстовых блоков. Да, они появились в Java 14 (о новых функциях в Java 14 можно посмотр...
Всем привет. Если вы когда-либо работали с универсальными списками в Битрикс24, то, наверное, в курсе, что страница детального просмотра элемента полностью идентична странице редак...
Хотелось бы поделиться своей историей неудачи, если понимать под этим негативный фидбек от компании после ревью технического задания. Конечно же, каждый подобный опыт — это всегда пре...
Изображение: Unsplash Ситуация, при которой финансовые и фондовые рынки снижаются на протяжение достаточно длительного времени, называют «медвежьим рынком». Портал Investopedia рассмотрел не...
VUE.JS - это javascript фрэймворк, с версии 18.5 его добавили в ядро битрикса, поэтому можно его использовать из коробки.