Zero-Infrastructure для Data Science: как я перенес расчет абсолютных валютных курсов на Kaggle и автоматизировал обзоры через Gemini API
Коллеги, приветствую.
В этой публикации я хочу поделиться практическим опытом построения полностью автономного аналитического пайплайна. Система работает без выделенных серверов, не требует затрат на инфраструктуру и самостоятельно генерирует ежедневные обзоры рынка.
В рамках своего проекта Abscur я много лет занимаюсь расчетом абсолютных курсов валют. Проблема классического Forex или котировок Мосбиржи в том, что все привычные нам курсы относительны (USD/RUB, EUR/USD). Если валютная пара растет, сложно с ходу понять: это базовый актив укрепляется или котируемая валюта падает?
Математическая декомпозиция матриц кросс-курсов позволяет очистить 45 мировых валют от взаимного влияния и привести их к единому независимому измерителю — невзвешенной расчетной единице ABS. На выходе мы получаем чистые ряды данных, по которым гораздо объективнее можно считать волатильность, коэффициенты вариации (), просадки (
) и реальную доходность акций без рыночного и рублевого шума.
Историческая база проекта охватывает уже 20 лет, но долгое время цепочка обновления данных требовала ручных действий или локального запуска скриптов. Ниже я подробно разберу, как удалось перевести систему на рельсы полной автономности по схеме «Zero-Infrastructure».
1. Вычисления по расписанию: Kaggle как бесплатный cron
Разворачивать выделенный Linux-сервер ради одного ежедневного расчетного таска избыточно. В качестве среды исполнения я выбрал Kaggle Notebooks. Это дает стабильное окружение, готовый стек предустановленных Data Science библиотек (pandas, numpy, scipy) и, самое главное, встроенный планировщик задач (scheduled runs).
Каждые сутки Kaggle-инстанс инициализирует выполнение Python-скрипта, который выполняет математическую часть пайплайна:
Парсинг и агрегация: Скрипт собирает свежий пул кросс-курсов и финансовых маркеров из открытых источников.
Матричные вычисления: Мы логарифмируем матрицу кросс-курсов, переводим относительные изменения в систему линейных уравнений и методом наименьших квадратов находим изолированные векторы значений для каждой валюты.
Расчет индикаторов: На базе полученных абсолютных рядов вычисляются скользящие средние (
,
), показатели исторической волатильности и специфичные метрики, такие как индекс относительной силы абсолютного курса —
(в дополнение к стандартному рублевому).
2. Контент-генерация: интеграция Gemini API
Таблицы и сырые массивы JSON малопригодны для быстрого чтения. Чтобы автоматизировать интерпретацию данных и исключить человеческий фактор при подготовке публикаций, в пайплайн был встроен Gemini API.
Через защищенные переменные окружения (Secrets в среде Kaggle) скрипт передает нейросети выжимку рассчитанных технических индикаторов по ключевым глобальным валютам, товарам и крупнейшим акциям Мосбиржи (включая Сбербанк, ГМК Норникель и др.), подкрепляя их агрегированными новостными заголовками за день.
Промпт настроен жестко и работает в режиме системного аналитика: никакого прогнозирования «по кофейной гуще», субъективных мнений или лишней «воды». На выходе генерируется строго структурированный технический текст на стыке математики абсолютных курсов и классического теханализа.
3. Бессерверный деплой: GitHub и Blogger
Как доставить рассчитанные данные и тексты до конечного пользователя без постоянной базы данных и бэкенда?
Скрипт формирует итоговые JSON-файлы (для построения графиков) и сгенерированные текстовые обзоры, после чего через GitHub API пушит их напрямую в репозиторий проекта.
На стороне сайта (который развернут на платформе Blogger) фронтенд на JavaScript подтягивает свежие JSON-структуры из репозитория и динамически перерисовывает интерактивные графики, таблицы портфелей (оптимизированные по Шарпу и Сортино) и текст обзора.
Цепочка полностью замкнулась:
Всё это происходит за несколько минут один раз в сутки без участия человека и платных серверов.
Исходный код и описание методики:
С подробным математическим обоснованием модели декомпозиции кросс-курсов можно ознакомиться в статье: Abscur: Описание методики расчета
Рабочий Python-скрипт пайплайна полностью открыт, его можно изучить или форкнуть в репозитории: Kaggle Notebook: abscur2
Буду рад обсудить в комментариях математические нюансы изоляции валютных рисков, методы декомпозиции матриц, а также подводные камни при построении долгоживущих автономных скриптов в облачных Data Science средах.
akakoychenko
Глянул по ссылке. Я прав, что при вычислении абсолютного курса вообще никак не учитывается капитализация каждой валюты?
Условно, украинская гривна или турецкая лира входит в уравнение на условиях, аналогичных американскому доллару? И их падение приводит одновременному росту всех остальных валют, хоть, реальный вес обоих и околонулевой, применимо к глобальной стоимости одного доллара?