Как стать автором
Обновить
146.12

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

Время на прочтение5 мин
Количество просмотров3K

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

Ниже о проекте 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 можно сделать адаптивным (сейчас он фиксирован) — такая модуляция по времени пригодилась бы во времена кризисов, когда на рынках высокая волатильность и решения нужно принимать более осторожно. Сам классификатор тоже можно реализовывать по-разному — например, с использованием модели случайных весов. 

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

Теги:
Хабы:
Всего голосов 5: ↑4 и ↓1+7
Комментарии3

Публикации

Информация

Сайт
www.vtb.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия