Как обрабатывать многократные серии одновременно?

14

У меня есть набор данных, включающий спрос на несколько продуктов (1200 продуктов) за 25 периодов, и мне нужно спрогнозировать спрос каждого продукта на следующий период. Сначала я хотел использовать ARIMA и обучать модели для каждого продукта, но из-за количества продуктов и настройки параметров (p, d, q) это отнимает много времени и не практично. Рекомендуется ли использовать регрессию, когда предыдущие требования являются независимыми переменными (авторегрессия)?

Могу ли я узнать, существует ли какой-либо метод обучения единой модели для прогнозирования спроса для всех 1200 продуктов? Я был бы благодарен, если бы вы могли предложить любую библиотеку в Python, потому что я использую Python.

Katatonia
источник
3
Самый продвинутый пакет для анализа многомерных временных рядов, который я знаю, находится bigtimeв R. Возможно, вы могли бы вызвать R из Python, чтобы иметь возможность использовать его.
Ричард Харди

Ответы:

11

Обычно, когда у вас есть несколько временных рядов, вы должны использовать некую векторную модель, чтобы моделировать их все одновременно. Естественным продолжением модели ARIMA для этой цели является модель VARIMA (Vector ARIMA). Тот факт, что у вас есть 1200 временных рядов, означает, что вам нужно будет указать некоторые жесткие параметрические ограничения на члены взаимной корреляции в модели, поскольку вы не сможете иметь дело со свободными параметрами для каждой пары переменных временных рядов.

Я бы предложил начать с некоторой простой векторной модели (например, VAR, VMA, VARMA) с низкой степенью и некоторыми простыми ограничениями параметров для взаимной корреляции. Посмотрите, сможете ли вы найти разумную модель, включающую взаимную корреляцию, по крайней мере, до одной степени лага, а затем перейти оттуда. Это упражнение потребует ознакомления с векторными моделями временных рядов. MTSПакет и bigtimepacakage в Rимеют некоторые возможности для работы с многофакторными временными рядами, так что было бы также стоит самостоятельно ознакомиться с этими пакетами.

Восстановить Монику
источник
Самый продвинутый пакет для анализа многомерных временных рядов, который я знаю, находится bigtimeв R. Насколько я знаю MTS, это скорее демонстрация примеров из учебников, чем реальный рабочий инструмент. Некоторые многомерные примеры могут обрабатывать только 3-мерные ряды, прежде чем затягивать вычислительную нагрузку.
Ричард Харди
@Richard Hardy: Спасибо --- я отредактировал свой ответ, чтобы включить это.
Восстановить Монику
1
Хороший способ сделать это - рассмотреть байесовскую VAR или, точнее, большую байесовскую модель VAR.
Грэм Уолш
6

Как упоминал Бен, методы учебника для нескольких временных рядов - это модели VAR и VARIMA. Однако на практике я не видел, чтобы они часто использовали это в контексте прогнозирования спроса.

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

Идея состоит в том, чтобы иметь иерархический список ваших различных продуктов, а затем делать прогнозирование как на базовом уровне (то есть для каждого отдельного временного ряда), так и на совокупных уровнях, определенных иерархией вашего продукта (см. Прилагаемую диаграмму). Затем вы согласовываете прогнозы на разных уровнях (используя сверху вниз, снизу вверх, оптимальное согласование и т. Д.) В зависимости от бизнес-целей и желаемых целей прогнозирования. Обратите внимание, что в этом случае вы не будете подгонять одну большую многомерную модель, а будете использовать несколько моделей в разных узлах вашей иерархии, которые затем сверяются с использованием выбранного вами метода согласования.

введите описание изображения здесь

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

Более продвинутый, но схожий по духу подход используется Amazon и Uber, где одна большая нейронная сеть RNN / LSTM обучается по всем временным рядам одновременно. По духу оно похоже на иерархическое прогнозирование, потому что оно также пытается выучить закономерности из сходств и корреляций между соответствующими временными рядами. Он отличается от иерархического прогнозирования тем, что пытается изучить отношения между самими временными рядами, в отличие от того, чтобы эти отношения были предопределены и зафиксированы до выполнения прогнозирования. В этом случае вам больше не нужно иметь дело с автоматической генерацией прогноза, поскольку вы настраиваете только одну модель, но поскольку модель очень сложная, процедура настройки больше не является простой задачей минимизации AIC / BIC, и вам нужно посмотреть на более продвинутые процедуры настройки гиперпараметров,

Смотрите этот ответ (и комментарии) для получения дополнительной информации.

Для пакетов Python PyAF доступен, но не очень популярен. Большинство людей используют пакет HTS в R, для которого существует гораздо больше поддержки сообщества. Для подходов, основанных на LSTM, есть модели Amazon DeepAR и MQRNN, которые являются частью сервиса, за который вы должны платить. Несколько человек также внедрили LSTM для прогнозирования спроса с помощью Keras, вы можете посмотреть их.

Скандер Х.
источник
1
Как в сторону . AUTOBOX реализует вид иерархического моделирования, на который вы ссылались при использовании итогов GROUP в качестве возможной движущей серии, чтобы помочь в прогнозировании ДЕТЕЙ с использованием моделей SARMAX. Неопределенность в прогнозах ребенка также является кумулятивной функцией неопределенности в родительском элементе, в то же время учитывая вероятность будущих импульсов в обоих случаях. Рад видеть, что кто-то другой использует этот подход.
IrishStat
Amazon недавно открыл алгоритм DeepAR с открытым исходным кодом в рамках среды GluonTS, которая использует инфраструктуру MxNet, хотя мне пока не хватает документации. aws.amazon.com/blogs/opensource/...
hardikudeshi
5

