Como lidar com muitas séries temporais simultaneamente?


14

Eu tenho um conjunto de dados que inclui a demanda de vários produtos (1200 produtos) por 25 períodos e preciso prever a demanda de cada produto para o próximo período. No começo, eu queria usar o ARIMA e treinar um modelo para cada produto, mas devido ao número de produtos e à adequação dos parâmetros (p, d, q), ele consome muito tempo e não é prático. É recomendável usar uma regressão em que as demandas anteriores sejam variáveis ​​independentes (autorregressiva)?

Posso saber se existe algum método para treinar um único modelo para a previsão de demanda de todos os 1200 produtos? Ficaria muito grato se você puder sugerir qualquer biblioteca em Python porque estou usando o Python.


3
O pacote mais avançado para análise de séries temporais de alta dimensão que eu conheço está bigtimeem R. Talvez você possa chamar R do Python para poder usá-lo.
Richard Hardy

Respostas:


11

Geralmente, quando você tem várias séries temporais, você usaria algum tipo de modelo baseado em vetor para modelá-las todas simultaneamente. A extensão natural do modelo ARIMA para esse fim é o modelo VARIMA (Vector ARIMA). O fato de você ter 1200 séries temporais significa que será necessário especificar algumas restrições paramétricas pesadas nos termos de correlação cruzada no modelo, pois você não poderá lidar com parâmetros livres para cada par de variáveis ​​de séries temporais.

Eu sugeriria começar com algum modelo simples baseado em vetor (por exemplo, VAR, VMA, VARMA) com baixo grau e algumas restrições simples de parâmetros para correlação cruzada. Veja se você consegue encontrar um modelo razoável que incorpore correlação cruzada com pelo menos um grau de atraso e siga a partir daí. Este exercício exigirá a leitura de modelos de séries temporais baseados em vetores. O MTSpacote e o bigtimepacakage in Rtêm alguns recursos para lidar com séries temporais multivariadas, portanto, também vale a pena se familiarizar com esses pacotes.


O pacote mais avançado para análise de séries temporais de alta dimensão que eu conheço é o bigtimeR. Até onde eu sei MTS, é mais uma demonstração de exemplos de livros didáticos do que uma ferramenta de trabalho real. Alguns exemplos multivariados só podem lidar com séries tridimensionais antes de engasgar com a carga computacional.
Richard Hardy

@ Richard Hardy: Obrigado --- Eu editei minha resposta para incluir isso.
Reintegrar Monica

1
Uma boa maneira de fazer isso seria considerar um VAR Bayesiano ou, mais especificamente, o grande modelo VAR Bayesiano.
Graeme Walsh

6

Como Ben mencionou, os métodos do livro de texto para várias séries temporais são os modelos VAR e VARIMA. Na prática, porém, eu não os vi usados ​​com tanta frequência no contexto da previsão de demanda.

Muito mais comum, incluindo o que minha equipe usa atualmente, é a previsão hierárquica (veja também aqui ). A previsão hierárquica é usada sempre que temos grupos de séries temporais semelhantes: histórico de vendas de grupos de produtos similares ou relacionados, dados turísticos de cidades agrupadas por região geográfica, etc.

A idéia é ter uma lista hierárquica de seus diferentes produtos e, em seguida, fazer previsões no nível base (por exemplo, para cada série temporal individual) e em níveis agregados definidos pela hierarquia de produtos (veja o gráfico em anexo). Em seguida, você reconcilia as previsões nos diferentes níveis (usando Top Down, Botton Up, Reconciliação Ideal, etc ...) dependendo dos objetivos de negócios e das metas de previsão desejadas. Observe que, nesse caso, você não ajustará um grande modelo multivariado, mas vários modelos em nós diferentes da hierarquia, que serão reconciliados usando o método de reconciliação escolhido.

insira a descrição da imagem aqui

