Стажировка
AI-прогнозирование финансовых активов с учётом макроэкономических факторов
ООО «Алгофьюжн»
Python, pandas, NumPy, scikit-learn, TA-Lib, statsmodels (ARIMA), Prophet, XGBoost/LightGBM/CatBoost, PyTorch/Keras (LSTM, GRU, TCN, TFT), Optuna, AutoTS/AutoGluon, Docker, GitHub
используемый стек
1. Подготовка данных
Очистка, объединение котировок и макроданных, формирование признаков (индикаторы, лаги, окна)
2. Моделирование
Обучение и сравнение ARIMA/Prophet, XGBoost/LightGBM/CatBoost, LSTM/GRU/TCN/TFT; настройка walk-forward/rolling валидации
3. Оценка и отбор решений
Анализ метрик (MAE, MAPE, Directional Accuracy), выбор устойчивых конфигураций и признаков
4. Прикладной контур (прототип)
Подготовка пайплайнов для интеграции в интерфейс (Streamlit/FastAPI) и ежедневной отчётности по метрикам
Основные задачи
  1. Исторические котировки: Open, High, Low, Close, Volume
  2. Макроэкономические индикаторы: ВВП, инфляция (CPI), процентные ставки, уровень безработицы, PMI
  3. Дополнительные признаки: технические индикаторы (SMA, EMA, RSI, MACD), индексы страха, Google Trends, новости
  4. Формат: CSV-файлы и выгрузки от заказчика
  5. Частота: дневная
  6. Активы:
  • Акции РФ: Сбербанк (SBER), Газпром (GAZP), Лукойл
  • Акции США: Apple (AAPL), Tesla (TSLA)
  • Валютные пары: USD/RUB, EUR/USD, CNY/RUB
исходные данные
Создание прототипа интеллектуальной системы, прогнозирующей направление и диапазон дневного движения финансовых активов (акции, валюты) на основе исторических рыночных данных и макроэкономических показателей. Система должна учитывать факторы сезонности, инфляции, процентных ставок и новостного фона, а также обеспечивать интерпретацию решений моделей и визуализацию прогнозов в удобном интерфейсе.
ЦЕЛЬ проекта
В рамках стажировки не только обучали модели, но и строили инфраструктуру:
● Разработан модульный ML-конвейер (по сути — «конструктор моделей»):
  1. блоки загрузки данных (FileLoader), построения признаков (FeatureEngineer), разметки (DataLabeler), сплитов (DataSplitter), обучения (ModelTrainer) и бэктеста (Backtester на vectorbt)
  2. единый интерфейс для разных моделей (LightGBM, LSTM и др.) через фабрику моделей
  3. поддержка YAML-конфигураций (режимы search/train/finetune, выбор активов, целей и метрик)
● Настроены компоненты логирования и экспериментов:
  1. интеграция с MLflow, Optuna (в т.ч. с персистентным хранилищем экспериментов)
  2. сохранение артефактов (npz, joblib, json), графиков, HTML-отчётов vectorbt и CSV-логов сделок
● Подготовлена основа для:
  1. ежедневной генерации отчётов по MAE/MAPE/DA
  2. переноса лучших пайплайнов в Streamlit/REST-интерфейс и дальнейший real-time
3. Инфраструктура и пайплайны
● Построены и протестированы базовые модели:
  1. ARIMA / Prophet как референсные тайм-серийные baseline
  2. модели бустинга (XGBoost, LightGBM, CatBoost) для регрессии и классификации
● Развёрнут широкий пул нейросетевых моделей:
  1. LSTM, GRU, Conv1D/TCN и Temporal Fusion Transformer (TFT) для учёта сложных временных зависимостей
  2. эксперименты с AutoML-подходами (AutoTS, AutoGluon) для автоматического подбора архитектур
● Реализованы схемы rolling / walk-forward валидации, позволяющие:
  1. тестировать модели на длинных исторических периодах
  2. оценивать устойчивость качества во времени, а не только на одной фиксированной выборке
2. Модели и экспериментальная платформа
По результатам множества экспериментов:
● Для задач направления движения (Directional Accuracy):
  1. устойчиво достигнут уровень ≈70–75% DA на ряде активов и конфигураций
  2. на отдельных сценариях (GRU, HL-first по EUR/USD, многомасштабные признаки, дифференциальные фичи) фиксировались значения до ~73–75% и выше
● Для задач прогноза High/Low:
  1. на некоторых конфигурациях (Газпром, дифференциальные признаки) достигнута точность до ≈86% по Low и ≈75% по High
  2. по ряду бумаг MAE держится на уровне 0.29–0.54%, что укладывается в требования заказа (ошибка диапазона дневной свечи ≤ 0.5% на приоритетных активах)
