Закажи экспресс-аудит своего дела онлайн всего за 199 ₽
и получи рекомендации по улучшению - Жми сюда !

Пять вопросов о Chronos-2, модели Time Series Foundation.

Часть 1: Практический обзор методов одномерного, многомерного, ковариантного прогнозирования и прогнозирования с холодным стартом.

Делиться

cdad5ad06da916929bebdacd7e8c78de
Создано с помощью GPT Image 2

Базовые модели сейчас широко распространены. Впервые мы увидели их в обработке языка, затем в компьютерном зрении, а теперь и в видео и речи. Рецепт уже хорошо известен: сначала предварительно обучите большую нейронную сеть на достаточно больших данных, а затем примените модель к последующим задачам без какой-либо адаптации для каждой задачи отдельно.

Для многих промышленных приложений временные ряды являются важнейшим инструментом . Нам часто приходится заниматься прогнозированием, обнаружением аномалий и классификацией, используя различные типы регистрируемых данных. В настоящее время обычно строятся специализированные модели для решения одной конкретной задачи. Это может сработать, но требует «изобретения велосипеда» и может привести к неоптимальным результатам, если набор данных для решения текущей задачи невелик.

Естественно, нам хотелось бы спросить: можем ли мы применить тот же подход и здесь, то есть предварительно обучить большую базовую модель временных рядов и использовать ее для любых последующих задач, не требуя дополнительных настроек?

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

На самом деле, в этом направлении уже проделана большая работа, и сейчас мы видим целую плеяду подобных моделей, среди которых: TimesFM от Google, MOIRAI от Salesforce, Lag-Llama, TimeGPT и семейство Chronos от AWS.

В этом посте мы рассмотрим Chronos-2 [1], новейшую модель в линейке Chronos, выпущенную в октябре 2025 года. Мы рассмотрим пять вопросов, которые могут возникнуть при первом знакомстве с этой моделью:

  1. Что такое базовая модель временных рядов и как она меняет рабочий процесс анализа?
  2. Зачем вообще использовать базовую модель для анализа временных рядов?
  3. Что конкретно представляет собой Chronos-2?
  4. Какие новые возможности открывает Chronos-2?
  5. Где предел эффективности метода «нулевого выстрела» перестаёт быть достаточным?

В четвертом вопросе мы рассмотрим практический пример на основе синтетического набора данных о потреблении электроэнергии зданием.

1. Что такое базовая модель временных рядов и как она меняет рабочий процесс анализа?

Как следует из названия, TSFM — это единая нейронная сеть, предварительно обученная на большом и разнообразном наборе временных рядов. Ее преимущества аналогичны LLM для текста: вместо того, чтобы обучать новую модель каждый раз при возникновении новой задачи прогнозирования, вы загружаете одну предварительно обученную модель и просите ее выполнить прогнозирование.

Это существенное изменение в рабочем процессе.

Допустим, нам нужно составить прогноз потребления энергии зданиями на неделю вперед. Если следовать традиционному рабочему процессу, мы начнем с подготовки данных, затем выберем модели прогнозирования (например, ARIMA/градиентный бустинг деревьев/LSTM, TCN, N-BEATS), а затем большую часть времени потратим на обучение, настройку гиперпараметров и валидацию. В результате получим модель, которая (надеемся) решает эту конкретную задачу на этом конкретном наборе данных.

Шесть месяцев спустя появляется новая задача по прогнозированию, и цикл начинается практически с нуля.

Теперь, благодаря TSFM, большая часть описанного выше сжата в один вызов функции вывода. Рабочий процесс теперь выглядит следующим образом: взять исторический ряд (если доступен, а также связанные ковариаты, мы обсудим это позже), подать его на вход предварительно обученной модели TSFM, установить желаемый горизонт прогнозирования, затем запустить вывод TSFM и получить прогноз.

Ещё один плюс заключается в том, что вы получите не просто точечный прогноз, а, как правило, прогнозные квантили для количественной оценки неопределённостей.

Что же это означает?

Во-первых, стоимость простого тестирования прогноза значительно снижается . Если он сработает, отлично. Если нет, вы за десять минут узнаете что-то полезное.

Тогда проблема «холодного старта» перестаёт быть актуальной. Раньше проект приходилось останавливать просто потому, что «у нас пока недостаточно данных». С предварительно обученной моделью этих «небольших данных» может быть уже достаточно для получения значимых результатов. Модель уже изучила множество закономерностей спроса/трафика/данные с датчиков. Она предоставляет предварительные знания, которые ваш небольшой набор данных не может полностью отразить.