A vantagem dessa abordagem é que, agrupando séries temporais semelhantes, você pode tirar proveito das correlações e semelhanças entre elas para encontrar padrões (variações sazonais) que podem ser difíceis de detectar com uma única série temporal. Como você gerará um grande número de previsões impossíveis de ajustar manualmente, será necessário automatizar o procedimento de previsão de séries temporais, mas isso não é muito difícil - veja aqui para obter detalhes .

Uma abordagem mais avançada, mas similar em espírito, é usada pela Amazon e Uber, onde uma grande rede neural RNN / LSTM é treinada em todas as séries temporais de uma só vez. É semelhante em espírito à previsão hierárquica, porque também tenta aprender padrões de similaridades e correlações entre séries temporais relacionadas. É diferente da previsão hierárquica porque tenta aprender os relacionamentos entre as séries temporais em si, em vez de ter esse relacionamento predeterminado e fixo antes de fazer a previsão. Nesse caso, você não precisa mais lidar com a geração automatizada de previsões, pois está ajustando apenas um modelo, mas como o modelo é muito complexo, o procedimento de ajuste não é mais uma tarefa simples de minimização de AIC / BIC e você precisa analisar procedimentos de ajuste de hiperparâmetros mais avançados,

Consulte esta resposta (e comentários) para obter detalhes adicionais.

Para pacotes Python, o PyAF está disponível, mas não é muito popular. A maioria das pessoas usa o pacote HTS no R, para o qual há muito mais suporte da comunidade. Para abordagens baseadas em LSTM, existem os modelos DeepAR e MQRNN da Amazon que fazem parte de um serviço pelo qual você deve pagar. Várias pessoas também implementaram o LSTM para previsão de demanda usando o Keras. Você pode consultá-las.


1
Como um aparte. A AUTOBOX implementa o tipo de modelagem hierárquica a que você se referiu ao usar os totais do GROUP como uma possível série de acionamentos, a fim de AJUDAR a previsão das CRIANÇAS usando os modelos SARMAX. A incerteza nas previsões da criança também é, então, uma função cumulativa da incerteza nos pais, ao mesmo tempo em que incorpora a possibilidade de pulsos futuros nos dois. Encantado em ver alguém empregar essa abordagem.
IrishStat

A Amazon recentemente abriu o algoritmo DeepAR de código aberto sob a estrutura GluonTS, que aproveita a estrutura MxNet, embora eu ache a documentação um pouco ausente neste momento. aws.amazon.com/blogs/opensource/…
hardikudeshi

5

O problema com os pacotes de ajuste de massa que foram sugeridos é que eles falham uniformemente em lidar com a estrutura determinística latente, como pulsos, mudanças de nível / etapa, pulsos sazonais e tendências temporais ou lidam eficientemente com causais sugeridos pelo usuário, conforme https: // autobox.com/pdfs/SARMAX.pdf

Além disso, o tempo de computação pode ser uma complicação séria. O AUTOBOX (que eu ajudei a desenvolver) possui uma fase de construção de modelo muito sofisticada que arquiva modelos e uma opção de previsão muito rápida que reutiliza o modelo desenvolvido anteriormente, reduzindo o tempo de previsão a uma pequena fração do tempo rigoroso de desenvolvimento do modelo enquanto ajusta a nova previsão para recentes dados observados após o desenvolvimento e armazenamento do modelo. Isso foi implementado no projeto de previsão de 600.000 lojas da Annheuser-Busch para mais de 50 itens, considerando preço e clima.

Os modelos podem ser atualizados de forma contínua, substituindo os modelos anteriores, conforme necessário.

Não há necessidade de restrições paramétricas OU omitir o efeito simultâneo de variáveis ​​causais, como no VAR e no VARIMA, contando apenas com o passado de todas as séries à la ARIMA.

Não é necessário ter apenas 1 modelo com 1 conjunto de parâmetros, pois os modelos podem e devem ser adaptados / otimizados para as séries individuais.

