{"word_count": 438, "character_count": 3343}
Sur le lissage exponentiel, je pourrais renvoyer vers Gardner (1985), et la version remise au goût du jour, Gardner (2005). J'avais pris comme position, dans le cours, de présenter rapidement le lissage exponentiel, en notant qu'on les évoquerais à nouveau plus tard comme cas particulier des modèles ARIMA. Comme le note la dernière version, Gardner (2005), ce n'est pas forcément l'unique manière de voir, et le cours pourrait être orienté complètement autour des notions de lissage exponentiel (c'est d'ailleurs le point du vue de livre Hyndman, Koehler, Ord &#38; Snyder (2008)), "when Gardner (2005) appeared, many believed that exponential smoothing should be disregarded because it was either a special case of ARIMA modeling or an ad hoc procedure with no statistical rationale. As McKenzie (1985) observed, this opinion was expressed in numerous references to my paper. Since 1985, the special case argument has been turned on its head, and today we know that exponential smoothing methods are optimal for a very general class of state-space models that is in fact broader than the ARIMA class."N'étant toujours pas convaincu, j'évoquerais à nouveau le lissage exponentiel quand on présentera les modèles ARIMA. En attendant, un peu de code pour mieux comprendre ce qui est fait quand on fait du lissage exponentiel.Commençons par le lissage exponentiel simple, i.e.où  désigne un poids attribué à la nouvelle observation dans la fonction de lissage . Le code pour lisser une série est alors assez simple,&#62; library(datasets)&#62; X=as.numeric(Nile)&#62; Lissage=function(a){+  T=length(X)+  L=rep(NA,T)+  L[1]=X[1]+  for(t in 2:T){L[t]=a*X[t]+(1-a)*L[t-1]}+  return(L)+ }&#62; plot(X,type="b",cex=.6)&#62; lines(Lissage(.2),col="red")Sur la figure ci-dessus, non visualise l'impact de  sur le lissage. La prévision que l'on fait à la date , pour un horizon  est alors . Il est alors possible de voir le poids comme un paramètre et on va alors chercher le poids optimal. La stratégie classique est de minimiser l'erreur de prédiction commise à un horizon de 1&#62; V=function(a){+  T=length(X)+  L=erreur=rep(NA,T)+  erreur[1]=0+  L[1]=X[1]+  for(t in 2:T){+  L[t]=a*X[t]+(1-a)*L[t-1]+  erreur[t]=X[t]-L[t-1] }+ return(sum(erreur^2))+ }Ici, on obtient comme poids optimal&#62; A=seq(0,1,by=.02)&#62; Ax=Vectorize(V)(A)&#62; plot(A,Ax,ylim=c(min(Ax),min(Ax)*1.05))&#62; optimize(V,c(0,.5))$minimum[1] 0.246581On notera que c'est ce que suggère la fonction de R,&#62; hw=HoltWinters(X,beta=FALSE,gamma=FALSE,l.start=X[1])&#62; hwHolt-Winters exponential smoothing without trend an seasonal comp.Call:HoltWinters(x = X, beta = FALSE, gamma = FALSE, l.start = X[1])Smoothing parameters:alpha:  0.2465579beta :  FALSEgamma:  FALSECoefficients:[,1]a 805.0389&#62; plot(hw)&#62; points(2:(length(X)+1),Vectorize(Lissage)(.2465),col="blue")Dans le cas du lissage exponentiel double, i.e.etDans ce cas, la prédiction est . Le code pour faire un lissage double est là encore assez simple,&#62; Lissage=function(a,b){+  T=length(X)+  L=B=rep(NA,T)+  L[1]=X[1]; B[1]=0+  for(t in 2:T){+  L[t]=a*X[t]+(1-a)*(L[t-1]+B[t-1])+  B[t]=b*(L[t]-L[t-1])+(1-b)*B[t-1] }+ return(L)+ }Sur la figure suivante, on visualise l'évolution du lissage en fonction de  ( étant ici fixé),(le lissage simple - avec le même poids  - apparaissant ici en trait clair).