From: Benjamin Auder Date: Thu, 4 May 2017 23:30:00 +0000 (+0200) Subject: 'update' X-Git-Url: https://git.auder.net/doc/current/%7B%7B%20asset%28%27mixstore/css/user/DESCRIPTION?a=commitdiff_plain;h=49f27c5f9105df5e69efd6ecc657675a53ffffee;p=talweg.git 'update' --- diff --git a/reports/Experiments.gj b/reports/Experiments.gj index aef72e6..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_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) @@ -76,6 +76,7 @@ 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 à droite $-$ reste modérée pour les meilleurs modèles @@ -96,6 +97,7 @@ journalière d'erreur absolue moyenne (en haut à gauche) $-$ sauf pour la mé 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)) @@ -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 à prévoir", à gauche, se décompose en deux modes : un léger vers 10h @@ -127,6 +130,7 @@ L'impression visuelle est plutôt mauvaise dans ce cas, mais les écart étant m 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 (période de 24h allant de 8h à 7h le lendemain) sont affichés @@ -157,6 +162,7 @@ Les graphes de filaments ont encore la même allure, avec une assez grande vari 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)) @@ -167,6 +173,7 @@ plotFilamentsBox(data, f_p1, predict_from=P) 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 @@ -184,6 +191,7 @@ l'impossibilité de bien prévoir une courbe en utilisant l'algorithme à voi 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)) @@ -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 après observation des filaments. En @@ -217,6 +226,7 @@ Cette fois la situation idéale est observée : la variabilité globale est n 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)) @@ -225,6 +235,7 @@ 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 près de 0 : c'est ce que l'on souhaite observer pour éviter @@ -236,14 +247,16 @@ non négligeables (presque trop peu pour le jour "difficile"). 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 @@ -252,3 +265,4 @@ Nos algorithmes à voisins donnent de meilleurs résultats que les approches na é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