● Показано, что на реальных данных:
  1. многомасштабные признаки (дневные + недельные свечи) и производные фичи (скорость/ускорение, волатильность) дают заметный прирост качества
  2. влияние макрофакторов и новостей носит фазовый характер — модели чувствительны к режимам рынка и экономическим циклам
  3. существует естественный «потолок» качества в районе 70%+ DA для волатильных активов, и это нужно учитывать в бизнес-ожиданиях
4. Качество моделей и ключевые выводы
5. Заложенная база для «цифрового советника»
● Сформированы рекомендации по признакам и архитектурам:
какие фичи и модели работают лучше для акций vs валют, для направления vs диапазона и т.п.
● Подготовлены готовые ноутбуки и пайплайны, которые можно:
  1. обернуть в Streamlit-панель с настройками параметров и визуализациями
  2. подключить к FastAPI/REST-слою и источникам живых данных
● Начат контур интеграции новостной и LLM-составляющей (новостные эмбеддинги, внешние данные, идеи GraphRAG) как надстройки к ценовой модели
  • Собран и унифицирован единый формат данных для нескольких активов (акции РФ/США, валютные пары) с привязкой к дате и тикеру
  • Реализованы пайплайны предобработки:
  1. очистка пропусков и дубликатов, сортировка по времени
  2. генерация технических индикаторов (SMA/EMA, RSI, волатильность, диапазон свечи High–Low и др.)
  3. добавление макрофакторов (инфляция, ставки, облигации, индексы) и их синхронизация по датам
  4. формирование лагов, окон и дифференциальных признаков (скорость/ускорение цены) и многомасштабных фич (дневные + недельные свечи)
  • Подготовлены отдельные датасеты под разные постановки задач: прогноз High/Low, направление тренда, HL-first (кто раньше пробьётся — High(D−1) или Low(D−1))
  1. Данные и feature engineering