Infelizmente, ainda não existe uma solução Python, mas a esperança cresce eternamente.


1
Soa interessante. Apenas uma pequena queixa: mesmo em algo tão simples quanto um VAR, cada série obtém sua própria equação, portanto, a necessidade de ter apenas 1 modelo com 1 conjunto de parâmetros não é uma preocupação. A menos que você sugira vários modelos para a mesma série, isso pode ser uma boa ideia da perspectiva das combinações de previsão.
Richard Hardy

objetivo: "treinar um modelo único para a previsão de demanda de todos os 1.200 produtos?" Eu considerei isso literalmente como uma equação de tipo 1 com 1 conjunto de parâmetros fixos / globais estimados em todas as 1200 séries temporais ". Talvez eu tenha lido
demais

Ou talvez eu tenha entendido errado.
Richard Hardy

3

1200 produtos é o principal fator da dimensionalidade do seu problema. Agora você tem apenas 25 períodos. São poucos dados, insuficientes para fazer qualquer tipo de análise de correlação geral. Em outras palavras, você não possui dados para ter uma previsão simultânea de todos os produtos sem reduzir a dimensionalidade. Isso praticamente elimina todo o VARMA e outros modelos teóricos agradáveis. É impossível lidar com os coeficientes desses modelos, existem muitos deles para estimar.

Considere uma análise de correlação simples. Você precisaria (1200x1200 + 1200) / 2 células na matriz de covariância / correlação. Você tem apenas 25 pontos de dados. A matriz terá uma classificação de grau enorme. O que você vai fazer? Em termos gerais, você tem duas abordagens simples: previsões separadas e modelo de fatores.

A primeira abordagem é óbvia: você executa cada produto independentemente. A variação é agrupá-los por algum recurso, por exemplo, setor como "fechamento de homens".

A segunda abordagem é representar a demanda do produto como dEu=jFjβjEu+eEuFj

Se for um fator exógeno, você precisará obter betas regredindo a série nesses fatores individualmente. Para o PCA, você pode fazer um PCA robusto e obter os primeiros fatores com seus pesos, que são seus betas.

F^j


Entendo o seu argumento de cerca de 25 períodos em uma série temporal muito curta, mas e se forem valores mensais? Então o OP tem dois anos de dados mensais, o que é suficiente para capturar alguma sazonalidade, ou pelo menos para usar a suavização exponencial simples, não?
#

@ SkanderH., 25 pontos podem ser suficientes para executar uma série (ou seja, cada série por si só) ou o agregado. O que quero dizer é que não basta executar isso como um sistema.
Aksakal

Ou eles podem ser fatores exógenos, por exemplo, aqueles que você obteve com a análise PCA. Talvez endógeno ?
Richard Hardy

1

Não tenho certeza se você está interessado em soluções baseadas em nuvem, mas a Amazon disponibiliza um algoritmo que eles chamam de "DeepAR" através do AWS SageMaker, como visto aqui .

Esse algoritmo é projetado especificamente para ser capaz de aprender com várias séries temporais de entrada, a fim de criar previsões, incluindo recursos estáticos e dinâmicos; como visto neste trecho da página vinculada acima:

A entrada de treinamento para o algoritmo DeepAR é uma ou, de preferência, mais séries temporais de destino que foram geradas pelo mesmo processo ou processos similares. Com base nesse conjunto de dados de entrada, o algoritmo treina um modelo que aprende uma aproximação desse processo / processos e o utiliza para prever como a série temporal alvo evolui. Cada série temporal de destino pode ser opcionalmente associada a um vetor de recursos categóricos estáticos (independentes do tempo) fornecidos pelo campo cat e um vetor de séries temporais dinâmicas (dependentes do tempo) fornecidas pelo campo dynamic_feat.

Infelizmente, até onde sei, eles não disponibilizam esse algoritmo para uso offline / auto-hospedado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.