Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя
Специалист по data science  · 14 июн 2022

Проект по курсу MLOPs - Разработка алгоритма кластеризации активов для построения торговой стратегии.

Финансовая индустрия – это сектор, который очень активно использует методы машинного обучения для решения разнообразных проблем. Одно из популярных направлений, которое требует ИТ-решений, это портфельный менеджмент. Ниже представлены основные области применения ИТ-технологий:
  • Системы создания торговых стратегий – анализ и поиск закономерностей, предсказательная аналитика;
  • Системы реализации сделок (инструменты реализации стратегии) – сигналы, алгоритм. трейдинг;
  • Системы мониторинга - продвинутая аналитика BI – дашборды, показывают потоки в режиме реального времени;
  • Системы репортинга – различные подходы к автоматизированному формированию отчетности по ключевым показателям (доходность и др.);
Фундаментальным этапом портфельного менеджмента является выбор торговой стратегии, так как от нее будет зависеть весь процесс формирования и управления портфелем: диверсификация, хеджирование, управление рисками, соответствие политике фонда и инвесторов (ESG, Legal agenda и т.п.).
Одним из возможных элементов торговой стратегии является кластеринг ценных бумаг для объединения активов с похожим поведением. Дальнейшее использование полученных групп может быть разным в зависимости от риск-аппетита клиента, команды портфельного менеджмента и др.
Кластеринг в сфере финансов это в первую очередь работа с временными рядами, а именно с данными о стоимости активов за установленный промежуток времени. На сегодняшний день существует три основных подхода к кластеризации временных рядов:
  • shape-based - подход, основанный на сравнении структуры временных рядов и их формы. Для данного метода очень важно выбрать правильную метрику оценки расстояния временного ряда. Чаще всего используется алгоритм динамической трансформации временной шкалы (dtw - dynamic time warping), способный сравнивать ряды разной длины и находить оптимальное соответствие между двумя заданными последовательностями.
  • feature-based - подход, который использует для кластеризации признаки, полученные из временного ряда различными методами (метод главных компонент, расчет корреляционных матриц и др.). Обычно при таком подходе для оценки расстояния используется евклидово расстояние. 
  • model-based - подход, использующий различные модели (ARIMA, ARMA, HMM и др.) для описания временных рядов. Последовательности считаются похожими, если модели, характеризующие отдельные ряды, аналогичны.
Кластеризация рядов в описанных выше методах зачастую осуществляется стандартными алгоритмами:
  • Иерархическая кластеризация - последовательное объединения отдельных объектов в более крупные подгруппы, или наоборот разбиение одной группы на более мелкие кластеры. Используемые метрики расстояния: single, complete, ward и т.д.
  • Метод k-средних - поиск максимально удаленных друг от друга k центров (центроидов) в общей группе для разбиения на k кластеров. Используемые метрики расстояния: euclidean, dynamic time warping.
Схема, которая может быть реализована в контексте портфельного менеджмента с помощью описанных выше подходов выглядит следующим образом:
  • Поиск кластеров среди выбранных для инвестиций активов
  • Выделение наименее коррелированных кластеров
  • Моделирование перфоманса с учетом различных рыночных тенденций
Данный алгоритм позволит диверсифицировать инвестиционный портфель, т.е. распределить средства в портфеле между разными активами с целью уменьшения рисков, а также может быть использован для пересмотра структуры портфеля (ребалансировки).
Для реализации схемы необходимо:
  • Выбрать активы для анализа и собрать базу данных с информацией о стоимости за определенный промежуток времени. Ресурсы для поиска: а) платные платформы: bloomberg, refinitiv, б) открытые данные: yfinance, iex.cloud.
  • Кластеризовать активы с помощью выбранной модели
  • Проанализировать полученные результаты, на их основе построить торговую стратегию
Цель данного проекта: разработать алгоритм для эффективной кластеризации активов.
Для проведения исследования были выбраны акции Европейских и Североамериканских компаний с рыночной капитализацией выше 300M$. Их список был взят с сайта фондового рынка Nasdaq. Всего таких акций оказалось около 1700. Информация о стоимости акций была собрана с помощью python пакета yfinance и сайта yahoo finance.
Ниже на картинке представлены результаты анализа полученной базы данных.
Для дальнейшей работы использовались только акции с полной информацией о ценах за период с 2018 по 2022 года. Финальная база данных включает в себя информацию по 926 акциям.
После подробного анализа описанных выше методов и метрик, была разработана схема кластеризации, состоящая из трех этапов.
  • Первый этап (terminal clustering): Иерархическая кластеризация; метрика расстояния - ward; в качестве признаков рассчитывается корреляционная матрица доходностей акций; размер финальной дендрограммы контролируется с помощью метрики silhouette. 
  • Второй шаг (special clustering): Кластеризация полученных групп с помощью методов k-means и dynamic time warping. Решение о разбиение принимается после вычисления схожести метрикой silhouette и сравнение ее значения с заранее заданным минимальным значением
  • Третий шаг (concatenating): Полученные кластеры проверяются на схожесть с помощью метрики silhouette и объединяются, если его значение ниже заданного (значение коэффициента меньше нуля означает, что активы скорее всего были отнесены к неправильным кластерам)
На данной стадии исследования оценка качества кластеризации для выбора наилучших параметров осуществляется с помощью анализа построенных графиков доходности активов для каждой группы.
Описанный выше алгоритм был применен для анализа собранной базы данных. В результате из 926 стоков было сформировано 45 кластеров. Ниже представлены графики средней доходности для каждого из них.
А также примеры нескольких кластеров:
Описание MLOps подходов 
Для системы версионирования кода был выбран сервис gitlab, а в качестве рабочего процесса использовался подход github flow
Шаблонизации структуры проекта была выполнена на основе cookiecutter data science template
Используемые автоформатеры и линтеры: Black, flake8 и mypy
В качестве workflow менеджера был выбран DVC. В процессе исследования необходимо визуализировать и сохранять полученные графики кластеров. Чтобы не хранить картинки и базы данных в репозитории, они помещаются в хранилище файлов (google drive
Для трекинга метрик и оптимизируемых параметров была выбрана платформа mlflow. Также на сервер передаются наиболее важные артефакты для удобного анализа.
Для проверки корректной работы пайплайна были написаны тесты, запуск которых осуществляет pytest 
Описание CI пайплайна
  • Проверка типов: mypy
  • Проверка codestyle: flake8 
  • Запуск автотестов: pytest
Описание получившегося продукта
Схема DVC пайплайна:
Технологический стек
  • Язык разработки: Python 3.9
  • ML-стэк: sklearn, pandas, numpy, scipy, tslearn
  • Менеджер пакетов: pip
  • Менеджер виртуального окружения: venv
  • Шаблон: cookiecutter-data-science
  • Автоформаттер: black
  • Линтер: flake8
  • Инструмент контроля codestyle – mypy
  • Workflow managers: DVC
  • Трекинг экспериментов – mlflow
  • Тестирование: pytest
Недостатки и возможные улучшения
  1. Отсутствует контейнеризация с Docker, в будущем планируется это исправить
  2. Планируется написание дополнительных тестов
  3. Для уменьшения шума в конечных кластерах готовится имплементация дополнительной стадии: поиск аутлаеров.
Описание ролей в команде
Разработчик проекта - Вареников Георгий
Супервайзер - Тихонова Дарья
Ссылка на репозиторий: gitlab