Como posso prever o tráfego com base em dados de séries temporais anteriores?

18

Se eu tiver uma loja de varejo e tiver uma maneira de medir quantas pessoas entram na minha loja a cada minuto e registrar os dados com data e hora, como posso prever o tráfego de pedestres no futuro?

Analisei algoritmos de aprendizado de máquina, mas não tenho certeza de qual usar. Nos meus dados de teste, uma tendência ano a ano é mais precisa em comparação com outras coisas que tentei, como o KNN (com o que acho que são parâmetros sensíveis e função de distância).

Parece que isso pode ser semelhante à modelagem financeira, onde você lida com dados de séries temporais. Alguma ideia?

user1132959
fonte
Talvez este white paper possa ser útil. knime.org/files/knime_bigdata_energy_timeseries_whitepaper.pdf Trata-se de modelar séries temporais, incluindo sazonalidade. - Rosaria
Rosaria

Respostas:

17

O problema com modelos como o KNN é que eles não levam em consideração a sazonalidade (variações de tendência dependentes do tempo). Para levar isso em consideração, você deve usar a análise de séries temporais.

Para dados de contagem, como o seu, você pode usar modelos de média móvel auto-regressiva linear generalizada (GLARMA). Felizmente, existe um pacote R que os implementa ( glarma ).

A vinheta é um bom recurso para a teoria por trás da ferramenta.

Christopher Louden
fonte
2
Outro pacote muito útil para previsão e análise de séries temporais é previsto pelo Prof. Rob J. Hyndman.
22464 Def_Os
Você sabe se isso já está implementado em outro idioma? Eu não sou exatamente um profissional com R. Definitivamente vou ler o jornal pelo menos.
user1132959
Eu não estou familiarizado com um. Se você deseja usar python, pode usar o pacote rpy2 para chamar a função glarma enquanto faz a maior parte do restante da programação em python. A maioria dos outros idiomas também possui esse conector.
Christopher Louden
10

Eu acho que as respostas de Christopher acima são totalmente sensatas. Como uma abordagem alternativa (ou talvez apenas em adição ao conselho que ele deu), eu poderia começar apenas visualizando um pouco os dados para tentar ter uma idéia aproximada do que está acontecendo.

Se você ainda não fez isso, tente adicionar o mês e o dia da semana como recursos - se você ficar com o KNN, isso ajudará o modelo a pegar a sazonalidade.

Como uma maneira diferente de abordar isso, considere começar com um modelo muito, muito básico (como o OLS). Isso geralmente ajuda bastante na geração de previsões razoáveis.

Por fim, quanto mais soubermos sobre seus dados, mais fácil será para nós ajudar a gerar sugestões - Qual prazo você está observando? Quais são os recursos que você está usando atualmente? etc.

Espero que isto ajude --

Mark T Patterson
fonte
Sim, a visualização é um primeiro passo essencial em qualquer análise.
Christopher Louden
Eu adicionei o mês, dia do mês, dia da semana e ano como recursos. Eu até tentei um valor linearmente decrescente de "Recenteidade". Acho que não tentei o OLS. Estou observando um período de tempo que pode variar de algumas semanas a vários anos. No que diz respeito à visualização, tentei fazer isso. O problema é que queremos que o software seja capaz de prever automaticamente, sem intervenção humana, para diferentes clientes.
user1132959
3

Você pode tentar a Rede Neural. Você pode encontrar duas ótimas explicações sobre como aplicar NN em séries temporais aqui e aqui .

Observe que é uma prática recomendada:

  • Dessazonalize / diminua os dados de entrada (para que o NN não aprenda a sazonalidade).
  • Rescale / Normalize os dados de entrada.

Como o que você está procurando é um problema de regressão, as funções de ativação devem ser lineare não sigmoidou tanhe você pretende minimizar o sum-of-squares error(como oposição à maximização do negative log-likelihoodem um problema de classificação).

Orelus
fonte
Eu estava olhando para as Redes Neurais como uma opção, mas não sabia que tipo de parâmetros eu usaria. Vou ter que dar uma chance àqueles.
user1132959
Sigmóide e Tanh estão bem, não-linearidade é quis aprender interações mais complexas e os pesos irá mapear estes para qualquer faixa de julgar a rede necessária
Jan van der Vegt
3

