• Smart Data
  • Publié le 10 juin 2016

Prédire l’avenir : #HoltWinters (Part 1)

Qui n’a jamais rêvé de pouvoir prédire les prochaines valeurs de la bourse, ou du ticket gagnant de l’euromillion ? Plus sérieusement, comment peut-on estimer les prochaines ventes d’un produit ou repérer des valeurs anormales de consommation réseau ?

Cet article est destiné à expliquer l’algorithme de Holt-Winters qui permet, à partir d’un certain nombre de points ayant une périodicité, d’estimer la valeur des points suivants. Aussi appelé lissage exponentiel triple, le Holt-Winters est un des nombreux algorithmes qui peut être utilisé pour faire de la prévision sur des séries temporelles périodiques.

C’est un algo devenu particulièrement populaire dans les années 2000 suite à son implémentation dans l’outil RRDTool, outil fétiche des FAI, pour améliorer la surveillance des trafics réseaux. En 2011, il a également été porté sur Graphite.

Pour mieux comprendre, et/ou aller plus loin, je vous recommande chaudement d’aller lire “Forecasting: Principles and practice” de Rob J. Hyndman et George Athanasopoulos. En attendant, je vous propose une série d’articles (une série qui parle de séries, hahaha!), dont voici le tout 1er pour introduire les principes de base.

NB: J’utilise Java et JavaFX pour l’implémentation et la visualisation.

Allez, commençons avec un peu de révisions!


Quelques définitions…

Série

Une série est une suite ordonnée de nombres. Chaque point a 2 attributs: valeur et position (1er, suivant, précédent, dernier, etc). Chaque point est représenté par des coordonnées sur 2 dimensions: x et y, où x représente la position (qui s’incrémente de 1), et y sa valeur.

Valeur observée/attendue

La prévision est une estimation des valeurs que l’on ne connait pas, en se basant sur celles que l’on connait (qu’on appelle aussi données historiques). Celles que l’on connait sont les valeurs observées, et celles prédites sont les valeurs attendues. En maths, la valeur attendue s’écrit: Latex formula.

Méthode

Soit la série Latex formula. On peut aisément supposer que chaque valeur est égale à la précédente à laquelle on ajoute 1, soit Latex formula. C’est ce qu’on appelle une méthode de prévision.

Si notre méthode est bonne, la prochaine valeur sera 4. Si par contre, cette suite est celle de Fibonacci, là où on attendait Latex formula, on aurait observé Latex formula. Remarquez la différence ici entre Latex formula (attendue) et Latex formula (observée).

Évaluation d’erreur:

On va faire des prévisions sur des valeurs que l’on a déjà. La différence va nous donner des indications précieuses sur la précision de notre méthode.

Comme la différence pourrait être une valeur positive ou négative, on utilise habituellement la valeur absolue ou le carré afin de toujours avoir une valeur positive. Pour des séries, on utilise souvent:

  • la somme des erreurs au carré (Sum of Squared Error, SSE):

Latex formula

  • la moyenne des erreurs au carré (Mean Squarred Error, MSE)

Latex formula,

  • ou encore la racine carré de la moyenne des erreurs (Root Mean Squarred Error, RMSE)

Latex formula.


Les méthodes simples

Méthode naïve

Il n’y a pas plus simple, le point attendu a la même valeur que le dernier point observé.

Latex formula

Moyenne simple

Moins primitif, mais tout aussi simple, on calcule la moyenne des valeurs observées.

Latex formula

getAverage

Moyenne mobile

Un peu plus élaborée, la moyenne mobile est la moyenne des Latex formula derniers points. Concrètement cela veut dire que seules les dernières valeurs ont de l’importance. On parle de fenêtre glissante de taille Latex formula.

getMovingAverage

La moyenne n’est finalement qu’une variante de la moyenne mobile. Donc on va ré-écrire ça de façon plus logique:

getMovingAverage2

Moyenne mobile pondérée

Même principe que la moyenne mobile, sauf qu’on va ajouter différents poids aux valeurs dans la fenêtre de façon à ce que les dernières valeurs aient plus d’importance que les anciennes. On peut par exemple choisir [0.1, 0.2, 0.3, 0.4] pour donner 40% au dernier point, 30% à l’avant-dernier, etc. On fait donc la somme des valeurs multipliées par leurs poids respectifs (Latex formula) .

Latex formula

getWeightedAverage

NB: si la somme des poids n’est pas égale à 1, diviser par la somme des poids.

Latex formula


Bon et alors, ça donne quoi tout ça?!

Un petit graphique pour illustrer nos méthodes. Les données représentent le nombre de ventes d’un produit P par trimestre, et le dernier point est celui calculé par les différentes méthodes citées ci-dessus.

 basicmethods

Données utilisées (source: Datamarket): Latex formula

Méthode naïve:

Latex formula

Moyenne simple:

Latex formula

Moyenne mobile sur les 5 derniers points:

Latex formula

Moyenne mobile pondérée sur les 4 derniers points:

Latex formula

Suite au prochain épisode 🙂

Karine de Pontevès
Karine de Pontevès

Réagissez à cette article

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *