На днях, а именно, 31 августа, вышла новая модель работы с временными рядами от Google – TimesFM-3 (Time Series Foundational Model).


Если вкратце, задача моделей семейства TimesFM – прогнозировать дальнейшее поведение системы на основе ретроспективных данных. Интересно, что для этого исследователи Google применяют токенизацию групп временных отсчетов, а сам трансформер TimesFM – decoder-only. Также в третьей версии TimesFM заявлена поддержка одновременно множественных переменных (multi-variate).


Так я был в отпуске и мне было скучно, я вспомнил про старую задачу полуторагодовалой давности: классификация сценариев поведения пользователя на основе данных энергопотребления. Сразу скажу, что задача ну совсем нетипичная для TimesFM – ведь эта модель была создана не для классификации, а для предсказания эволюции. Но, повторюсь, мне было скучно, а еще мне было интересно посмотреть, насколько быстро и качественно современные ИИ-агенты позволят мне решить эту задачу. В итоге получился экспресс-тест нескольких разных подходов к вайб-кодингу:

  1. Стандартный чат DeepSeek, которому скормил ссылку на GitHub Google Research и на свой прошлогодний колаб

  2. ИИ-агент OpenCode с подключением к LLM Nemotron 3.5-Lightning и Nemotron 3.0 Ultra

  3. ИИ-агент Freebuff

Все эти инструменты доступны бесплатно и поддерживают русский язык.

DeepSeek – быстро и сердито

DeepSeek, недолго порассуждав и поискав связанные страницы, довольно бодро (минут за пять) выдал мне следующий Colab. Предложенный подход заключается в разбиении массива отсчетов (в прошлый раз мы определили, что оптимальное количество точек для классификации равно 90) на ретроспективные и тестовые данные (45 и 45), по которым TimesFM пытался бы выделить признаки (среднее, стандартное отклонение, минимум, максимум, линейный тренд, среднее абсолютное изменение), и дерево решений (Decision Tree Classifier), которое, собственно, и классифицирует сценарий на основе этих признаков. Как водится, пришлось поправить (всего) две ошибки, чтобы ноутбук заработал и выдал следующую Confusion Matrix:

Результаты первого подхода к снаряду DeepSeek: выделение признаков с помощью TimesFM по 45 отсчетам + дерево решений
Результаты первого подхода к снаряду DeepSeek: выделение признаков с помощью TimesFM по 45 отсчетам + дерево решений

Для старта неплохо. Но можно лучше: использовать все 90 отсчетов для подсчета признаков (нам нет нужды делать предсказание и сравнивать с актуальными величинами), а также попросив DeepSeek изучить документацию по TimesFM и расширить набор доступных для классификации признаков (добавились квантили), получаем чуть лучший результат:

Стало лучше. Будем считать это baseline для данного эксперимента.
Стало лучше. Будем считать это baseline для данного эксперимента.

Любопытно, что, и как в случае с LightAutoML + FFT, самый хорошо определяемый сценарий - «бездействие» (Idle), только точность все же похуже, чем с переходом в частотное представление.

Еще любопытно, что DeepSeek написала код применения эмбеддингов — ну а вдруг у decoder-only трансформера есть функция эмбеддинга (если кто не понял, это сарказм). Что, в целом, логично для задачи классификации, но, увы, у TimesFM встроенной функции генерации эмбеддингов нет. В итоговый ноутбук я этот код по понятным причинам включать не стал.

DeepSeek – почти зачет. Код, после двух исправлений — рабочий. Быстро, дешево, результативно. Хотя и чуть хуже результата с FFT-преобразованием исходных данных.

OpenCode

OpenCode — кодинговый ИИ-агент с открытым кодом. «Из коробки» предлагает несколько нейронных сетей бесплатно. Можно также подключить свою собственную через oLLAMA – локально или на удаленном сервере. Сперва я попробовал Nemotron 3.5 Lightning. Агент за полтора часа попытался что-то сообразить, постоянно пытаясь создать новые папки вне пределов выделенного для проекта пространства, но итоговый .ipynb так и не получился.

Что-то агент намудрил в структуре JSON, описывающего ноутбук. Поэтому, как он старался - мы не узнаем.
Что-то агент намудрил в структуре JSON, описывающего ноутбук. Поэтому, как он старался - мы не узнаем.

Увы, но и с Nemotron 3 Ultra OpenCode не смог сделать читабельный .ipynb, и поэтому в итоге сошел с дистанции.

Freebuff

Freebuff – бесплатный ИИ-агент, предоставляющий подписку на премиальные LLM за счет показа рекламы. Будет интересно посмотреть, будет ли он работать в России, но в Турции, куда меня закинуло на время отпуска — сработал. Первая же версия предложенного кода — запустилась без ошибок, но вот результат не впечатляет:

Freebuff попробовал несколько вариантов классификатора
Freebuff попробовал несколько вариантов классификатора

А все потому, что разбиение на обучающую и тестовые выборки проведено некорректно:

Так часто бывает с нейросетевыми агентами: код, в целом, работает, но "под капотом" бывают чудеса
Так часто бывает с нейросетевыми агентами: код, в целом, работает, но "под капотом" бывают чудеса

Исправляем ошибку разбиения на классы, результат пока все еще далек от «сырого» DeepSeek:

До baseline еще далеко, но спасибо за попытку
До baseline еще далеко, но спасибо за попытку

Но спасибо FreeBuff за то, что попытался использовать логистическую регрессию для этой задачи (без сарказма, было интересно).

Если кому интересно, исправленный ноутбук доступен по ссылке.

Наблюдения и выводы.

Сама по себе модель TimesFM – легковесная и быстрая, занимает порядка 1,5 Гбайт VRAM, на T4 в Google Colab выдает до 5 итераций в секунду (с учетом ограничений на размер контекста — в моем случае это было 90 точек, а всего поддерживается — до 2048 точек).

До самой «мякотки» я добраться не успел и оценить предсказательную мощь данной модели мне пока не удалось, равно как и понять, сколько отдельных переменных она может держать в своем окне внимания — получился такой экспресс-забег по разным инструментам вайб-кодинга, в котором пока что по точности итогового решения победил «сырой» DeepSeek, хотя Freebuff и выдал безупречный с точки зрения работоспособности вариант, но существенно уступающий по метрикам точности. Жаль, что OpenCode выступил не очень в этой специфичной для себя задаче, но у меня есть подозрение, что он не очень хорошо умеет адаптировать Bash-команды к кросс-платформенным условиям (он многократно пытался запускать Linux-специфичные команды в терминале Windows, естественно, с ошибкой).

Буду рад комментариям и предложениям задач, на которых можно было бы попробовать новую модель предсказаний значений временных рядов от Google.


А вы что скажете, уважаемые читатели?