Наконец, меняется и то, кто может это делать. Раньше для качественного прогнозирования требовался эксперт по машинному обучению. Конечно, наличие сертификата TSFM не делает эти знания устаревшими, но это означает, что эксперт в данной области со знанием Python может получить достоверный прогноз без многолетнего опыта работы в области машинного обучения.

Однако всё это не бесплатно. Теперь вы зависите от чужой модели. Вывод результатов становится дороже. Для ваших предметных областей модель с нулевым количеством примеров, вероятно, будет недостаточной. А тщательная оценка и проверка становятся ещё важнее.

2. Зачем вообще нужна базовая модель для анализа временных рядов?

«Я не верю в TSFM. Это вряд ли сработает».

Это то, что я чаще всего слышу от своих коллег, и этот скептицизм вполне оправдан. Язык ограничен и имеет конечный словарный запас. Слово «яблоко» означает примерно одно и то же в романе или в списке покупок.

Цифры не такие.

Числа представляют собой непрерывные величины, и их значение может сильно различаться в зависимости от контекста. «100» в контексте розничного спроса будет иметь совершенно иное значение, чем «100» в графике сердечного ритма.

Так почему же нам следует надеяться, что предварительно обученная модель сможет работать в разных контекстах?

На самом деле, модель не изучает ваши конкретные данные; она изучает такие формы, как циклы, тренды, сдвиги уровней, повторяющиеся пики, и эти формы повторяются во временных рядах различных областей. Формы здесь — это «словарь», и их гораздо меньше, чем возможных числовых значений. Модель, которая видела достаточное количество таких форм в достаточном масштабе и с достаточной частотой, сможет, будем надеяться, распознать их в ваших рядах, даже если она никогда раньше не видела и не обучалась на ваших рядах.

Эмпирически у нас есть конкретные цифры, подтверждающие это: Chronos-2 в настоящее время занимает лидирующую позицию по точности нулевого обучения в нескольких бенчмарках. Кроме того, недавние исследования показывают, что Chronos-2 фактически превосходит классические статистические базовые модели и специализированные архитектуры глубокого обучения, особенно на более длительных горизонтах, без какой-либо настройки, специфичной для задачи [2].

Конечно, это не значит, что это всегда работает. Некоторые области действительно не похожи ни на что из того, что было в предварительном обучении. Мы вернемся к этому в вопросе 5. Но следует помнить: теперь базовым показателем, который нужно превзойти, является TSFM zero-shot, а не наоборот.

3. Что конкретно представляет собой Хронос-2?

В этом разделе мы кратко обсудим важные аспекты Chronos-2: как он используется при выводе, как он построен, на чём он был обучен, и несколько практических спецификаций. Для более подробного технического обсуждения, пожалуйста, обратитесь к оригинальной статье [1].

3.1 Как это используется при выводе заключений?

Практикующим специалистам чаще всего важнее всего то, как на практике использовать эту модель. Поэтому давайте начнем с этого.

Chronos-2 предлагает различные варианты использования для выполнения прогнозирования. Хорошая новость в том, что вам на самом деле не нужно выбирать разные конфигурации для разных задач прогнозирования. Вместо этого вы организуете входные данные таким образом, чтобы модель знала, что делать.

Ключевым механизмом является « идентификатор группы ».

В рамках Chronos-2 «группа» — это понятие, используемое для обозначения взаимосвязи . Каждый временной ряд, подаваемый в Chronos-2, должен принадлежать к «группе», идентифицируемой идентификатором (ID). В зависимости от того, как вы присваиваете эти идентификаторы во время вывода, могут быть следующие четыре шаблона:

  • Одномерное прогнозирование : это когда вы хотите спрогнозировать один конкретный показатель. Каждому ряду присваивается свой идентификатор группы, и Chronos-2 будет обрабатывать каждый ряд независимо .
  • Многомерное прогнозирование : это когда вам нужно прогнозировать несколько целевых показателей одновременно, поскольку они могут изменяться синхронно или вы хотите, чтобы их прогнозы взаимно дополняли друг друга. Для этого необходимо присвоить всем связанным рядам один общий идентификатор группы.
  • Прогнозирование с учетом ковариат : это когда у вас есть дополнительные ряды данных, влияющие на целевую переменную. Эти дополнительные ряды обычно называются ковариатами , и они могут быть известны в прошлом, а часто и в будущем. Для выполнения прогнозирования с учетом ковариат необходимо присвоить целевой переменной и ее ковариатам один и тот же идентификатор группы, при этом целевая переменная определяется как ряд данных для прогнозирования, а остальные предоставляются в качестве известного контекста.
  • Перекрестное обучение : это ситуация, когда у вас много связанных рядов данных, и вы хотите, чтобы прогноз для одного ряда учитывал закономерности, наблюдаемые в других рядах. Этот сценарий отличается от прогнозирования на основе ковариат, поскольку каждый ряд в группе сам по себе является целевым. Они являются взаимодополняющими, а не вспомогательными входными данными, такими как ковариаты. Кроме того, этот сценарий семантически отличается от многомерного прогнозирования. В многомерном прогнозировании ряды в группе обычно представляют собой разные целевые измерения одной и той же задачи (например, разные компоненты нагрузки). В перекрестном обучении сгруппированные ряды являются взаимодополняющими (суммарная нагрузка из разных зданий). Тем не менее, основной механизм тот же: вы присваиваете всем связанным рядам один и тот же идентификатор группы, поэтому внимание группы позволяет осуществлять обмен информацией между рядами.

