-----
# Résultats numériques
+% if P == 8:
Cette partie montre les résultats obtenus avec des variantes de l'algorithme décrit à la
section 4, en utilisant le package présenté au chapitre précédent. Cet algorithme est
systématiquement comparé à deux approches naïves :
de filaments, la moitié droite du graphe correspond aux jours similaires au jour courant,
tandis que la moitié gauche affiche les jours précédents : ce sont donc les voisinages
tels qu'utilisés dans l'algorithme.
+% endif
<%
list_titles = ['Pollution par chauffage','Pollution par épandage','Semaine non polluée']
list_indices = ['indices_ch', 'indices_ep', 'indices_np']
package="talweg"))
exo_data = read.csv(system.file("extdata","meteo_extra_noNAs.csv",
package="talweg"))
-# NOTE: 'GMT' because DST gaps are filled and multiple values merged in
-# above dataset. Prediction from P+1 to P+H included.
data = getData(ts_data, exo_data)
indices_ch = seq(as.Date("2015-01-19"),as.Date("2015-01-25"),"days")
##<h2 style="color:blue;font-size:2em">${list_titles[i]}</h2>
${"##"} ${list_titles[i]}
-----r
-p1_7 = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", predict_from=P,
- horizon=H, simtype="mix", local=FALSE)
-p2 = computeForecast(data, ${list_indices[i]}, "Neighbors", NULL, predict_from=P,
- horizon=H, simtype="none", local=TRUE)
-p3 = computeForecast(data, ${list_indices[i]}, "Average", "Zero", predict_from=P,
- horizon=H)
-p4 = computeForecast(data, ${list_indices[i]}, "Persistence", "Zero", predict_from=P,
- horizon=H, same_day=${'TRUE' if loop.index < 2 else 'FALSE'})
+p1 = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors",
+ predict_from=P, horizon=H, simtype="mix", local=FALSE)
+p2 = computeForecast(data, ${list_indices[i]}, "Neighbors", NULL,
+ predict_from=P, horizon=H, simtype="none", local=TRUE)
+p3 = computeForecast(data, ${list_indices[i]}, "Average", "Zero",
+ predict_from=P, horizon=H)
+p4 = computeForecast(data, ${list_indices[i]}, "Persistence", "Zero",
+ predict_from=P, horizon=H, same_day=${'TRUE' if loop.index < 2 else 'FALSE'})
-----r
e1 = computeError(data, p1, P, H)
e2 = computeError(data, p2, P, H)
sum_p23 = e2$abs$indices + e3$abs$indices
i_np = which.min(sum_p23) #indice de jour "facile"
i_p = which.max(sum_p23) #indice de jour "difficile"
+% if P == 8:
-----
% if i == 0:
L'erreur absolue $-$ en haut à droite $-$ reste modérée pour les meilleurs modèles
voisins "locale" ; ceci peut être dû au fait que l'on ajuste le niveau du jour à prédire
en le recollant sur la dernière valeur observée (sauf pour "Neighbors local").
% endif
+% endif
-----r
options(repr.plot.width=9, repr.plot.height=4)
par(mfrow=c(1,2))
plotPredReal(data, p2, i_p); title(paste("PredReal p2 day",i_p))
# Bleu : prévue ; noir : réalisée (confondues jusqu'à predict_from-1)
+% if P == 8:
-----
% if i == 0:
Le jour "facile à prévoir", à gauche, se décompose en deux modes : un léger vers 10h
erreurs au final ne sont pas très importantes. De plus deux des quatres graphes sont
satisfaisants (en haut à droite et en bas à gauche : forme + niveau acceptables.
% endif
+% endif
-----r
par(mfrow=c(1,2))
f_p2 = computeFilaments(data, p2, i_p, plot=TRUE)
title(paste("Filaments p2 day",i_p))
+% if P == 8:
-----
% if i == 0:
Les voisins du jour courant (période de 24h allant de 8h à 7h le lendemain) sont affichés
observée. Cette observation est cependant trompeuse, comme l'indique plus bas le graphe
de variabilité relative.
% endif
+% endif
-----r
par(mfrow=c(1,2))
title(paste("FilBox p1 day",i_p))
# En pointillés la courbe du jour courant (à prédire) + précédent
+% if P == 8:
-----
% if i == 0:
Sur cette boxplot fonctionnelle (voir la fonction fboxplot() du package R "rainbow") on
On peut réappliquer les mêmes remarques qu'auparavant sur les boxplots fonctionnels :
voisins atypiques, courbe à prévoir elle-même légèrement "hors norme".
% endif
+% endif
-----r
par(mfrow=c(1,2))
title(paste("StdDev p2 day",i_p))
# Variabilité globale en rouge ; sur les voisins en noir
+% if P == 8:
-----
% if i == 0:
Ces graphes viennent confirmer l'impression visuelle après observation des filaments. En
au-dessus de la variabilité locale. Bien que cela ne suffise pas à obtenir de bonnes
prédictions de forme, on constate au moins l'amélioration dans la prédiction du niveau.
% endif
+% endif
-----r
plotSimils(p1, i_np)
title(paste("Weights p1 day",i_np))
title(paste("Weights p1 day",i_p))
# Poids < 1/N à gauche, >= 1/N à droite ; jour facile en haut, difficile en bas
+% if P == 8:
-----
% if i == 0:
Les poids se concentrent près de 0 : c'est ce que l'on souhaite observer pour éviter
Les poids sont répartis comme souhaité : concentrés vers 0 avec quelques valeurs non
négligeables.
% endif
+% endif
-----r
options(digits=2)
-p1$getParams(i_np)$window
-p1$getParams(i_p)$window
+print(p1$getParams(i_np)$window)
+print(p1$getParams(i_p)$window)
# Fenêtres sélectionnées dans ]0,7]
% endfor
+% if P == 8:
-----
${"##"} Bilan
élevées, notamment en terme de MAPE. Une possible poste d'amélioration consisterait à
aggréger les courbes spatialement (sur plusieurs stations situées dans la même
agglomération ou dans une même zone).
+% endif