Comment puis-je prédire le trafic sur la base des données de séries chronologiques précédentes?

18

Si j'ai un magasin de détail et que j'ai un moyen de mesurer le nombre de personnes qui entrent dans mon magasin chaque minute et d'horodater ces données, comment puis-je prédire le trafic piétonnier futur?

J'ai étudié les algorithmes d'apprentissage automatique, mais je ne sais pas lequel utiliser. Dans mes données de test, une tendance d'une année à l'autre est plus précise par rapport à d'autres choses que j'ai essayées, comme KNN (avec ce que je pense être des paramètres sensibles et une fonction de distance).

Il semble presque que cela pourrait être similaire à la modélisation financière, où vous traitez des données de séries chronologiques. Des idées?

user1132959
la source
Peut-être que ce livre blanc pourrait être utile. knime.org/files/knime_bigdata_energy_timeseries_whitepaper.pdf Il s'agit de modéliser des séries chronologiques incluant la saisonnalité. - Rosaria
Rosaria

Réponses:

17

Le problème avec des modèles comme KNN est qu'ils ne prennent pas en compte la saisonnalité (variations de tendance en fonction du temps). Pour en tenir compte, vous devez utiliser l'analyse des séries chronologiques.

Pour les données de comptage, telles que les vôtres, vous pouvez utiliser des modèles de moyenne mobile linéaire auto-régressive généralisée (GLARMA). Heureusement, il existe un package R qui les implémente ( glarma ).

La vignette est une bonne ressource pour la théorie derrière l'outil.

Christopher Louden
la source
2
Un autre package très utile pour l' analyse des prévisions et des séries chronologiques est prévu par le Professeur Rob J. Hyndman.
Def_Os
Savez-vous si cela est déjà implémenté dans une autre langue? Je ne suis pas exactement un pro avec R. Je vais certainement lire au moins le papier.
user1132959
Je n'en connais pas un. Si vous souhaitez utiliser python, vous pouvez utiliser le package rpy2 pour appeler la fonction glarma tout en effectuant la majeure partie du reste de la programmation en python. La plupart des autres langues ont également un tel connecteur.
Christopher Louden
10

Je pense que les réponses de Christopher ci-dessus sont tout à fait sensées. En tant qu'approche alternative (ou peut-être juste en plus des conseils qu'il a donnés), je pourrais commencer par simplement visualiser les données un peu pour essayer d'avoir une idée approximative de ce qui se passe.

Si vous ne l'avez pas déjà fait, vous pouvez essayer d'ajouter le mois et le jour de la semaine en tant que fonctionnalités - si vous restez fidèle à KNN, cela aidera le modèle à saisir la saisonnalité.

Comme autre façon de procéder, vous pourriez envisager de commencer avec un modèle vraiment, vraiment basique (comme OLS). Ceux-ci vont souvent très loin dans la génération de prévisions raisonnables.

Enfin, plus nous en savons sur vos données, plus il nous sera facile de vous aider à générer des suggestions - Quel délai observez-vous? Quelles sont les fonctionnalités que vous utilisez actuellement? etc.

J'espère que cela t'aides --

Mark T Patterson
la source
Oui, la visualisation est une première étape essentielle dans toute analyse.
Christopher Louden
J'ai ajouté le mois, le jour du mois, le jour de la semaine et l'année comme fonctionnalités. J'ai même essayé une valeur de "nouveauté" décroissant linéairement. Je ne pense pas avoir essayé OLS. J'observe un laps de temps qui peut aller de quelques semaines à plusieurs années. En ce qui concerne la visualisation, j'ai essayé de le faire. Le problème est que nous voulons que le logiciel puisse prédire automatiquement, sans intervention humaine, pour différents clients.
user1132959
3

Vous pouvez essayer Neural Network. Vous pouvez trouver 2 excellentes explications sur la façon d'appliquer NN sur des séries chronologiques ici et ici .

Notez qu'il est recommandé de:

  • Désaisonnaliser / dissuader les données d'entrée (afin que le NN n'apprenne pas la saisonnalité).
  • Redimensionner / normaliser les données d'entrée.

Parce que ce que vous recherchez est un problème de régression, les fonctions d'activation doivent être linearet non sigmoidou tanhet vous visez à minimiser le sum-of-squares error(par opposition à la maximisation du negative log-likelihooddans un problème de classification).

Orelus
la source
Je cherchais des réseaux de neurones en option, mais je ne savais pas quel type de paramètres j'utiliserais. Je vais devoir les essayer.
user1132959
Sigmoid et Tanh vont bien, la non-linéarité est souhaitée pour apprendre des interactions plus complexes et les poids les mapperont à n'importe quelle plage que le réseau jugera nécessaire
Jan van der Vegt
3

