В среде «взрослых» разработчиков есть предубеждение, что проекты, которые сделаны школьниками несерьёзные и вообще не дело это — давать детям настоящую разработку. Так вот у ВТБ другое мнение. Мы работаем над поддержкой молодых талантов, помогаем им развиваться и считаем, что именно созданные школьниками и студентами наработки в будущем помогут развитию российской экономики.
Ниже о проекте 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-ансамбля стали исторические данные Московской биржи. При этом для обучения брался интервал с переменной верхней границей: окно для сбора данных расширялось с ходом времени. Это важно для того, чтобы правильно оценивать результаты симуляций, о которых пойдёт речь дальше.
Модельная стратегия, на которой тестировалась эффективность работы системы, следующая. В начале периода (2011 г.) создаётся портфель акций, взвешенный по капитализации в соответствии с индексом MOEX. Далее каждую неделю производится ребалансировка портфеля в зависимости от рекомендаций алгоритма: бумаги с «хорошим» новостным фоном покупаются, а бумаги с «плохим» — продаются.
Брокерские и биржевые комиссии (как и налоги) в тестах не учитывались, но представляется, что эффект получается достаточным для их покрытия.
Все любят красивые дашборды и графики
Я Глеб Зуев, учусь в лицее № 1535. В проекте BOSS отвечал за визуализацию полученных данных и вывод их пользователю на экран в понятной человеку форме. Сначала данные симулировались, а на их основе выстраивался график нужного вида. Казалось бы, что сложного построить и вывести на экран график? Но мне пришлось попотеть.
Некоторые графики были слишком тяжеловесными. Массив данных был огромен, из-за чего он долго загружался при запросе. В итоге решили конвертировать некоторые графики сразу в HTML-код. Кроме того, я написал первоначальный прототип приложения, который был представлен на финальной предзащите.
Что дальше?
Конечно, простор для улучшений и дополнений такой системы просто огромен.
Во-первых, по части бизнес-процессов и данных: например расширение перечня тикеров и пополнение банка новостей. И конечно, усиление инфраструктуры, которая могла бы принимать значительно больший трафик.
С другой стороны, есть множество вариантов для улучшения софтверной части. Порог принятия решения BUY/SELL можно сделать адаптивным (сейчас он фиксирован) — такая модуляция по времени пригодилась бы во времена кризисов, когда на рынках высокая волатильность и решения нужно принимать более осторожно. Сам классификатор тоже можно реализовывать по-разному — например, с использованием модели случайных весов.
Проект создан по модульному принципу, и в будущем это позволит держать сразу несколько моделей-предикторов, предоставляя пользователю самому решать, каким из них воспользоваться. Мы будем рады узнать из ваших комментариев, что вы думаете о проекте и как бы сами подошли к его реализации. Также команда разработки с радостью ответит на ваши вопросы по проекту.