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?
machine-learning
time-series
user1132959
fonte
fonte
Respostas:
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.
fonte
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 --
fonte
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:
Como o que você está procurando é um problema de regressão, as funções de ativação devem ser
linear
e nãosigmoid
outanh
e você pretende minimizar osum-of-squares error
(como oposição à maximização donegative log-likelihood
em um problema de classificação).fonte
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:
onde
tI
está o tráfego no diaI
. 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.
fonte
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:
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.
fonte
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.
fonte
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
fonte