Comme @Christopher Lauden l'a mentionné ci-dessus, l'analyse des séries chronologiques est la plus appropriée pour ce genre de chose. Si, cependant, vous souhaitiez faire une "approche d'apprentissage machine" plus traditionnelle, j'ai déjà fait quelque chose par le passé pour bloquer vos données dans des fenêtres de temps qui se chevauchent en tant que fonctionnalités, puis utilisez-les pour prédire les prochains jours (ou semaines) ) circulation.

Votre matrice de fonctionnalités serait quelque chose comme:

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

tIest le trafic le jour I. La fonctionnalité que vous prédirez est le trafic le lendemain de la dernière colonne. Essentiellement, utilisez une fenêtre de trafic pour prédire le trafic du lendemain.

Toute sorte de modèle ML fonctionnerait pour cela.

Éditer

En réponse à la question, "pouvez-vous expliquer comment vous utilisez cette matrice de fonctionnalités":

La matrice de caractéristiques a des valeurs indiquant le trafic passé sur une période de temps (par exemple, le trafic horaire sur 1 semaine), et nous l'utilisons pour prédire le trafic pour une période de temps spécifiée à l'avenir. Nous prenons nos données historiques et construisons une matrice de caractéristiques du trafic historique et étiquetons cela avec le trafic à une certaine période dans le futur (par exemple 2 jours après la fenêtre dans la fonctionnalité). En utilisant une sorte de modèle d'apprentissage automatique de régression, nous pouvons prendre des données de trafic historiques et essayer de construire un modèle qui peut prédire comment le trafic s'est déplacé dans notre ensemble de données historiques. La présomption est que le trafic futur ressemblera au trafic passé.

gallamine
la source
Pourriez-vous expliquer comment vous utiliseriez cette matrice de fonctionnalités? Essayez-vous d'apprendre en fonction du changement de trafic sur plusieurs jours?
user1132959
J'ai édité la réponse pour, espérons-le, donner plus de clarté.
gallamine
2

Eh bien, tout d'abord, je n'utiliserais même pas des choses comme le Machine Learning sans avoir une connaissance approfondie. Les choses simplistes que je ferais si j'avais cette série chronologique sont:

  1. Écrivez des requêtes SQL pour comprendre à quelle heure vous avez le trafic piétonnier le plus fréquenté, moyen et faible.
  2. Essayez ensuite de visualiser toute la série chronologique et vous pouvez utiliser des algorithmes de correspondance de motifs de base pour détecter des motifs.

Ces deux choses vous aideront à comprendre ce que votre ensemble de données vous dit. Ensuite, avec cela en main, vous serez probablement dans un meilleur état pour utiliser des algorithmes d'apprentissage automatique.

De plus, je travaille actuellement à la construction de quelque chose sur des séries temporelles, et l'utilisation de l'analyse de séries temporelles vous aidera beaucoup plus que l'apprentissage automatique. Par exemple, il existe des algorithmes de reconnaissance de modèle que vous pouvez utiliser qui utilisent des données quotidiennes pour afficher des modèles et d'autres qui utilisent jusqu'à 3 à 6 mois de données pour capturer un modèle.

Nischal Hp
la source
0

Je déconseille d'utiliser un réseau de neurones ou équivalent car, je suppose, vous avez un si bon avant en fonction de votre expérience avec le magasin (c'est-à-dire qu'il y a probablement des tendances quotidiennes / saisonnières et un certain niveau de douceur) et J'imagine une quantité relativement petite de données. Une meilleure option IMO serait d'opter pour une méthode du noyau telle qu'un processus gaussien ou SVM.

j__
la source
0

Ramener ce fil à la vie, car cela pourrait être utile à d'autres atterrissant ici avec des questions similaires.

Facebook a récemment publié et open source un de leur outil de prévision interne appelé Prophet https://facebookincubator.github.io/prophet/

Il est disponible sous forme de packages R & Python et s'avère être une solution intéressante pour quelqu'un avec peu d'expérience en Machine Learning. Cependant, certaines connaissances supplémentaires en ML permettent de régler et d'optimiser les modèles produits.

Je recommande d'essayer Prophet dans un premier temps. Le gain rapide sur cette solution est la facilité et la rapidité de construction et de test du modèle: vous pouvez littéralement obtenir une projection de descente en quelques minutes. Il se comporte très bien sur les séries chronologiques, saisissant «naturellement» la saisonnalité des données disponibles.

Sous le capot, il est similaire à un modèle additif généralisé (GAM) - plus de détails sur le papier dédié: https://facebookincubator.github.io/prophet/static/prophet_paper_20170113.pdf

Alexandre Cortyl
la source