Что разработано и какие результата получены
Участники
команды проекта
  • Кус Николай
    Тимлид проекта
    • Руководил командой разработчиков на всех этапах проекта
    • Организовывал планирование задач, контролировал их выполнение и соблюдение сроков
    • Обеспечивал эффективную коммуникацию внутри команды и с заказчиком
  • Елена Михно
    помощник тимлида
    • Помогала в организационных вопросах по проекту
    • Инициировала и проводила дополнительные встречи стажеров, наставляла и обучала менее опытных сотрудников
  • Сегал Эмма
    помощник тимлида
    • Помогала в организационных вопросах по проекту
    • Инициировала и проводила дополнительные встречи стажеров, наставляла и обучала менее опытных сотрудников
  • Михаил Кудряшов
    помощник тимлида
    • Помогал в организационных вопросах по проекту
    • Инициировал и проводил дополнительные встречи стажеров, наставлял и обучал менее опытных сотрудников
  • Дмитрий Степановский
    стажер
    • Разработал полный ML-пайплайн на основе LSTM с attention и Conv1D: подготовка и нормализация временных рядов, нарезка обучающих выборок, сохранение и визуализация результатов
    • Подключил внешние макроданные (ставки ЦБ, инфляция, индекс доллара, нефть) и проверил их влияние на качество прогноза
    • Провёл серию экспериментов в режимах регрессии и классификации, использовал Optuna (сотни–тысячи trials) для подбора архитектур; показал, что при низком MAE направление движения (DA) остаётся в районе ~55%
    • Построил систему конфигураций, логирования и оркестрации экспериментов, аккуратно вёл GitHub-репозиторий, структурировал код, метрики и графики
    • Сформировал выводы о слабых сторонах LSTM-архитектур в задаче предсказания направления и ограничениях данных, участвовал в обсуждении интеграции своих наработок в «фабрику» моделей
  • Алексей Козлов
    стажер
    • Построил и отладил полный модульный пайплайн: FileLoader → FeatureEngineer → DataLabeler → DataSplitter → ModelTrainer → Backtester (vectorbt) с единой точкой входа через ModelFactory
    • Создал адаптеры для LightGBM и Keras LSTM, обеспечив единый интерфейс для разных семейств моделей и поддержку AutoML (Optuna, AutoTS)
    • Внедрил YAML-конфиги с режимами search/train/finetune, динамический выбор целей (Close/High/Low), расширенный набор метрик (DA, Sharpe, MAE, MSE, R²) и логирование в MLflow
    • Настроил кеширование артефактов (.npz, .json, .joblib), фильтрацию «наивных» моделей, защиту от data leakage, персистентность Optuna (SQLite) и автоматический экспорт графиков, HTML-отчётов и CSV-логов сделок
    • Один из ключевых архитекторов инфраструктуры: повысил стабильность, универсальность и масштабируемость решений, дорабатывал AutoTS-компонент и исследовал влияние состава индикаторов на итоговые метрики
  • Алексей Крючков
    стажер
    • Обогатил датасет признаками уровня рынка: VIX, доходности 10- и 2-летних трежерис и их разница (индикатор инверсии кривой доходности), тестировал AutoGluon TS (PatchTST, TFT и др.) на лог-доходностях
    • Сфокусировался на Temporal Fusion Transformer (TFT) и RL SAC для AAPL: подбирал длину окна и состав признаков, добиваясь DA до ~65% на отдельных сценариях и ~67% на расширенных конфигурациях
    • Объединил временные ряды AAPL и TSLA в единый датасет, показав, что более широкий контекст даёт прирост DA примерно на 4 п.п. по сравнению с одиночной бумагой
    • Собрал ноутбук с LGBM для прямого сравнения с TFT и RL, измерял MAE (в абсолютных и относительных значениях), DA и R², отдельно контролировал консистентность предсказаний High > Low
    • Разработал схему фильтрации сигналов по квантильным предсказаниям TFT: сократил количество сделок, но поднял win_rate по отфильтрованным сигналам до >80% (63 сделки на ~286 сессий), показав практическую ценность модели
  • Александр Азевич
    стажер
    • Построил baseline-решения на Prophet для AAPL и EUR/USD: подготовил OHLCV-данные, ввёл разметку по направлению и диапазону, оценил MAE, RMSE и DA (~50–54%), показав ограничения Prophet как единственной модели
    • Сформулировал и реализовал задачу HL-first: кто первым в дне D пробьёт High(D−1) или Low(D−1); собрал H1-датасеты с 48-часовым контекстом и обучил GRU-модель с 10 признаками
    • Настроил walk-forward валидацию на длинной истории (до 10 лет EUR/USD), достиг Accuracy ≈ 0.71, AUC ≈ 0.77 и F1 ≈ 0.71, детально разобрал матрицу ошибок и влияние «новостных» дней
    • Разработал новостной модуль: сбор и нормализация RSS, оценка bias в пипсах и strength по категориям (risk, policy, macro, geopol, energy), смещение диапазона High/Low и расчёт вероятностей пробоя уровней, экспорт в отдельные CSV
    • Построил конвейер обработки новостей с эмбеддингами e5, Qdrant (HNSW-индекс) и Neo4j (граф Message→Entity), создав базу для GraphRAG и гибридного поиска по времени, событиям и рыночным реакциям
  • Алексей Семин
    стажер
    • Восстановил структуру «сырых» CSV (без заголовков), добавил тикер/дату, отсортировал данные по времени и провёл полную предобработку
    • Реализовал feature engineering: SMA(20), RSI(14), целевые переменные Close_next_day и target_direction, подключил реальные макроданные ЦБ РФ (инфляция, ключевая ставка), привёл их к дневной частоте и объединил с рыночными данными в единый df_enhanced.csv
    • Экспериментировал с широким спектром моделей: ARIMAX/Prophet, LSTM/GRU, XGBoost, N-BEATS, DeepAR, TCN, AutoML-решения; строил лидерборды по MAE и DA на горизонтах T+1/T+3/T+5
    • Тестировал ансамбли и подходы с генетическими алгоритмами разметки, изучал балансировку классов, важность признаков, влияние автокорреляции и нестабильных фич на итоговые метрики
    • Проводил интерпретацию через SHAP (для LSTM), сравнивал стратегии классификации направлений и практически полностью закрыл учебные материалы стажировки, перенеся их идеи в свои эксперименты
  • Диана Семёнова
    стажер
    • Изучала влияние архитектур LSTM и Transformer на задачу классификации направления движения цены; выбрала EUR/USD как базовый инструмент анализа
    • Собрала и расширила собственный датасет: базовые ценовые ряды + данные по банковским ставкам (EUR и USD), подготовила выборки с лагами, техническими индикаторами и масштабированием признаков
    • Проводила серию экспериментов с различными нейросетевыми архитектурами (в т.ч. LSTM) на базовом и обогащённом датасетах, сравнивая качество по DA и MAE
    • Готовила данные и код для AutoML-подходов (AutoTS, FEDOT) для прогноза High, но столкнулась с техническими ограничениями (проблемы установки и зависимостей)
    • Участвовала в тестировании гипотез других участников и в анализе поведения моделей на разных таймфреймах, обогащая общую картину по нейросетевым подходам
  • Артём Химин
    стажер
    • Начал с задач регрессии по min/max, протестировал Dense, Conv1D и LSTM, обнаружил сильную автокорреляцию и ограничения такого подхода на исходных данных
    • Перешёл к бинарной классификации (рост/падение) на Conv1D и LSTM; с агрессивным тюнингом гиперпараметров получал accuracy до 90–95% (осознанно фиксируя признаки переобучения)
    • Изучал влияние нормализации, выбора фич и длины окна на стабильность классификации, анализировал автокорреляции признаков и зависимость качества от глубины модели
    • Установил и активно использовал TradingSolutions, сравнивая поведение встроенных моделей и своих ноутбуков, проверяя качество данных и консистентность результатов
    • Тестировал LSTM, Transformer и TimeSeries Transformer (с Optuna) на задаче направлений, выходя на DA порядка 0.54–0.56 и связывая это с фундаментальными ограничениями данных
  • Вадим Чумаченко
    стажер
    • Изучал и пытался воспроизвести генетические алгоритмы разметки и отбора сетей по материалам УИИ, сталкиваясь с ограничениями памяти в Colab и вынося вычисления на локальную GPU-машину
    • Проводил предобработку временных рядов: лаги, скользящие средние, фильтрацию выбросов, сглаживание и расширение набора технических индикаторов
    • Реализовал LSTM-модель в PyTorch (2 LSTM-слоя + линейный выход) с признаками Close, Volume, Returns, EMA_10, EMA_50, Volatility, Volume_EMA, RSI, MACD, Price_Range, получив MAE ~2.41
    • Ввёл метрику Directional Accuracy (DA) в свой пайплайн и поднял её с ~51% до ~57% за счёт тюнинга архитектуры и гиперпараметров, а затем до ~59% — за счёт увеличения числа слоёв и набора фич
    • Анализировал нестабильность MSE/DA на имеющемся датасете, обсуждал с командой проблему «ленивых» моделей и предлагал идеи по декомпозиции и выборке признаков на уровне подмножеств фич
  • Виталий Соколовский
    стажер
    • Проводил анализ готового решения и параллельно вёл собственные исследования по обогащению данных и выбору моделей для акций и валют
    • Экспериментировал с признаками: скользящие средние, волатильность, RSI и другие индикаторы на разных таймфреймах (H1, D1), работал с предобработкой OHLCV
    • Строил и сравнивал модели LSTM, классический ML (например, XGBoost) и Prophet, а также AutoTS/AutoML-подходы, оценивая их по MAE и Directional Accuracy
    • Проверял гипотезы о зависимости DA от длины окна, плотности сигнала и набора признаков, постепенно усложняя конфигурации моделей
    • Начал эксперименты с моделями RNN/LSTM для учёта сложных временных зависимостей (в т.ч. по Low), расширял набор конфигураций и фиксировал динамику улучшения/ухудшения метрик
  • Рифкат Загидуллин
    стажер
    • Подготовил и развивал проект кода по сбору и предобработке финансовых и новостных данных, включая внешние источники (в т.ч. Just2Trade)
    • Доработал скрипты загрузки внешних данных, стабилизировал их работу и тестировал интеграцию обогащённой базы в общие ML-пайплайны
    • Разрабатывал пайплайн запуска локальной LLM (Gemma 3:4B): от настройки окружения (VS Code, Python 3.10, зависимости) до корректной обработки запросов
    • Выполнил интеграцию локальной LLM в «фабрику» моделей, устранил критические ошибки, привёл формат метрик в соответствие с ТЗ и оптимизировал производительность
    • Исследовал применимость локальных LLM к задачам семантического поиска и новостного контекста в трейдинге, тестировал генерацию подсказок/объяснений на исторических данных
  • Денис Калюжный
    стажер
    • Анализировал готовое решение заказчика и его программу, чтобы перенести успешные идеи и настройки в командные ML-модели
    • Экспериментировал в TradingSolutions: подбирал метрики и режимы для корректного сравнения встроенных моделей с внешними пайплайнами
    • Тестировал различные варианты предобработки: добавление свечных данных с других таймфреймов (часового, недельного), фильтрацию выбросов, сглаживание, использование производных (дельта, градиент, вторая производная, скорость изменения)
    • Исследовал влияние этих усложнений на устойчивость метрик (MAE, DA), показал, что на текущем датасете улучшения не достигаются и фактически достигнут «потолок» качества
    • Участвовал в аналитике проблем датасета (нестационарность, смещения, слабый сигнал) и сопоставлял результаты с решениями коллег и подходами с хакатонов
  • Дмитрий Горбиков
    стажер
    • Экспериментировал с простыми CNN и LSTM в задачах регрессии по исходным данным, затем расширил эксперименты на прогноз High/Low
    • Установил и использовал TradingSolutions: провёл несколько тестов нейросетевых моделей для предсказания High/Low и сравнил результаты с внешними ML-подходами
    • Применял Optuna для подбора гиперпараметров, фиксируя, что текущие комбинации данных и архитектур пока не позволяют выйти на целевые метрики
    • В финале перенёс и воспроизвёл подходы коллег (например, TFT и решения Виталия) на своём датасете, чтобы честно сравнить качество и устойчивость разных архитектур
    • Участвовал в обсуждении влияния качества исходных данных, горизонта прогнозирования и выбора метрик на итоговый результат
  • Александр Кириллов
    стажер
    • Строил модели на RandomForestRegressor (включая RandomizedSearchCV и GridSearchCV), MultiOutputRegressor, XGBoost и CatBoost для задач предсказания High/Low и направления движения
    • Подбирал гиперпараметры и наборы признаков (техиндикаторы, статистические преобразования), сравнивал устойчивость и качество моделей по нескольким метрикам
    • Для XGBoost по Close искал оптимум по Directional Accuracy, достигнув DA ≈ 0.5972, что зафиксировал как «порог» для текущей комбинации данных и признаков
    • Проводил эксперименты с AutoML-подходами, но стабильно поднимать DA выше ~0.52 не удалось, что стало аргументом в пользу более сложных признаковых пространств и/или нейросетевых архитектур
    • Сформулировал выводы о ограничениях классического градиентного бустинга на шумных данных и необходимости гибридных стратегий (ML + нейросети)
  • Татьяна Ланцева
    стажер
    • Собрала датасет по акциям Мосбиржи (в первую очередь Сбербанк): загрузка данных от биржи и заказчика, EDA, анализ стационарности и сезонности, формирование предварительных выводов
    • Исследовала влияние временных, дивидендных, макроэкономических и индексных факторов на качество предсказаний, тестируя их на российских бумагах (Сбер, Сбер-п, Лукойл, Газпром и др.)
    • Разработала универсальный загрузчик данных с Мосбиржи с обработкой пропусков, дублей столбцов и логированием, поддержкой различных тикеров и таймфреймов
    • Настроила код для подбора лучшей модели через Optuna с проверкой утечек, формированием отчётов и сохранением лучших моделей, реализовала вывод отчётов в Excel и прогнозов на день вперёд для ручной проверки
    • Экспериментировала с моделями (в т.ч. LSTM и Prophet), сравнивала их поведение на разных инструментах и горизонтах, вносила вклад в сравнительный анализ решений по российскому рынку
  • Григорий Бабинцев
    стажер
    • Занимался сбором и подготовкой дополнительных данных с внешних финансовых ресурсов, в том числе котировок и данных по CNHUSD у разных брокеров
    • Изучал подходы ИИ в трейдинге, разбирал практические примеры и библиотеки, запускал и анализировал код из учебных ноутбуков
    • Проводил эксперименты по обогащению выборок дополнительными признаками и оценивал, как это отражается на метриках (в т.ч. DA)
    • Работал с Python-инструментами для загрузки, очистки и анализа данных, отдельно отслеживал влияние выбранных признаков на качество классификации/прогноза
    • Участвовал в обсуждении проблем качества данных и возможных методик улучшения (фильтрация, альтернативные источники, стратификация)
  • Денис Федченко
    стажер
    • Расширил исходный датасет до ~200 признаков, добавив широкий набор технических индикаторов и фундаментальных факторов
    • Собрал отдельный датасет из процентных лагов за последние 5 дней с целевыми переменными High и Low следующего дня
    • Обучил RandomForestRegressor на этом датасете, получил нетривиальные (интересные для анализа) результаты и начал их визуализировать, готовя код к выкладке на GitHub
    • Продолжает подбирать метрики и экспериментировать с автоматическим сбором и структурированием признаков, ищет конфигурации, улучшающие DA и MAE
  • Андрей Козиков
    стажер
    • Написал скрипт для разметки данных по выбранному столбцу, автоматизировал расчёт технических индикаторов по разным ценовым сериям
    • Проверил модели LSTM и Random Forest на обогащённом датасете, расширив набор признаков и оценивая их влияние на качество
    • Реализовал Walk-Forward Validation, обеспечив корректную временную валидацию и сравнение стабильности моделей по мере движения по истории
    • Дополнил общую картину по классическому ML и нейросетям в условиях временных рядов, предоставив воспроизводимый пайплайн для дальнейших экспериментов