¿Cómo puedo predecir el tráfico basado en datos de series de tiempo anteriores?

18

Si tengo una tienda minorista y tengo una manera de medir cuántas personas ingresan a mi tienda cada minuto y marcan la hora de esos datos, ¿cómo puedo predecir el tráfico peatonal futuro?

He examinado los algoritmos de aprendizaje automático, pero no estoy seguro de cuál usar. En mis datos de prueba, una tendencia año tras año es más precisa en comparación con otras cosas que he probado, como KNN (con lo que creo que son parámetros sensibles y función de distancia).

Casi parece que esto podría ser similar al modelado financiero, donde se manejan datos de series temporales. ¿Algunas ideas?

usuario1132959
fuente
Tal vez este documento podría ser útil. knime.org/files/knime_bigdata_energy_timeseries_whitepaper.pdf Se trata de modelar series temporales, incluida la estacionalidad. - Rosaria
Rosaria

Respuestas:

17

El problema con modelos como KNN es que no tienen en cuenta la estacionalidad (variaciones de tendencia dependientes del tiempo). Para tenerlos en cuenta, debe utilizar el análisis de series temporales.

Para los datos de recuento, como el suyo, puede usar modelos de promedio móvil lineal regresivo automático generalizado (GLARMA). Afortunadamente, hay un paquete R que los implementa ( glarma ).

La viñeta es un buen recurso para la teoría detrás de la herramienta.

Christopher Louden
fuente
2
Otro paquete muy útil para el pronóstico y el análisis de series temporales es el pronóstico del Prof. Rob J. Hyndman.
Def_Os
¿Sabes si esto ya está implementado en algún otro idioma? No soy exactamente un profesional con R. Definitivamente leeré el periódico al menos.
user1132959
No estoy familiarizado con uno. Si desea usar python, puede usar el paquete rpy2 para llamar a la función glarma mientras realiza la mayor parte del resto de la programación en python. La mayoría de los otros idiomas también tienen dicho conector.
Christopher Louden
10

Creo que las respuestas de Christopher anteriores son completamente sensatas. Como un enfoque alternativo (o tal vez, además del consejo que ha dado), podría comenzar visualizando un poco los datos para tratar de tener una idea aproximada de lo que está sucediendo.

Si aún no lo ha hecho, puede intentar agregar el mes y el día de la semana como características; si termina con KNN, esto ayudará al modelo a mejorar la estacionalidad.

Como una forma diferente de asumir esto, podría considerar comenzar con un modelo muy, muy básico (como OLS) ... estos a menudo contribuyen en gran medida a generar predicciones razonables.

Finalmente, cuanto más sepamos sobre sus datos, más fácil será para nosotros ayudar a generar sugerencias. ¿Qué período de tiempo está observando? ¿Cuáles son las características que estás usando actualmente? etc.

Espero que esto ayude --

Mark T Patterson
fuente
Sí, la visualización es un primer paso esencial en cualquier análisis.
Christopher Louden
Agregué el mes, día del mes, día de la semana y año como características. Incluso probé un valor de "recienteidad" que disminuye linealmente. No creo haber probado OLS. Estoy observando un marco de tiempo que puede variar desde un par de semanas hasta varios años. En cuanto a visualizarlo, intenté hacer eso. El problema es que queremos que el software pueda predecir automáticamente, sin intervención humana, para diferentes clientes.
user1132959
3

Puedes probar Neural Network. Puede encontrar 2 excelentes explicaciones sobre cómo aplicar NN en series de tiempo aquí y aquí .

Tenga en cuenta que es una buena práctica:

  • Desestacionalizar / eliminar tendencias de los datos de entrada (para que el NN no aprenda la estacionalidad).
  • Reescalar / Normalizar los datos de entrada.

Debido a que lo que está buscando es un problema de regresión, las funciones de activación deben ser lineary no sigmoido tanhy su objetivo es minimizar el sum-of-squares error(como oposición a la maximización de negative log-likelihoodun problema de clasificación).

Orelus
fuente
Estaba buscando en las redes neuronales como una opción, pero no sabía qué tipo de parámetros usaría. Voy a tener que darles una oportunidad.
user1132959
Sigmoid y Tanh están bien, se busca la no linealidad para aprender interacciones más complejas y los pesos los asignarán a cualquier rango que la red considere necesario
Jan van der Vegt
3