Итак, та же модель, те же конфигурации. Изменяется только способ организации входных данных.

9724042973758ad975f55242d220de2a
Рисунок 1. Как идентификаторы групп определяют режимы прогнозирования Chronos-2: одномерный, многомерный, с учетом ковариат и перекрестное обучение. (Изображение предоставлено автором)

3.2 Как он был построен?

Chronos-2 — это трансформатор, работающий только с энкодером, с 120 миллионами параметров, что довольно мало по современным стандартам LLM. Здесь стоит отметить несколько конструктивных решений:

1. Chronos-2 использует непрерывные векторные представления фрагментов , а не дискретные токены словаря.

Если вы знакомы с оригинальным Chronos, то, возможно, помните, что Chronos кодирует временные ряды, сначала масштабируя значения временного ряда, а затем квантуя их в один из интервалов. Эти интервалы, естественно, рассматриваются как «токены».

Однако Chronos-2 отказывается от этого подхода.

Этот метод работает путем группировки последовательных наблюдений в «фрагмент» и непосредственного встраивания всего фрагмента в виде непрерывного вектора. Если вы знакомы с Vision Transformers (ViT), вы сразу заметите сходство. Благодаря этому модель может обрабатывать гораздо меньше элементов в серии, что приводит к более быстрой обработке и не приводит к потере точности, вызванной квантованием.

2. Внутри кодировщика Chronos-2 используется два типа внимания, и они чередуются в каждом слое.

В Chronos-2 реализованы механизмы внимания ко времени и группового внимания .

Как следует из названия, функция внимания ко времени предназначена для того, чтобы позволить каждому сериалу обращать внимание на собственное прошлое, тем самым улавливая временную структуру.

В случае группового внимания это работает для всех серий. В частности, это означает, что в каждой временной точке все серии, имеющие общий идентификатор группы, могут уделять внимание друг другу.

Конкретнее, если представить входные данные в виде матрицы, где строки — это временные ряды, а столбцы — время, то внимание ко времени происходит внутри одной строки, а внимание к группе — внутри одного столбца.

Два механизма внимания чередуются слой за слоем. В результате информация в конечном итоге распространяется как во времени внутри каждой серии, так и между группами.

3. Для получения выходных данных Chronos-2 использует прямой квантильный регрессионный алгоритм вместо авторегрессивной генерации токенов.

В Chronos-2 прогнозирование выполняется не по авторегрессионному алгоритму. Вместо этого используется регрессионный модуль, который за один раз выдает все 21 прогноз на уровне квантилей для всех шагов горизонта прогнозирования.

В совокупности эти решения по умолчанию делают Chronos-2 быстрым и вероятностным инструментом.

3.3 На чём проводилось обучение?

Для базовой модели, работающей с временными рядами, обучающие данные являются важнейшим компонентом.

Поскольку реальные корпуса данных обычно встречаются редко, Chronos-2 в значительной степени опирается на большой объем синтетических данных . Они представлены в двух вариантах:

Для одномерного прогнозирования синтетические ряды генерируются с помощью трех генераторов: кривых гауссовых процессов (KernelSynth, унаследованных от Chronos-1), случайных комбинаций тренда/сезонности/нерегулярности (TSI) и рядов, отобранных из случайных временных причинно-следственных графов (TCM).

Для многомерных (и учитывающих ковариаты) сценариев все обучающие данные являются синтетическими. Команда Chronos-2 разработала инструмент под названием «многомерные генераторы», который берет несколько одномерных рядов из вышеупомянутых генераторов и накладывает между ними зависимости, такие как корреляции в одно и то же время или корреляции со сдвигом во времени (опережение-запаздывание, коинтеграция).

На самом деле, наиболее поразительным результатом исследования является то, что одних только синтетических данных почти достаточно: вариант, обученный только на синтетических данных, показал лишь незначительно худшие результаты, чем финальная модель.

3.4 Практические характеристики

