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.
machine-learning
time-series
arima
Katatonia
fonte
fonte
bigtime
em R. Talvez você possa chamar R do Python para poder usá-lo.Respostas:
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ê ter1200 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
MTS
pacote e obigtime
pacakage inR
têm alguns recursos para lidar com séries temporais multivariadas, portanto, também vale a pena se familiarizar com esses pacotes.fonte
bigtime
R. Até onde eu seiMTS
, é 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.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.
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.
fonte
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.
fonte
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 comodEu= ∑jFjβj i+ eEu Fj
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.
fonte
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:
Infelizmente, até onde sei, eles não disponibilizam esse algoritmo para uso offline / auto-hospedado.
fonte