Lissage de Holt Winters (additif et multiplicatif) en Javascript
April
23rd,
2016
Contrairement aux lissages exponentiels simple et double, le lissage de Holt Winters permet de prendre en compte à la fois la tendance, mais également la notion de cycles/saisonnalité.
Pour prendre en compte l’ensemble de ces facteurs, nous allons devoir désormais utiliser 3 paramètres : alpha, gamma et delta.
Cet article a pour objectif de présenter une implémentation possible du lissage de Holt Winters en Javascript. Il fait suite au post sur le lissage exponentiel double, et portera les mêmes points :
Implémentation du lissage du Holt-Winters en Javascript;
Calcul de la valeur optimale d'alpha, gamma et delta;
Utilisation de la librairie HighchartJs pour générer un graphique.
Nos données
Nous utiliserons les données suivantes :
var data = [61.5, 63.2, 55.8, 71.4, 70, 71.4, 63.9, 78.9, 78.3, 78.6, 71.9, 87, 86.2, 87.5, 80.1, 92.5];
Mois
CA(k€)
Janvier
61.5
Février
63.2
Mars
55.8
Avril
71.4
Mai
70
Juin
71.4
Juillet
63.9
Août
78.9
Septembre
78.3
Octobre
78.6
Novembre
71.9
Décembre
87
Janvier
86.2
Février
87.5
Mars
80.1
Avril
92.5
Mai
?
Juin
?
Juillet
?
Août
?
Ici, nous sommes en présence de cycles durant 4 mois et dont la magnitude ne croît pas au cours du temps. Nous utiliserons donc le lissage de Holt-Winters additif (par opposition au multiplicatif). Notre objectif sera de déterminer les valeurs du CA pour le prochain cycle.
Lissage de Holt Winters
Le code est extrait et adapté de la librairie zodiac-ts que j’ai mise en ligne sur Github.
Trouver les valeurs optimales d'alpha, gamma et delta
Pour trouver les meilleures valeurs des paramètres alpha, gamma et delta nous cherchons de nouveau à minimiser l’erreur quadratique. Celle-ci est égale à 1/(n-1)*(valeur[1]-prediction[1] + valeur[2]-prediction[2] + … + valeur[n]-prediction[n]).
En Javascript cela donne :
Pour trouver les meilleures valeurs, on itère entre 0 et 1 pour chaque paramètre, avec un pas passé en paramètre à notre méthode. L’objectif est de garder les valeurs d’alpha, gamma et delta permettant de minimiser l’erreur quadratique.
Une fois les paramètres optimaux estimés, il suffit de générer les prédictions associées aux valeurs de ces paramètres :
Représentation graphique avec HighchartJs
Nous allons utiliser la librairie HighchartJs afin de tracer nos deux séries (celle réalisée et celle prédite). Pour cela il suffit d’inclure Jquery, ainsi que le fichier Highcharts.js. Ensuite, nous insérons le code suivant, en modifiant les différents champs en fonction de nos besoins :