Como @Christopher Lauden mencionó anteriormente, el análisis de series de tiempo es más apropiado para este tipo de cosas. Sin embargo, si desea hacer un "enfoque de aprendizaje automático" más tradicional, algo que he hecho en el pasado es bloquear sus datos en ventanas de tiempo superpuestas como características, luego úsela para predecir los próximos días (o semanas) ) tráfico.

Su matriz de características sería algo así como:

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

¿Dónde tIestá el tráfico en el día I? La característica que va a predecir es el tráfico el día después de la última columna. En esencia, use una ventana de tráfico para predecir el tráfico del día siguiente.

Cualquier tipo de modelo ML funcionaría para esto.

Editar

En respuesta a la pregunta, "¿puede explicar cómo utiliza esta matriz de características":

La matriz de características tiene valores que indican el tráfico pasado durante un período de tiempo (por ejemplo, tráfico por hora durante 1 semana), y lo usamos para predecir el tráfico para un período de tiempo específico en el futuro. Tomamos nuestros datos históricos y construimos una matriz de características del tráfico histórico y la etiquetamos con el tráfico en algún momento en el futuro (por ejemplo, 2 días después de la ventana en la función). Usando algún tipo de modelo de aprendizaje automático de regresión, podemos tomar datos históricos de tráfico e intentar construir un modelo que pueda predecir cómo se movió el tráfico en nuestro conjunto de datos históricos. La presunción es que el tráfico futuro se parecerá al tráfico pasado.

gallamina
fuente
¿Podría explicar cómo utilizaría esta matriz de características? ¿Estás tratando de aprender en función del cambio de tráfico a través de los días?
user1132959
Edité la respuesta para, con suerte, dar más claridad.
gallamina
2

Bueno, en primer lugar, ni siquiera usaría cosas como el aprendizaje automático sin tener un conocimiento profundo. Las cosas simplistas que haría si tuviera esta serie de tiempo son:

  1. Escriba consultas sql para comprender cuál de las veces tiene el tráfico peatonal más alto, promedio y bajo.
  2. Luego intente visualizar la serie de tiempo completa, y podría usar algoritmos básicos de coincidencia de patrones para recoger patrones.

Estas dos cosas lo ayudarán a comprender lo que su conjunto de datos le está diciendo. Luego, con eso en la mano, probablemente estará en un mejor estado para usar algoritmos de aprendizaje automático.

Además, actualmente estoy trabajando en la construcción de algo en series de tiempo, y el uso de análisis de series de tiempo lo ayudará mucho más que el aprendizaje automático. Por ejemplo, existen algoritmos de reconocimiento de patrones que puede usar que usan datos de todos los días para mostrar patrones, y los que usan hasta 3 a 6 meses de datos para capturar un patrón.

Nischal Hp
fuente
0

Aconsejaría no usar una red neuronal o equivalente ya que, supongo, usted tiene un buen historial basado en su experiencia con la tienda (es decir, que probablemente haya tendencias diarias / estacionales y cierto nivel de suavidad) y Me imagino una cantidad relativamente pequeña de datos. Una mejor opción de la OMI sería optar por un método del núcleo, como un proceso gaussiano o SVM.

j__
fuente
0

Dando vida a este hilo, ya que esto podría ser útil para otros que aterrizan aquí con preguntas similares.

Facebook lanzó recientemente y una fuente abierta de su herramienta de pronóstico interna llamada Profeta https://facebookincubator.github.io/prophet/

Está disponible como paquetes de R y Python, y demuestra ser una solución interesante para alguien con poca experiencia en Machine Learning. Sin embargo, algunos conocimientos adicionales de ML permiten ajustar y optimizar los modelos producidos.

Recomiendo probar al Profeta como primer paso. La victoria rápida de esta solución es la facilidad y la velocidad de la construcción y prueba del modelo: literalmente puede obtener una proyección de descenso en cuestión de minutos. Se comporta muy bien en series de tiempo, captando la estacionalidad de los datos disponibles "naturalmente".

Debajo del capó, es similar a un modelo aditivo generalizado (GAM): más detalles en el documento dedicado: https://facebookincubator.github.io/prophet/static/prophet_paper_20170113.pdf

Alexandre Cortyl
fuente