Donné une série temporelle, la prédiction de la prochaine valeur est un problème qui a fasciné beaucoup de programmeurs pendant longtemps. Évidemment, une raison clé de cette attention est les marchés boursiers, qui ont promis des richesses incalculables si vous pouvez le craquer. Cependant, à l’exception de quelques-uns (voir Un entretien rare avec le mathématicien qui a craqué Wall Street), ces richesses se sont révélées insaisissables.
Grâce à l’IoT (Internet des objets), l’analyse des séries temporelles est sur le point de revenir sur le devant de la scène. L’IoT nous permet de placer des capteurs omniprésents partout, de collecter des données et d’agir sur ces données. Les dispositifs IoT collectent des données à travers le temps et les données résultantes sont presque toujours des données de séries temporelles.
Suivant sont quelques cas d’utilisation pour la prédiction de séries temporelles.
- Prédiction de la charge électrique
- Prédiction de la demande pour les magasins de détail
- Services (par ex. comptoirs d’enregistrement des compagnies aériennes, bureaux gouvernementaux) prédiction de la clientèle
- Prévision des revenus
- Surveillance vitale des soins en USI
- Prédiction des rendements et des cultures
Explorons les techniques disponibles pour les prévisions de séries temporelles.
La première question est que « n’est-ce pas la régression ? ». C’est proche, mais ce n’est pas la même chose que la régression. Dans une série temporelle, chaque valeur est affectée par les valeurs qui précèdent juste cette valeur. Par exemple, s’il y a beaucoup de trafic à 4 h 55 à un carrefour, il y a de fortes chances qu’il y ait également du trafic à 4 h 56. C’est ce qu’on appelle l’autocorrélation. Si vous effectuez une régression, vous ne considérerez que x(t) alors qu’en raison de l’autocorrélation, x(t-1), x(t-2), … affecteront également le résultat. Nous pouvons donc considérer les prévisions de séries temporelles comme des régressions qui tiennent compte de l’autocorrélation également.
Pour cette discussion, considérons « l’ensemble de données de consommation électrique des ménages individuels », qui sont des données collectées auprès d’un ménage pendant quatre ans à intervalles d’une minute. Ne considérons que trois champs, et l’ensemble de données ressemblera à ce qui suit.
La première question est de savoir comment mesurer le succès. Nous le faisons via une fonction de perte, où nous essayons de minimiser la fonction de perte. Il existe plusieurs fonctions de perte, et elles ont des avantages et des inconvénients différents.
- MAE ( Mean absolute error) – ici toutes les erreurs, grandes et petites, sont traitées de la même manière
- Root Mean Square Error (RMSE) – cela pénalise les grandes erreurs en raison du terme au carré. Par exemple, avec des erreurs et , la MSE pour les deux sera de 0,5 alors que la RMSE est de 0,5 et. 0,45.
- MAPE (Mean Absolute Percentage Error) – Comme les valeurs #1 et #2 dépendent de la plage de valeurs de la variable cible, elles ne peuvent pas être comparées entre ensembles de données. En revanche, MAPE est un pourcentage, donc relatif. C’est comme la précision dans un problème de classification, où tout le monde sait qu’une précision de 99% est assez bonne.
- RMSEP ( Root Mean Square Percentage Error) – C’est un hybride entre #2 et #3.
- Taux d’erreur des prédictions presque correctes (AC_errorRate) – le pourcentage de prédictions qui est à moins de %p de pourcentage de la vraie valeur
Si nous essayons de prévoir la prochaine valeur, nous avons plusieurs choix.
L’étalon-or pour ce genre de problèmes est le modèle ARIMA. L’idée centrale derrière ARIMA est de briser la série temporelle en différentes composantes telles que la composante de tendance, la composante de saisonnalité, etc et d’estimer soigneusement un modèle pour chaque composante. Voir Utiliser R pour l’analyse des séries temporelles pour un bon aperçu.
Cependant, ARIMA a un problème malheureux. Il a besoin d’un expert ( un bon diplôme de statistique ou un étudiant diplômé) pour calibrer les paramètres du modèle. Si vous voulez faire de l’ARIMA multivarié, c’est-à-dire tenir compte de plusieurs champs, alors les choses deviennent encore plus difficiles.
Cependant, R a une fonction appelée auto.arima, qui estime les paramètres du modèle pour vous. J’ai essayé cela.
library("forecast")
....
x_train <- train data set
X-test <- test data set
..
powerTs <- ts(x_train, frequency=525600, start=c(2006,503604))
arimaModel <- auto.arima(powerTs)
powerforecast <- forecast.Arima(arimaModel, h=length(x_test))
accuracy(powerforecast)
Vous pouvez trouver une discussion détaillée sur la façon de faire ARIMA à partir des liens donnés ci-dessus. Je n’ai utilisé que 200k de l’ensemble de données car nous nous concentrons sur les ensembles de données de taille moyenne. Cela a donné un MAPE de 19,5.
Les caractéristiques temporelles
La deuxième approche est de venir avec une liste de caractéristiques qui capture les aspects temporels afin que l’information d’autocorrélation ne soit pas perdue. Par exemple, l’analyse technique boursière utilise des caractéristiques construites à partir des moyennes mobiles. Dans le cas simple, un analyste suivra les moyennes mobiles de 7 jours et de 21 jours et prendra des décisions en fonction des points de croisement entre ces valeurs.
Voici quelques idées de fonctionnalités
- collection de moyennes mobiles/ médianes(par ex.par exemple 7, 14, 30, 90 jours)
- Temps depuis un certain événement
- Temps entre deux événements
- Mesures mathématiques telles que l’entropie, les scores Z, etc.
- X(t) élevé à des fonctions telles que puissance(X(t),n), cos((X(t)/k)) etc
Une astuce commune que les gens utilisent est d’appliquer ces caractéristiques avec des techniques comme Random Forest et Gradient Boosting, qui peuvent fournir l’importance relative des caractéristiques. Nous pouvons utiliser ces données pour garder les bonnes caractéristiques et abandonner les caractéristiques inefficaces.
Je ne vais pas m’attarder trop longtemps sur ce sujet. Cependant, avec un peu de travail, cette méthode a montré qu’elle donnait de très bons résultats. Par exemple, la plupart des compétitions sont gagnées en utilisant cette méthode (par exemple http://blog.kaggle.com/2016/02/03/rossmann-store-sales-winners-interview-2nd-place-nima-shahbazi /).
L’inconvénient, cependant, est que l’artisanat des caractéristiques est un art noir. Il faut beaucoup de travail et d’expérience pour façonner les caractéristiques.
Rouler la régression basée sur Windows
Maintenant, nous sommes arrivés à la partie intéressante. Il semble qu’il y ait une autre méthode qui donne d’assez bons résultats sans beaucoup de coups de main.
L’idée est de prédire X(t+1), prochaine valeur dans une série temporelle, nous alimentons non seulement X(t), mais X(t-1), X(t-2) etc au modèle. Une idée similaire a été discutée dans Rolling Analysis of Time Series bien qu’elle soit utilisée pour résoudre un problème différent.
Regardons un exemple. Disons que nous avons besoin de prédire x(t+1) étant donné X(t). Alors les variables source et cible ressembleront à ce qui suit.
Le jeu de données ressemblerait à ce qui suit après avoir été transformé avec une fenêtre glissante de trois.
Il n’y a pas de gagnant clair. Cependant, la méthode de la fenêtre roulante que nous avons discutée couplée à un algorithme de régression semble fonctionner assez bien.
Conclusion
Nous avons discuté de trois méthodes : ARIMA, Utilisation des caractéristiques pour représenter les effets du temps, et Fenêtres roulantes pour faire des prévisions de la valeur suivante de séries temporelles avec des ensembles de données de taille moyenne.
Parmi les trois, la troisième méthode fournit de bons résultats comparables au modèle ARIMA automatique bien qu’elle nécessite une prise en main minimale de la part de l’utilisateur final.
C’est pourquoi nous pensons que la « régression basée sur la fenêtre glissante » est un ajout utile pour le sac d’astuces du prévisionniste !
Cependant, cela ne discrédite pas ARIMA, car avec un réglage expert, il fera beaucoup mieux. Dans le même temps, avec des caractéristiques artisanales, les méthodes deux et trois feront également mieux.
Une considération cruciale est de choisir la taille de la fenêtre pour la méthode de la fenêtre roulante. Souvent, nous pouvons avoir une bonne idée à partir du domaine. L’utilisateur peut également faire une recherche de paramètres sur la taille de la fenêtre.
Suivant, il y a quelques choses qui nécessitent une exploration plus approfondie.
- Pouvons-nous utiliser RNN et CNN ? J’ai essayé RNN, mais je n’ai pas pu obtenir de bons résultats jusqu’à présent.
- Il pourrait être utile d’alimenter d’autres caractéristiques telles que l’heure du jour, le jour de la semaine, et aussi les moyennes mobiles de différentes fenêtres de temps.
- Un aperçu des algorithmes d’optimisation par descente de gradient
- CS231n Réseaux neuronaux convolutifs pour la reconnaissance visuelle
Si vous avez apprécié ce post, vous pourriez également trouver les suivants intéressants.
- Introduction à la détection des anomalies : Concepts et techniques
- Chronique du Big Data : Une comédie technique
Aussi, consultez certains de mes billets les plus lus et mes conférences (vidéos). Parlez-moi à @srinath_perera ou trouvez-moi.