Como @Christopher Lauden mencionado acima, a análise de séries temporais é mais apropriada para esse tipo de coisa. Se, no entanto, você desejava fazer uma "abordagem de aprendizado de máquina" mais tradicional, algo que eu fiz no passado é bloquear seus dados em janelas de tempo sobrepostas como recursos e usá-las para prever os próximos dias (ou semanas) ) tráfego.

Sua matriz de recursos seria algo como:

t1 | t2 | ... | tN
t2 | t3 | ... | tN+1
t3 | t4 | ... | tN+2
...
tW | tW+1 | ... |tN+W

onde tIestá o tráfego no dia I. O recurso que você estará prevendo é o tráfego no dia seguinte à última coluna. Em essência, use uma janela de tráfego para prever o tráfego do dia seguinte.

Qualquer tipo de modelo de ML funcionaria para isso.

Editar

Em resposta à pergunta, "você pode elaborar como você usa essa matriz de recursos":

A matriz de recursos possui valores que indicam tráfego passado durante um período de tempo (por exemplo, tráfego horário por mais de uma semana) e usamos isso para prever o tráfego para um período especificado no futuro. Pegamos nossos dados históricos e construímos uma matriz de recursos do tráfego histórico e os rotulamos com o tráfego em algum período no futuro (por exemplo, 2 dias após a janela no recurso). Usando algum tipo de modelo de aprendizado de máquina de regressão, podemos pegar dados históricos de tráfego e tentar criar um modelo que possa prever como o tráfego se moveu em nosso conjunto de dados históricos. A suposição é que o tráfego futuro se assemelhe ao tráfego passado.

galamina
fonte
Você poderia elaborar como você usaria essa matriz de recursos? Você está tentando aprender com base na mudança de tráfego ao longo dos dias?
user1132959
Eu editei a resposta para, esperançosamente, dar mais clareza.
gallamine
2

Bem, primeiro, eu nem usaria coisas como aprendizado de máquina sem ter um conhecimento profundo. As coisas simplistas que eu faria se tivesse essa série cronológica são:

  1. Escreva consultas sql para entender qual das vezes você tem o tráfego de pedestres mais movimentado, médio e baixo.
  2. Em seguida, tente visualizar a série temporal inteira e você poderá usar algoritmos básicos de correspondência de padrões para selecionar padrões.

Essas duas coisas ajudarão você a entender o que seu conjunto de dados está dizendo. Então, com isso em mãos, você provavelmente estará em um estado melhor para usar algoritmos de aprendizado de máquina.

Além disso, atualmente estou trabalhando na construção de algo sobre séries temporais, e o uso da análise de séries temporais ajudará muito mais do que o aprendizado de máquina. Por exemplo, existem algoritmos de reconhecimento de padrões que você pode usar que usa dados diários para mostrar padrões e outros que usam até 3 a 6 meses de dados para capturar um padrão.

Nischal Hp
fonte
0

Eu recomendaria não usar uma rede neural ou equivalente, já que, suponho, você tenha um bom histórico com base na sua experiência com a loja (ou seja, que provavelmente haja tendências diárias / sazonais e algum nível de suavidade) e Eu imagino uma quantidade relativamente pequena de dados. Uma opção melhor para o IMO seria optar por um método de kernel como um Processo Gaussiano ou SVM.

j__
fonte
0

Trazendo esse tópico de volta à vida, pois isso pode ser útil para outras pessoas que chegam aqui com perguntas semelhantes.

O Facebook lançou recentemente e de código aberto uma de sua ferramenta de previsão interna chamada Profeta https://facebookincubator.github.io/prophet/

Está disponível como pacotes R & Python e prova ser uma solução interessante para alguém com pouco conhecimento em Machine Learning. No entanto, alguns conhecimentos adicionais de ML permitem ajustar e otimizar os modelos produzidos.

Eu recomendo experimentar o Profeta como primeiro passo. A rápida vitória dessa solução é a facilidade e a velocidade da construção e teste do modelo: você pode literalmente obter uma projeção de descida em questão de minutos. Ele se comporta muito bem em séries temporais, capturando a sazonalidade dos dados disponíveis "naturalmente".

Sob o capô, é semelhante a um modelo aditivo generalizado (GAM) - mais detalhes no artigo dedicado: https://facebookincubator.github.io/prophet/static/prophet_paper_20170113.pdf

Alexandre Cortyl
fonte