X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=reports%2FExperiments.gj;h=b3492699b2367a6b65a2ca5be66f0c2c3025759c;hb=f71b975b140342f7ea80275359b7f4f9aa75153a;hp=55147e94ab99c32da939f38c2e14b01ad2ef0258;hpb=9b9bb2d490e356ff0393aec66b137cff0a64803d;p=talweg.git
diff --git a/reports/Experiments.gj b/reports/Experiments.gj
index 55147e9..b349269 100644
--- a/reports/Experiments.gj
+++ b/reports/Experiments.gj
@@ -1,6 +1,7 @@
-----
# 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 :
@@ -28,6 +29,7 @@ difficulté du problème viennent compléter ces premières courbes. Concernant
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']
@@ -42,8 +44,6 @@ ts_data = read.csv(system.file("extdata","pm10_mesures_H_loc_report.csv",
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")
@@ -54,14 +54,14 @@ indices_np = seq(as.Date("2015-04-27"),as.Date("2015-05-03"),"days")
##
${list_titles[i]}
${"##"} ${list_titles[i]}
-----r
-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'})
+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)
@@ -76,12 +76,13 @@ plotError(list(e1, e4, e3, e2), cols=c(1,2,colors()[258],4))
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 à gauche -- reste modérée pour les meilleurs modèles
+L'erreur absolue $-$ en haut à droite $-$ reste modérée pour les meilleurs modèles
(variantes à voisins), ne dépassant 10 que deux jours. Les deux modèles naïfs ont des
erreurs similaires sauf sur la période "difficile" (jours 4 à 6), sur laquelle on gagne
-donc à chercher des jours similaires pour effectuer la prévision.
+donc à chercher des jours semblables pour effectuer la prévision.
Le MAPE reste en geÌneÌral infeÌrieur aÌ 35% pour les meilleurs méthodes.
% elif i == 1:
Le modèle à voisins avec contrainte de localité obtient ici les meilleurs résultats, son
@@ -92,9 +93,10 @@ droite). Le MAPE jour après jour est du même ordre que précédemment pour cet
Dans ce cas plus favorable les intensiteÌ des erreurs absolues ont clairement diminueÌ :
elles sont souvent en dessous de 5. En revanche le MAPE moyen reste en général au-delaÌ de
20%. Comme dans le cas de l'eÌpandage on constate une croissance globale de la courbe
-journalieÌre d'erreur absolue moyenne (en haut aÌ gauche) -- sauf pour la méthode à voisins
-"locale" ; ceci peut eÌtre duÌ au fait que l'on ajuste le niveau du jour aÌ preÌdire en le
-recollant sur la dernieÌre valeur observeÌe (sauf pour "Neighbors local").
+journalieÌre d'erreur absolue moyenne (en haut aÌ gauche) $-$ sauf pour la méthode Ã
+voisins "locale" ; ceci peut eÌtre duÌ au fait que l'on ajuste le niveau du jour aÌ preÌdire
+en le recollant sur la dernieÌre valeur observeÌe (sauf pour "Neighbors local").
+% endif
% endif
-----r
options(repr.plot.width=9, repr.plot.height=4)
@@ -107,6 +109,7 @@ plotPredReal(data, p2, i_np); title(paste("PredReal p2 day",i_np))
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 aÌ preÌvoir", aÌ gauche, se deÌcompose en deux modes : un leÌger vers 10h
@@ -120,13 +123,14 @@ Dans le cas d'un jour "facile" aÌ preÌdire $-$ aÌ gauche $-$ la forme est plu
retrouveÌe, ainsi que le niveau moyen pour la méthode sans contrainte de localité
(dans l'autre, l'algorithme a probablement écarté trop de voisins potentiels).
Concernant le jour "difficile" aÌ droite, non seulement la forme n'est pas anticipeÌe mais
-surtout le niveau preÌdit est largement supérieur au niveau de pollution observeÌ -- dans
+surtout le niveau preÌdit est largement supérieur au niveau de pollution observeÌ $-$ dans
une moindre mesure toutefois pour la variante "locale".
% else:
L'impression visuelle est plutôt mauvaise dans ce cas, mais les écart étant minimes les
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))
@@ -141,6 +145,7 @@ title(paste("Filaments p2 day",i_np))
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 (peÌriode de 24h allant de 8h aÌ 7h le lendemain) sont afficheÌs
@@ -157,6 +162,7 @@ Les graphes de filaments ont encore la meÌme allure, avec une assez grande vari
observeÌe. Cette observation est cependant trompeuse, comme l'indique plus bas le graphe
de variabiliteÌ relative.
% endif
+% endif
-----r
par(mfrow=c(1,2))
@@ -167,6 +173,7 @@ plotFilamentsBox(data, f_p1, predict_from=P)
title(paste("FilBox p1 day",i_p))
# En pointilleÌs la courbe du jour courant (aÌ preÌdire) + précédent
+% if P == 8:
-----
% if i == 0:
Sur cette boxplot fonctionnelle (voir la fonction fboxplot() du package R "rainbow") on
@@ -184,6 +191,7 @@ l'impossibiliteÌ de bien preÌvoir une courbe en utilisant l'algorithme aÌ voi
On peut reÌappliquer les meÌmes remarques qu'auparavant sur les boxplots fonctionnels :
voisins atypiques, courbe aÌ preÌvoir elle-meÌme leÌgeÌrement "hors norme".
% endif
+% endif
-----r
par(mfrow=c(1,2))
@@ -200,6 +208,7 @@ plotRelVar(data, f_p2, predict_from=P)
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 apreÌs observation des filaments. En
@@ -217,6 +226,7 @@ Cette fois la situation ideÌale est observeÌe : la variabiliteÌ globale est n
au-dessus de la variabiliteÌ locale. Bien que cela ne suffise pas aÌ obtenir de bonnes
preÌdictions de forme, on constate au moins l'ameÌlioration dans la preÌdiction du niveau.
% endif
+% endif
-----r
plotSimils(p1, i_np)
title(paste("Weights p1 day",i_np))
@@ -225,24 +235,28 @@ plotSimils(p1, i_p)
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 preÌs de 0 : c'est ce que l'on souhaite observer pour eÌviter
d'effectuer une simple moyenne.
% elif i == 1:
-En comparaison avec le paragraphe preÌceÌdent on retrouve le meÌme (bon) comportement des
-poids pour la version "non locale".
+On retrouve le meÌme (bon) comportement des poids : concentration vers 0, quelques poids
+non négligeables (presque trop peu pour le jour "difficile").
% else:
-Concernant les poids en revanche, deux cas a priori mauvais se cumulent : ...
+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
@@ -251,3 +265,4 @@ Nos algorithmes aÌ voisins donnent de meilleurs résultats que les approches na
élevées, notamment en terme de MAPE. Une possible poste d'amélioration consisterait Ã
aggreÌger les courbes spatialement (sur plusieurs stations situeÌes dans la meÌme
agglomeÌration ou dans une meÌme zone).
+% endif