Вопрос или проблема
Я испытываю трансформер временных рядов PatchTST (статья, код) на имеющихся у меня данных временных рядов. Способ обработки данных в PatchTST следующий:
Обратите внимание, что на строке 78-79 репозиторий делает следующее:
self.data_x = data[border1:border2]
self.data_y = data[border1:border2]
Таким образом, data_x
и data_y
абсолютно идентичны, что означает, что они имеют одинаковые строки и столбцы.
Далее выполняется следующее на (строке 88-89)
seq_x = self.data_x[s_begin:s_end]
seq_y = self.data_y[r_begin:r_end]
Наконец, он передает batch_x
во входную модель на строке 149:
outputs = self.model(batch_x)
Модель прогнозирует все входные временные ряды (или столбцы) для заданного окна прогнозирования. Модель имеет следующие три режима:
- M: более одного временного ряда признаков, которые также являются целевыми временными рядами для прогнозирования
- S: один временной ряд признаков, который также является целевым временным рядом для прогнозирования
- MS: более одного временного ряда признаков, но только один целевой временной ряд. В этом случае мы все равно передаем `batch_x` в модель, который содержит как временные ряды признаков, так и целевой временной ряд, но мы вычисляем потерю только по последнему времяному ряду (столбцу), принимая его за целевой.
Моя проблема отличается от описанных в статьях следующим образом:
- У меня есть несколько временных рядов признаков и целевых временных рядов, и они различны: нет общих временных рядов, которые были бы как признаками, так и целевыми.
- Я периодически теряю истинные целевые временные ряды, когда разворачиваю модель. В таком сценарии я все равно хочу, чтобы мои прогнозы были хорошими. (Мой обучающий набор данных имеет значения истинных целевых временных рядов для всех временных шагов / без пропусков.)
Как я могу учесть эти различия в модели?
Я могу рассмотреть следующие подходы:
-
Передать в модель только временные ряды признаков, а затем изменить архитектуру
FlattenHead
, чтобы предсказать количество целевых временных рядов. Этот подход будет иметь две дополнительные проблемы.1.1. Официальный репозиторий применяет
StandardScaler
как для временных рядов признаков, так и для целевых временных рядов. Затем он создает мини-пакеты на этих нормализованных данных. Однако этот подход не подает целевые временные ряды в модель, и масштабирование только временных рядов признаков кажется неправильным. Должен ли я полностью отказаться от масштабирования.1.2. Официальный репозиторий также применяет масштабирование на уровне экземпляра, чтобы справиться с изменением распределения. Это называется Обратная нормализация экземпляров (статья, код). Это также сталкивается с проблемой, подобной стандартному масштабированию, в том, что этот подход не подает целевые признаки в модель. Должен ли я полностью отказаться от обратной нормализации экземпляров (строка 62-65, строка 78-81).
-
Обучить модель только с истинными целевыми временными рядами вместе с временными рядами признаков. Во время тестирования используйте истинные целевые временные ряды для некоторых начальных мини-пакетов. В последующих мини-пакетах используйте предсказанные значения целевых временных рядов, чтобы сформировать входное окно.
-
Обучить модель с истинными целевыми временными рядами в некоторых начальных мини-пакетах. В последующих мини-пакетах используйте предсказанные значения целевых временных рядов, чтобы сформировать входное окно. Аналогично для тестирования.
Я знаю, что некоторые из вышеупомянутых подходов могут вообще не сработать. Но я просто генерировал идеи. Вы сталкивались с подобными требованиями в своей проблеме? Какой подход вы бы порекомендовали из приведенных выше? Также пожалуйста, предложите другой подход, который вы считаете будет лучше, чем три указанные выше.
PS: Я пытался подать данные временных рядов (как временные ряды признаков, так и целевые) так, как это делалось в статье / официальном репозитории. Это работает хорошо, но это не пригодно для моего использования, так как моя проблема может столкнуться с ситуацией, когда истинные целевые данные недоступны.
Ответ или решение
Для успешного применения трансформера временных рядов PatchTST к вашему набору данных, важно учесть, как вводить и обрабатывать данные с признаками (features) и целевыми временными рядами (target time series), особенно с учетом специфики вашей задачи, когда целевые данные могут отсутствовать. Давайте рассмотрим предложенные вами подходы и разберем, как можно адаптировать модель PatchTST к вашим требованиям.
Общие рекомендации по обработке и вводу данных
-
Форматирование входных данных:
Во-первых, необходимо формировать входные данные в формате, который PatchTST ожидает. В вашем случае у вас есть несколько временных рядов признаков и целевых временных рядов, которые различаются. Это означает, что вам нужно организовать данные так, чтобы каждый временной ряд был представлен в виде последовательности, которая может быть обработана моделью. -
Стандартизация и нормализация данных:
При стандартизации данных следует учитывать, что вы можете использовать разные методы для признаков и целевых переменных. Поскольку вы не можете применять стандартный масштаб к целевым переменным, если они не вводятся в модель, можно рассмотреть возможность применения масштабирования только к признакам во время их обработки. Однако, чтобы учесть потенциальные изменения в распределении, вы могли бы использоватьReversible Instance Normalization
только для признаков.
Обзор предложенных подходов
Подход 1: Использование только временных рядов признаков
- Если вы решите вводить только временные ряды признаков в модель, измените архитектуру
FlattenHead
так, чтобы она могла предсказывать целевые временные ряды. Однако стоит учитывать, что отсутствие целевых данных при обучении может отрицательно сказаться на результате, так как модель не будет знать, чему учиться.
Подход 2: Обучение модели на целевых временных рядах
- Этот подход предполагает использование целевых временных рядов на начальных этапах обучения, что позволяет модели эффективно усвоить паттерны. В дальнейшем, в тестовой фазе, вы можете использовать предсказанные значения целевых временных рядов для формирования входного окна. Это будет работать лучше, если вы имеете достаточно предсказуемые данные и модель будет приспосабливаться к предыдущим значениям.
Подход 3: Комбинирование энд-кратных значений
- Используя целевые данные на начальных этапах и переходя к предсказанным значениям, вы можете сохранить нужны объемы данных для формирования входных последовательностей. Это будет гарантировать, что модель продолжает учиться на основе полученных результатов.
Рекомендации
Исходя из ваших требований, комбинированный подход (второй и третий) кажется наиболее подходящим. Обучение на реальных данных целевых временных рядов, а затем переход на предсказанные значения, может помочь сохранить качество предсказаний, даже если целевые данные становятся недоступными.
Заключение
Для реализации данной стратегии необходимо тщательно протестировать модель, чтобы убедиться, что она может адаптироваться к быстрым изменениям в целевых временных рядах. Настройка параметров и выборскаемых значений будут критически важными для обеспечения устойчивости модели к неполным данным. Не забывайте про оценку производительности модели с использованием метрик RMSE или MAE для оценки качества предсказаний.
Таким образом, ваш подход к использованию PatchTST с временными рядами потребует дополнительных усилий в плане подготовки и обработки данных, но с правильными стратегиями это может привести к значительным улучшениям в качестве предсказаний.