И наконец, пара практических характеристик, которые стоит знать, если вы хотите использовать эту модель:

  • Максимальная длина контекста составляет 8192 шага.
  • Максимальный горизонт прогнозирования составляет 1024 шага (более года ежедневных данных или шести недель почасовых данных).
  • Его лицензия — Apache-2.0.
  • Поддерживается вывод данных как на центральном, так и на графическом процессоре.

Это концептуальная версия Chronos-2.

4. Что нового мы можем сделать с помощью Chronos-2?

В этом разделе давайте перейдем к практическим занятиям и займемся реальным прогнозированием с помощью Chronos-2.

Здесь мы рассмотрим небольшой пример с синтетической задачей прогнозирования потребления электроэнергии в здании. В частности, нам нужно делать почасовые прогнозы потребления электроэнергии на неделю вперед. Для большинства зданий у нас есть данные за 45 дней. Для одного недавно подключенного здания доступны данные только за несколько дней. Это позволяет нам позже протестировать настройку холодного запуска.

В данном исследовании мы используем данные, полученные в результате физического моделирования. Основная цель — определение суммарной нагрузки , которая представляет собой сумму базовой нагрузки, нагрузки от электроприборов, нагрузки от освещения и нагрузки от систем отопления, вентиляции и кондиционирования воздуха (ОВК). Физически, нагрузка от электроприборов и освещения соответствует режиму использования помещений в будние дни, а нагрузка от систем ОВК реагирует на температуру наружного воздуха и тепловую динамику здания. Для получения подробной информации о моделировании и генерации данных, пожалуйста, обратитесь к блокноту, прикрепленному в конце этого сообщения.

364ec29f38837b6eda98e2ce326d7887
Рисунок 2. Временные ряды суммарной нагрузки для всех зданий. Для всех зданий имеется 45-дневная история, за исключением здания 06, для которого запись ведется только за 3 дня. (Изображение предоставлено автором)

4.1 Настройка модели Chronos-2

Что касается инструментов, мы будем использовать модель Chronos-2 через пакет Python chronos-forecasting . Нам понадобятся PyTorch, Pandas и стандартный набор инструментов Python для научных расчетов:

 pip install chronos-forecasting pandas numpy matplotlib

Сами веса модели размещены на Hugging Face в папке amazon/chronos-2 . Вы можете запустить конвейер обработки данных с помощью следующей команды:

 from chronos import Chronos2Pipeline pipeline = Chronos2Pipeline.from_pretrained("amazon/chronos-2", device_map="cuda") # or device_map="cpu"

Первый вызов функции from_pretrained загрузит веса в локальный кэш Hugging Face ( ~/.cache/huggingface/ ), а последующие вызовы будут загружать данные с диска. Модель занимает около 478 МБ на диске.

Chronos-2 может работать на центральном процессоре, но обычно предпочтительнее использовать графический процессор для вывода результатов.

Я использую свой личный ноутбук с видеокартой NVIDIA RTX 2000 Ada (8 ГБ видеопамяти). Для рабочей нагрузки на этом ноутбуке с почасовыми данными, 45-дневным контекстом, горизонтом прогнозирования 168 часов и 8 зданиями, одномерный прогноз (8 рядов) выполняется примерно за 0,07 с, многомерный прогноз (8 зданий × 4 цели = 32 ряда) занимает примерно 0,22 с, а прогноз с учетом ковариат — примерно 0,27 с. Пиковое потребление памяти GPU остается ниже 1 ГБ на протяжении всего процесса. Производственная рабочая нагрузка в совершенно другом масштабе (например, больше рядов, большая длина контекста/горизонт прогнозирования и т. д.) определенно будет иметь совершенно другую пропускную способность.

4.2 Одномерное прогнозирование

Может ли Chronos-2 прогнозировать спрос на строительные материалы с нуля?

Первое, что мы хотели бы попробовать, — это максимально простая схема: мы передаем Chronos-2 данные о недавнем потреблении электроэнергии в каждом здании и запрашиваем прогноз на неделю вперед. Вот и все, ничего сложного.

Сначала мы генерируем синтетические данные:

 full_df = make_dataset()

Вот как выглядят данные:

 building timestamp ... solar_irradiance is_weekend 0 Building 01 2025-03-01 00:00:00 ... 0.0 1 1 Building 01 2025-03-01 01:00:00 ... 0.0 1 2 Building 01 2025-03-01 02:00:00 ... 0.0 1 3 Building 01 2025-03-01 03:00:00 ... 0.0 1 4 Building 01 2025-03-01 04:00:00 ... 0.0 1 ... ... ... ... ... ... 32635 Building 08 2025-08-17 19:00:00 ... 0.0 1 32636 Building 08 2025-08-17 20:00:00 ... 0.0 1 32637 Building 08 2025-08-17 21:00:00 ... 0.0 1 32638 Building 08 2025-08-17 22:00:00 ... 0.0 1 32639 Building 08 2025-08-17 23:00:00 ... 0.0 1 [32640 rows x 11 columns]