Проблема с пакетами подгонки массы, которые были предложены, заключается в том, что они одинаково не в состоянии справиться со скрытой детерминированной структурой, такой как импульсы, сдвиги уровня / шага, сезонные импульсы и временные тренды, или эффективно справиться с предложенными пользователем причинами согласно https: // autobox.com/pdfs/SARMAX.pdf

Кроме того, время вычислений может быть серьезным осложнением. AUTOBOX (который я помогал разработать) имеет очень сложную фазу построения модели, которая архивирует модели, и очень быстрый вариант прогнозирования, который повторно использует ранее разработанную модель, сокращая время прогнозирования до небольшой доли строгого времени разработки модели, одновременно корректируя новый прогноз для последних данные, наблюдаемые после того, как модель была разработана и сохранена. Это было реализовано для прогнозируемого магазина Annheuser-Busch, рассчитанного на 600 000 магазинов, для более чем 50 товаров с учетом цены и погоды.

Модели могут обновляться по мере поступления, заменяя предыдущие модели по мере необходимости.

Нет необходимости в параметрических ограничениях ИЛИ исключая одновременное влияние причинных переменных, как в VAR и VARIMA, полагаясь только на прошлое всех серий а-ля ARIMA.

Нет необходимости иметь только 1 модель с 1 набором параметров, поскольку модели могут и должны быть адаптированы / оптимизированы для отдельных серий.

К сожалению, пока нет решения Python, но надежда вечна.

IrishStat
источник
1
Звучит интересно. Просто небольшая оговорка: даже в такой простой вещи, как VAR, каждая серия получает свое собственное уравнение, поэтому не нужно беспокоиться о наличии только одной модели с одним набором параметров . Если вы не предложите несколько моделей для одной серии, что может быть хорошей идеей с точки зрения комбинаций прогноза.
Ричард Харди
цель: «подготовить единую модель для прогнозирования спроса для всех 1200 продуктов?» Я воспринял это буквально как уравнение 1 типа с 1 набором фиксированных / глобальных параметров, оцененных из всех 1200 временных рядов ». Возможно, я перечитал его
IrishStat
Или, возможно, я ошибся.
Ричард Харди
3

1200 продуктов - это основной фактор, определяющий размерность вашей проблемы. Теперь у вас есть только 25 периодов. Это очень мало данных, недостаточно для проведения какого-либо общего корреляционного анализа. Другими словами, у вас нет данных для одновременного прогноза всех продуктов без уменьшения размерности. Это в значительной степени устраняет все VARMA и другие хорошие теоретические модели. Невозможно иметь дело с коэффициентами этих моделей, их слишком много, чтобы оценить.

Рассмотрим простой корреляционный анализ. Вам понадобится (1200x1200 + 1200) / 2 ячейки в ковариационной / корреляционной матрице. У вас есть только 25 точек данных. Матрица будет в высшей степени ранжированной. Чем ты планируешь заняться? В целом у вас есть два простых подхода: отдельные прогнозы и факторная модель.

Первый подход очевиден: вы запускаете каждый продукт независимо. Вариация состоит в том, чтобы сгруппировать их по некоторому признаку, например, по таким секторам, как «закрытие мужчин».

Второй подход заключается в представлении спроса на продукт в виде dязнак равноΣJFJβJя+ея, где FJэто фактор. Каковы факторы? Это могут быть внешние факторы, такие как темпы роста ВВП. Или это могут быть внешние факторы, например, те, которые вы получили с помощью анализа PCA.

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

Далее вы анализируете факторы и строите модель прогнозирования для получения F^Jи подключите их обратно к вашей модели, чтобы получить прогноз спроса на продукцию. Вы можете запустить модель временных рядов для каждого фактора, даже векторную модель, такую ​​как VARMA, для нескольких факторов. Теперь, когда размерность проблемы уменьшилась, у вас может быть достаточно данных для прогнозирования временных рядов.

Аксакал почти наверняка бинарный
источник
Я вижу вашу точку зрения о 25 периодах, формирующих очень короткие временные ряды, но что, если они являются месячными значениями? Тогда у ОП есть два года месячных данных, которых достаточно, чтобы отразить некоторую сезонность или, по крайней мере, использовать простое экспоненциальное сглаживание, нет?
Скандер Х.
@SkanderH., 25 баллов может быть достаточно для запуска одного ряда (то есть каждого ряда самостоятельно) или совокупности. Я хочу сказать, что этого недостаточно для запуска системы.
Аксакал почти наверняка бинарный
Или это могут быть внешние факторы, например, те, которые вы получили с помощью анализа PCA. Возможно эндогенный ?
Ричард Харди
1

Я не уверен, что вас интересуют облачные решения, но Amazon предоставляет алгоритм, который они называют «DeepAR», через AWS SageMaker, как показано здесь .

Этот алгоритм специально предназначен для того, чтобы иметь возможность учиться на нескольких входных временных рядах для создания прогнозов, включая статические и динамические характеристики; как видно в этом отрывке из вышеупомянутой связанной страницы:

Обучающим входом для алгоритма DeepAR является один или, предпочтительно, несколько целевых временных рядов, которые были сгенерированы тем же процессом или подобными процессами. На основе этого входного набора данных алгоритм обучает модель, которая изучает аппроксимацию этого процесса / процессов и использует ее для прогнозирования эволюции целевого временного ряда. Каждый целевой временной ряд может быть необязательно связан с вектором статических (не зависящих от времени) категориальных признаков, предоставленных полем cat, и вектором динамических (зависящих от времени) временных рядов, предоставленных полем dynamic_feat.

К сожалению, насколько я могу судить, они не делают этот алгоритм доступным для автономного / автономного использования.

mbrig
источник