У меня есть набор данных, включающий спрос на несколько продуктов (1200 продуктов) за 25 периодов, и мне нужно спрогнозировать спрос каждого продукта на следующий период. Сначала я хотел использовать ARIMA и обучать модели для каждого продукта, но из-за количества продуктов и настройки параметров (p, d, q) это отнимает много времени и не практично. Рекомендуется ли использовать регрессию, когда предыдущие требования являются независимыми переменными (авторегрессия)?
Могу ли я узнать, существует ли какой-либо метод обучения единой модели для прогнозирования спроса для всех 1200 продуктов? Я был бы благодарен, если бы вы могли предложить любую библиотеку в Python, потому что я использую Python.
machine-learning
time-series
arima
Katatonia
источник
источник
bigtime
в R. Возможно, вы могли бы вызвать R из Python, чтобы иметь возможность использовать его.Ответы:
Обычно, когда у вас есть несколько временных рядов, вы должны использовать некую векторную модель, чтобы моделировать их все одновременно. Естественным продолжением модели ARIMA для этой цели является модель VARIMA (Vector ARIMA). Тот факт, что у вас есть1200 временных рядов, означает, что вам нужно будет указать некоторые жесткие параметрические ограничения на члены взаимной корреляции в модели, поскольку вы не сможете иметь дело со свободными параметрами для каждой пары переменных временных рядов.
Я бы предложил начать с некоторой простой векторной модели (например, VAR, VMA, VARMA) с низкой степенью и некоторыми простыми ограничениями параметров для взаимной корреляции. Посмотрите, сможете ли вы найти разумную модель, включающую взаимную корреляцию, по крайней мере, до одной степени лага, а затем перейти оттуда. Это упражнение потребует ознакомления с векторными моделями временных рядов.
MTS
Пакет иbigtime
pacakage вR
имеют некоторые возможности для работы с многофакторными временными рядами, так что было бы также стоит самостоятельно ознакомиться с этими пакетами.источник
bigtime
в R. Насколько я знаюMTS
, это скорее демонстрация примеров из учебников, чем реальный рабочий инструмент. Некоторые многомерные примеры могут обрабатывать только 3-мерные ряды, прежде чем затягивать вычислительную нагрузку.Как упоминал Бен, методы учебника для нескольких временных рядов - это модели VAR и VARIMA. Однако на практике я не видел, чтобы они часто использовали это в контексте прогнозирования спроса.
Гораздо более распространенным, включая то, что в настоящее время использует моя команда, является иерархическое прогнозирование (см. Также здесь ). Иерархическое прогнозирование используется всякий раз, когда у нас есть группы схожих временных рядов: история продаж для групп схожих или связанных продуктов, туристические данные для городов, сгруппированных по географическим регионам и т. Д.
Идея состоит в том, чтобы иметь иерархический список ваших различных продуктов, а затем делать прогнозирование как на базовом уровне (то есть для каждого отдельного временного ряда), так и на совокупных уровнях, определенных иерархией вашего продукта (см. Прилагаемую диаграмму). Затем вы согласовываете прогнозы на разных уровнях (используя сверху вниз, снизу вверх, оптимальное согласование и т. Д.) В зависимости от бизнес-целей и желаемых целей прогнозирования. Обратите внимание, что в этом случае вы не будете подгонять одну большую многомерную модель, а будете использовать несколько моделей в разных узлах вашей иерархии, которые затем сверяются с использованием выбранного вами метода согласования.
Преимущество этого подхода состоит в том, что, группируя похожие временные ряды вместе, вы можете использовать корреляции и сходства между ними, чтобы найти закономерности (такие сезонные колебания), которые может быть трудно обнаружить с помощью одного временного ряда. Поскольку вы будете генерировать большое количество прогнозов, которые невозможно настроить вручную, вам нужно будет автоматизировать процедуру прогнозирования временных рядов, но это не так уж сложно - подробности см. Здесь .
Более продвинутый, но схожий по духу подход используется Amazon и Uber, где одна большая нейронная сеть RNN / LSTM обучается по всем временным рядам одновременно. По духу оно похоже на иерархическое прогнозирование, потому что оно также пытается выучить закономерности из сходств и корреляций между соответствующими временными рядами. Он отличается от иерархического прогнозирования тем, что пытается изучить отношения между самими временными рядами, в отличие от того, чтобы эти отношения были предопределены и зафиксированы до выполнения прогнозирования. В этом случае вам больше не нужно иметь дело с автоматической генерацией прогноза, поскольку вы настраиваете только одну модель, но поскольку модель очень сложная, процедура настройки больше не является простой задачей минимизации AIC / BIC, и вам нужно посмотреть на более продвинутые процедуры настройки гиперпараметров,
Смотрите этот ответ (и комментарии) для получения дополнительной информации.
Для пакетов Python PyAF доступен, но не очень популярен. Большинство людей используют пакет HTS в R, для которого существует гораздо больше поддержки сообщества. Для подходов, основанных на LSTM, есть модели Amazon DeepAR и MQRNN, которые являются частью сервиса, за который вы должны платить. Несколько человек также внедрили LSTM для прогнозирования спроса с помощью Keras, вы можете посмотреть их.
источник
Проблема с пакетами подгонки массы, которые были предложены, заключается в том, что они одинаково не в состоянии справиться со скрытой детерминированной структурой, такой как импульсы, сдвиги уровня / шага, сезонные импульсы и временные тренды, или эффективно справиться с предложенными пользователем причинами согласно https: // autobox.com/pdfs/SARMAX.pdf
Кроме того, время вычислений может быть серьезным осложнением. AUTOBOX (который я помогал разработать) имеет очень сложную фазу построения модели, которая архивирует модели, и очень быстрый вариант прогнозирования, который повторно использует ранее разработанную модель, сокращая время прогнозирования до небольшой доли строгого времени разработки модели, одновременно корректируя новый прогноз для последних данные, наблюдаемые после того, как модель была разработана и сохранена. Это было реализовано для прогнозируемого магазина Annheuser-Busch, рассчитанного на 600 000 магазинов, для более чем 50 товаров с учетом цены и погоды.
Модели могут обновляться по мере поступления, заменяя предыдущие модели по мере необходимости.
Нет необходимости в параметрических ограничениях ИЛИ исключая одновременное влияние причинных переменных, как в VAR и VARIMA, полагаясь только на прошлое всех серий а-ля ARIMA.
Нет необходимости иметь только 1 модель с 1 набором параметров, поскольку модели могут и должны быть адаптированы / оптимизированы для отдельных серий.
К сожалению, пока нет решения Python, но надежда вечна.
источник
1200 продуктов - это основной фактор, определяющий размерность вашей проблемы. Теперь у вас есть только 25 периодов. Это очень мало данных, недостаточно для проведения какого-либо общего корреляционного анализа. Другими словами, у вас нет данных для одновременного прогноза всех продуктов без уменьшения размерности. Это в значительной степени устраняет все VARMA и другие хорошие теоретические модели. Невозможно иметь дело с коэффициентами этих моделей, их слишком много, чтобы оценить.
Рассмотрим простой корреляционный анализ. Вам понадобится (1200x1200 + 1200) / 2 ячейки в ковариационной / корреляционной матрице. У вас есть только 25 точек данных. Матрица будет в высшей степени ранжированной. Чем ты планируешь заняться? В целом у вас есть два простых подхода: отдельные прогнозы и факторная модель.
Первый подход очевиден: вы запускаете каждый продукт независимо. Вариация состоит в том, чтобы сгруппировать их по некоторому признаку, например, по таким секторам, как «закрытие мужчин».
Второй подход заключается в представлении спроса на продукт в видеdя= ∑JFJβJ я+ ея , где FJ это фактор. Каковы факторы? Это могут быть внешние факторы, такие как темпы роста ВВП. Или это могут быть внешние факторы, например, те, которые вы получили с помощью анализа PCA.
Если это экзогенный фактор, то вам нужно получить бета-версии, регрессируя ряд по этим факторам в отдельности. Для PCA вы могли бы сделать надежный PCA и получить первые несколько факторов с их весами, которые вы бета.
Далее вы анализируете факторы и строите модель прогнозирования для полученияF^J и подключите их обратно к вашей модели, чтобы получить прогноз спроса на продукцию. Вы можете запустить модель временных рядов для каждого фактора, даже векторную модель, такую как VARMA, для нескольких факторов. Теперь, когда размерность проблемы уменьшилась, у вас может быть достаточно данных для прогнозирования временных рядов.
источник
Я не уверен, что вас интересуют облачные решения, но Amazon предоставляет алгоритм, который они называют «DeepAR», через AWS SageMaker, как показано здесь .
Этот алгоритм специально предназначен для того, чтобы иметь возможность учиться на нескольких входных временных рядах для создания прогнозов, включая статические и динамические характеристики; как видно в этом отрывке из вышеупомянутой связанной страницы:
К сожалению, насколько я могу судить, они не делают этот алгоритм доступным для автономного / автономного использования.
источник