Данный набор данных содержит следующие столбцы:

 ['building', 'timestamp', 'total_load_kw', 'hvac_load_kw', 'plug_load_kw', 'lighting_load_kw', 'indoor_temp_c', 'outdoor_temp_c', 'occupancy', 'solar_irradiance', 'is_weekend']

Столбец building — это столбец с идентификатором группы; total_load_kw — это целевой столбец, для которого мы планируем составить прогноз.

Затем мы можем подготовить исторический контекст и сделать прогноз с помощью API predict_df :

 history_df = full_df[ (full_df["timestamp"] >= context_start_date) & (full_df["timestamp"] < cutoff_date) ].copy() context_univariate = history_df[["building", "timestamp", "total_load_kw"]] pred_univariate = pipeline.predict_df( context_univariate, prediction_length=168, # one week of hourly forecasts quantile_levels=[0.025, 0.5, 0.975], # 95% confidence interval id_column="building", timestamp_column="timestamp", target="total_load_kw", )

Вот как выглядит pred_univariate :

 building timestamp ... 0.5 0.975 0 Building 01 2025-07-14 00:00:00 ... 175.027161 194.386108 1 Building 01 2025-07-14 01:00:00 ... 177.673050 198.921997 2 Building 01 2025-07-14 02:00:00 ... 175.633270 199.574677 3 Building 01 2025-07-14 03:00:00 ... 167.960052 192.789505 4 Building 01 2025-07-14 04:00:00 ... 154.674759 178.479599 ... ... ... ... ... ... 1339 Building 08 2025-07-20 19:00:00 ... 103.391228 164.987076 1340 Building 08 2025-07-20 20:00:00 ... 116.543739 185.808151 1341 Building 08 2025-07-20 21:00:00 ... 135.177704 202.919937 1342 Building 08 2025-07-20 22:00:00 ... 150.139679 216.866089 1343 Building 08 2025-07-20 23:00:00 ... 160.572784 219.451172 [1344 rows x 7 columns]

со следующими столбцами:

 ['building', 'timestamp', 'target_name', 'predictions', '0.025', '0.5', '0.975']

Медианный прогноз хранится в predictions , а запрошенные столбцы квантилей (0,025, 0,975) для каждого (здание, час) имеют значения меньше 0.025 и 0.975 соответственно.

Для визуализации результатов в качестве примера выберем здание 03:

dcd3c4420327f6489292c79cd6bd0fdb
Рисунок 3. Одномерное прогнозирование для здания 03. (Изображение предоставлено автором)

Мы видим, что без какой-либо тонкой настройки прогноз хорошо отразил как ежедневный цикл заполняемости, так и ритм будних/выходных дней, используя только 45-дневный контекстный период. На рисунке также показан 95% доверительный интервал, и мы видим, что он в основном соответствует действительности.

Обратите внимание, что вышеописанное фактически представляет собой пакетное прогнозирование для всех восьми зданий. Для всех этих зданий модель Chronos-2 с нулевым количеством примеров показывает взвешенную абсолютную процентную ошибку (WAPE) в 8,6% . Это, безусловно, не лучший результат для данного набора данных, но вполне достижимый при минимальных усилиях.

4.3 Многомерное прогнозирование

Может ли Chronos-2 прогнозировать одновременное обнаружение нескольких целей?

Далее мы используем Chronos-2 для прогнозирования отдельных компонентов спроса, а именно: систем отопления, вентиляции и кондиционирования, розеток и освещения. В нашей текущей конфигурации эти компоненты имеют общие определяющие факторы и коррелируют друг с другом. Модель, которая рассматривает их как систему, позволит использовать эти корреляции для получения более точных прогнозов.

Код практически идентичен одномерной версии — изменен только аргумент target, который теперь представляет собой список. Кроме того, все четыре цели в каждом здании имеют один общий идентификатор группы, поэтому модель может обрабатывать данные по всем четырем целям в каждый момент времени.

 target_columns = ["total_load_kw", "hvac_load_kw", "plug_load_kw", "lighting_load_kw"] context_multivariate = history_df[["building", "timestamp"] + target_columns] pred_multivariate = pipeline.predict_df( context_multivariate, prediction_length=168, quantile_levels=[0.025, 0.5, 0.975], id_column="building", timestamp_column="timestamp", target=target_columns, # now a list )

Вот как выглядит полученный pred_multivariate :

 building timestamp ... 0.5 0.975 0 Building 01 2025-07-14 00:00:00 ... 170.219849 185.517609 1 Building 01 2025-07-14 01:00:00 ... 175.033524 191.951599 2 Building 01 2025-07-14 02:00:00 ... 175.106644 193.513306 3 Building 01 2025-07-14 03:00:00 ... 169.450287 189.806625 4 Building 01 2025-07-14 04:00:00 ... 159.008575 177.918198 ... ... ... ... ... ... 5371 Building 08 2025-07-20 19:00:00 ... 19.697739 24.007296 5372 Building 08 2025-07-20 20:00:00 ... 19.775898 23.811647 5373 Building 08 2025-07-20 21:00:00 ... 19.995640 24.352007 5374 Building 08 2025-07-20 22:00:00 ... 19.610260 23.614372 5375 Building 08 2025-07-20 23:00:00 ... 19.025314 22.950117 [5376 rows x 7 columns]

со следующими столбцами:

 ['building', 'timestamp', 'target_name', 'predictions', '0.025', '0.5', '0.975']

Важное отличие заключается target_name :

 ['total_load_kw', 'hvac_load_kw', 'plug_load_kw', 'lighting_load_kw']

У нас по 1344 строки для каждой из целевых переменных, поэтому общее количество строк для pred_multivariate составляет 5376.

Далее мы снова проверим результаты для здания 03. На рисунке ниже на каждой панели показан прогноз для одного компонента:

3506cd63dec4976319eaad3762aa7681
Рисунок 4. Прогнозы для нескольких целей. (Изображение предоставлено автором)

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

В разрезе компонентов, средневзвешенная эффективная мощность (WAPE) составляет 15,4% для нагрузки систем отопления, вентиляции и кондиционирования, 4,6% для нагрузки освещения, 2,2% для нагрузки от электроприборов и 5,4% для общей нагрузки.

На самом деле довольно интересно видеть, что средневзвешенная погрешность общей нагрузки в многомерной модели также ниже, чем в одномерном базовом варианте (8,6%), который мы получили в предыдущем разделе. В данном многомерном случае модель использовала корреляционные закономерности между различными компонентами, чтобы лучше предсказать, как будет выглядеть общая нагрузка.

С практической точки зрения, также удобно иметь один вызов predict_df для возврата прогнозов по всей структуре нагрузки с согласованным подходом. Это может быть очень полезно для многих последующих операций, поскольку теперь оператор знает не только ожидаемый объем спроса, но и его источники. Это может помочь в разработке эффективных планов работы систем отопления, вентиляции и кондиционирования, систем управления освещением и стратегий сглаживания пиковых нагрузок.

4.4 Прогнозирование с учетом ковариат

Может ли аппарат Chronos-2 использовать известные будущие погодные условия и графики работы?

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

Это режим Chronos-2, основанный на ковариатах, описанный в разделе 3.1. Здесь целевые значения и ковариаты имеют один и тот же идентификатор группы, но прогнозируется только целевое значение, а ковариаты необходимо предоставить как для исторического окна, чтобы модель могла изучить их связь со спросом, так и для горизонта прогнозирования, чтобы она могла учитывать их известные будущие значения.

be16140a071116e93caa3dc22f4a0f47
Рисунок 5. Известные ковариаты включают температуру наружного воздуха, график пребывания людей и солнечную радиацию. (Изображение предоставлено автором)

На рисунке выше показаны известные будущие сигналы (например, температура наружного воздуха, график занятости помещений и солнечная радиация), которые мы будем учитывать при расчетах для здания 03. Кроме того, в качестве категориальной ковариаты включен параметр is_weekend .

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

В коде необходимо внести два изменения по сравнению с одномерным случаем: исторический контекст теперь включает столбцы ковариат (наряду с целевой переменной), а аргумент future_df содержит значения ковариат для горизонта прогнозирования.

 future_truth_df = full_df[ (full_df["timestamp"] >= cutoff_date) & (full_df["timestamp"] < cutoff_date + pd.Timedelta(hours=168)) ].copy() future_covariates_df = future_truth_df[ ["building", "timestamp", "outdoor_temp_c", "occupancy", "solar_irradiance", "is_weekend"] ].copy() known_future_columns = ["outdoor_temp_c", "occupancy", "solar_irradiance", "is_weekend"] context_with_covariates = history_df[["building", "timestamp", "total_load_kw"] + known_future_columns]

Одна конкретная строка из context_with_covariates :

 building timestamp total_load_kw outdoor_temp_c occupancy solar_irradiance is_weekend Building 01 2025-05-30 190.671989 30.232122 0.000553 0.0 0

Одна конкретная строка из future_covariates_df :

 building timestamp outdoor_temp_c occupancy solar_irradiance is_weekend Building 01 2025-07-14 30.669441 0.000553 0.0 0

Обратите внимание, что мы передаем в API оба фрейма данных:

 pred_with_covariates = pipeline.predict_df( context_with_covariates, future_df=future_covariates_df, # covariate values for the forecast horizon prediction_length=168, quantile_levels=[0.025, 0.5, 0.975], id_column="building", timestamp_column="timestamp", target="total_load_kw", # still a single string — one target )

Первые несколько строк таблицы pred_with_covariates :

 building timestamp target_name predictions 0.025 0.5 0.975 Building 01 2025-07-14 00:00:00 total_load_kw 169.025482 156.235291 169.025482 183.735748 Building 01 2025-07-14 01:00:00 total_load_kw 174.691132 161.001785 174.691132 190.913406 Building 01 2025-07-14 02:00:00 total_load_kw 174.087845 158.777023 174.087845 191.526764 Building 01 2025-07-14 03:00:00 total_load_kw 170.675781 155.457169 170.675781 188.504807 Building 01 2025-07-14 04:00:00 total_load_kw 160.536011 145.712753 160.536011 177.670593 Building 01 2025-07-14 05:00:00 total_load_kw 154.637436 140.687515 154.637436 170.052383 Building 01 2025-07-14 06:00:00 total_load_kw 155.766968 141.554367 155.766968 170.922150 Building 01 2025-07-14 07:00:00 total_load_kw 167.152252 152.965271 167.152252 182.419205

На рисунке ниже показаны новые результаты прогнозирования для здания 03:

15178bc20f567344fef1bfef09d5080d
Рисунок 6. Прогнозирование для здания 03: с учетом и без учета ковариат. (Изображение предоставлено автором)

Мы видим явное улучшение точности прогнозирования, когда модель Chronos-2 имеет доступ к информативным ковариатам. Во всех восьми зданиях средневзвешенная вероятность ошибки прогнозирования (WAPE) снижается до 4% , что является значительным улучшением по сравнению с показателем в 8,6%, полученным без учета этих данных.

Практический вывод таков: когда появляется достоверная информация о будущем, передайте её модели.

4.5 Перекрестное обучение

Могут ли смежные здания помочь зданию, в котором недавно был установлен счетчик электроэнергии?

Последний сценарий, который мы здесь рассматриваем, — это тот, с которым TSFM в принципе лучше всего способен справиться: холодный пуск .

Представьте, что здание № 6 только что подключили к платформе мониторинга, поэтому у нас есть данные только за три дня. Обычно трех дней недостаточно для построения адекватной модели, специфичной для каждого здания. Но теперь, когда у нас есть TSFM (система мониторинга энергопотребления зданий), возникает закономерный вопрос: могут ли данные по семи другим зданиям, каждое из которых имеет 45-дневную историю измерений, помочь спрогнозировать показатели здания № 6?

Это режим кросс-обучения Chronos-2, который мы обсуждали в разделе 3.1. С точки зрения реализации, все восемь зданий должны иметь один общий идентификатор группы. Модели не нужно сообщать, что здания связаны между собой; она естественным образом выявляет полезные закономерности благодаря групповому вниманию в рамках всей последовательности. Кроме того, в этом исследовании мы намеренно исключаем будущие ковариаты, поэтому никакие данные о погоде или расписании не передаются. Таким образом, мы будем знать, что любое улучшение должно быть достигнуто исключительно за счет истории взаимодействия между зданиями.

Мы создаём два датафрейма:

 short_building = "Building 06" short_history_start = cutoff_date - pd.Timedelta(days=3) context_univariate = history_df[["building", "timestamp", "total_load_kw"]].copy() cold_context = pd.concat( [ context_univariate[context_univariate["building"] != short_building], context_univariate[ (context_univariate["building"] == short_building) & (context_univariate["timestamp"] >= short_history_start) ], ], ignore_index=True, ).sort_values(["building", "timestamp"]) cold_context_new_only = cold_context[cold_context["building"].eq(short_building)].copy()

Вот первые несколько строк файла cold_context :

 building timestamp total_load_kw Building 01 2025-05-30 00:00:00 190.671989 Building 01 2025-05-30 01:00:00 181.611690 Building 01 2025-05-30 02:00:00 177.875806 Building 01 2025-05-30 03:00:00 166.297421 Building 01 2025-05-30 04:00:00 154.846159 Building 01 2025-05-30 05:00:00 151.078626 Building 01 2025-05-30 06:00:00 157.557114 Building 01 2025-05-30 07:00:00 155.563899

По следующим показателям:

 building Building 01 1080 Building 02 1080 Building 03 1080 Building 04 1080 Building 05 1080 Building 06 72 Building 07 1080 Building 08 1080

Вот первые несколько строк переменной cold_context_new_only :

 building timestamp total_load_kw Building 06 2025-07-11 00:00:00 101.528455 Building 06 2025-07-11 01:00:00 117.270784 Building 06 2025-07-11 02:00:00 111.178600 Building 06 2025-07-11 03:00:00 110.586007 Building 06 2025-07-11 04:00:00 98.715046 Building 06 2025-07-11 05:00:00 100.550960 Building 06 2025-07-11 06:00:00 114.863499 Building 06 2025-07-11 07:00:00 125.766400

Мы проводим следующие A/B-тесты:

 # Isolated: only Building 06's 3-day history pred_isolated = pipeline.predict_df( cold_context_new_only, prediction_length=168, quantile_levels=[0.025, 0.5, 0.975], id_column="building", timestamp_column="timestamp", target="total_load_kw", cross_learning=False, ) # Cross-learning: Building 06's 3-day history + 7 siblings' 45-day histories pred_cross = pipeline.predict_df( cold_context, # includes all 8 buildings prediction_length=168, quantile_levels=[0.025, 0.5, 0.975], id_column="building", timestamp_column="timestamp", target="total_load_kw", cross_learning=True, # attend across the group )

Результаты представлены ниже:

bb0302eb24e8f89b41c3cf02e29b8bcd
Рисунок 7. Результаты кросс-обучения для здания 06. (Изображение предоставлено автором)

На нижнем графике показаны два результата прогнозирования вместе с эталонными данными. «Изолированный прогноз» — это результат, полученный, когда Chronos-2 использует в качестве контекста только данные за три дня. Мы видим, что ему в какой-то степени удалось уловить суточный цикл, но он упустил недельный ритм и недооценил пики. Версия с перекрестным обучением, с другой стороны, эффективно научилась извлекать форму распределения спроса по будням/выходным и величину пиков из других зданий, что привело к более точным прогнозам спроса. С точки зрения средневзвешенной вероятности превышения (WAPE), она снижается с 22,2% в стратегии изолированного обучения до 16,7% в стратегии перекрестного обучения.

Обратите внимание, что здесь мы проводим перекрестное обучение, которое не подразумевает заглядывание модели в будущее других зданий, поскольку в контексте модели находятся только исторические данные. Модель занимается контекстным обучением : она видит семь зданий в этом портфеле, затем проверяет закономерности, которые демонстрирует здание № 06 за три дня, и, наконец, делает соответствующие прогнозы на будущее.

5. Где предел эффективности метода "нулевого выстрела" перестаёт быть достаточным?

Прежде чем восхищаться новыми возможностями Chronos, которые мы только что рассмотрели в предыдущем примере, следует помнить следующее: режим Zero-shot — это отличный вариант по умолчанию, но он не является универсальным решением.

Итак, где же предел эффективности метода «нулевого выстрела» перестаёт быть достаточным? Я считаю, что важно обращать внимание на следующие четыре сигнала:

  1. Ваши данные не похожи ни на что из того, что было в исходном наборе данных. Например, это могут быть специализированные научные сигналы или данные от нишевых типов датчиков.
  2. У вас много неиспользуемой истории событий. Chronos-2 не обращает внимания ни на что, кроме контекстного окна. Если эта история существует и содержит шаблоны, которые Chronos-2 не видел, вам, вероятно, потребуется тонкая настройка для её явного кодирования.
  3. Вы видите систематические ошибки, которые постоянно допускает модель. В подобных случаях никакая контекстная инженерия, скорее всего, не поможет. Для устранения этих проблем необходима целенаправленная адаптация.
  4. Вам необходимо поведение, которое не оптимизируется при использовании метода нулевого примера. Если ваши затраты на последующем этапе асимметричны, например, недооценка спроса обходится вам в десять раз дороже, чем переоценка, то тонкая настройка с помощью вашей конкретной функции потерь может быть оптимальным решением.

С этого начинается вторая часть! В следующем посте мы обсудим, как выполнить тонкую настройку Chronos-2.

Полный код блокнота можно найти здесь: https://github.com/ShuaiGuo16/chronos-2-forecasting/blob/main/01_chronos2_zero_shot_building_demand_demo.ipynb

Ссылки

[1] Chronos-2: От одномерного к универсальному прогнозированию, arXiv, 2025.

[2] Модели временных рядов как надежные базовые модели в прогнозировании транспорта: крупномасштабный сравнительный анализ, arXiv, 2026.

Шуай Го Посмотреть все в Шуай Го

Источник: towardsdatascience.com

✅ Найденные теги: Chronos, TIME, Вопросов, Модели, новости, Пять

Добавить комментарий

Нет других записей в этой рубрике.

Новости других рубрик