From: Benjamin Auder <benjamin.auder@somewhere> Date: Fri, 14 Apr 2017 20:22:50 +0000 (+0200) Subject: fix report.gj X-Git-Url: https://git.auder.net/variants/Chakart/pieces/img/doc/scripts/common.css?a=commitdiff_plain;h=8eafefbc8a886e60405128118908341333219507;p=talweg.git fix report.gj --- diff --git a/reports/report.gj b/reports/report.gj index 3edebca..8c8d6dc 100644 --- a/reports/report.gj +++ b/reports/report.gj @@ -1,3 +1,4 @@ +----- # Package R "talweg" Le package $-$ Time-series sAmpLes forecasted With ExoGenous variables $-$ contient le @@ -39,7 +40,7 @@ err <- computeError(data, pred, horizon=6) # Puis voir ?plotError et les autres plot dans le paragraphe 'seealso' ----- -## getData() +${"##"} getData() Les arguments de cette fonction sont, dans l'ordre : @@ -61,7 +62,7 @@ valeurs de 8h à 7h pour le $3^{eme}$ bloc de 24h présent dans le jeu de donné print(data) #?Data ----- -## computeForecast() +${"##"} computeForecast() Les arguments de cette fonction sont, dans l'ordre : @@ -83,7 +84,7 @@ séquentielle) print(pred) #?computeForecast ----- -## computeError() +${"##"} computeError() Les arguments de cette fonction sont, dans l'ordre : @@ -97,7 +98,7 @@ summary(err) summary(err$abs) summary(err$MAPE) ----- -## Graphiques +${"##"} Graphiques Voir ?plotError : les autres fonctions graphiques sont dans la section 'seealso' : @@ -105,7 +106,7 @@ Voir ?plotError : les autres fonctions graphiques sont dans la section 'seealso' âcomputeFilamentsâ, âplotFilamentsBoxâ, âplotRelVarâ ?plotXXX, etc. -$\clearpage$ +## $\clearpage$ How to do that? ----- # Expérimentations @@ -159,11 +160,10 @@ data = getData(ts_data, exo_data, input_tz = "GMT", working_tz="GMT", indices_ch = seq(as.Date("2015-01-18"),as.Date("2015-01-24"),"days") indices_ep = seq(as.Date("2015-03-15"),as.Date("2015-03-21"),"days") indices_np = seq(as.Date("2015-04-26"),as.Date("2015-05-02"),"days") - % for i in range(3): ----- -% #<h2 style="color:blue;font-size:2em">${list_titles[i]}</h2> -## ${list_titles[i]} +##<h2 style="color:blue;font-size:2em">${list_titles[i]}</h2> +${"##"} ${list_titles[i]} -----r p1 = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", horizon=H, simtype="mix", local=FALSE) @@ -191,18 +191,18 @@ sum_p123 = e1$abs$indices + e2$abs$indices + e3$abs$indices i_np = which.min(sum_p123) #indice de (veille de) jour "facile" i_p = which.max(sum_p123) #indice de (veille de) jour "difficile" ----- -% if i == 1 +% if i == 1: L'erreur absolue deÌpasse 20 sur 1 aÌ 2 jours suivant les modeÌles (graphe en haut aÌ droite). C'est au-delaÌ de ce que l'on aimerait voir (disons +/- 5 environ). Sur cet exemple le modeÌle aÌ voisins "contraint" (local=TRUE) utilisant des pondeÌrations baseÌes sur les similariteÌs de forme (simtype="endo") obtient en moyenne les meilleurs reÌsultats, avec un MAPE restant en geÌneÌral infeÌrieur aÌ 30% de 8h aÌ 19h (7+1 aÌ 7+12 : graphe en bas aÌ gauche). -% else if i == 2 +% elif i == 2: Il est difficile dans ce cas de deÌterminer une meÌthode meilleure que les autres : elles donnent toutes de plutoÌt mauvais reÌsultats, avec une erreur absolue moyenneÌe sur la journeÌe deÌpassant presque toujours 15 (graphe en haut aÌ droite). -% else +% else: Dans ce cas plus favorable les intensiteÌ des erreurs absolues ont clairement diminueÌ : elles restent souvent en dessous de 5. En revanche le MAPE moyen reste au-delaÌ de 20%, et meÌme souvent plus de 30%. Comme dans le cas de l'eÌpandage on constate une croissance @@ -225,20 +225,20 @@ plotPredReal(data, p3, i_p); title(paste("PredReal p3 day",i_p)) # Bleu : prévue ; noir : réalisée ----- -% if i == 1 +% if i == 1: Le jour "facile aÌ preÌvoir", aÌ gauche, se deÌcompose en deux modes : un leÌger vers 10h (7+3), puis un beaucoup plus marqueÌ vers 19h (7+12). Ces deux modes sont retrouveÌs par les trois variantes de l'algorithme aÌ voisins, bien que l'amplitude soit mal preÌdite. Concernant le jour "difficile aÌ preÌvoir" il y a deux pics en tout deÌbut et toute fin de journeÌe (aÌ 9h et 23h), qui ne sont pas du tout anticipeÌs par le programme ; la grande amplitude de ces pics explique alors l'intensiteÌ de l'erreur observeÌe. -% else if i == 2 +% elif i == 2: Dans le cas d'un jour "facile" aÌ preÌdire $-$ aÌ gauche $-$ la forme est plus ou moins retrouveÌe, mais le niveau moyen est trop bas (courbe en bleu). Concernant le jour "difficile" aÌ droite, non seulement la forme n'est pas anticipeÌe mais surtout le niveau preÌdit est treÌs infeÌrieur au niveau de pollution observeÌ. Comme on le voit ci-dessous cela deÌcoule d'un manque de voisins au comportement similaire. -% else +% else: La forme est raisonnablement retrouveÌe pour les meÌthodes "locales", l'autre version lissant trop les preÌdictions. Le biais reste cependant important, surtout en fin de journeÌe sur le jour "difficile". @@ -255,17 +255,17 @@ f_np2 = computeFilaments(data, p2, i_np, plot=TRUE) f_p2 = computeFilaments(data, p2, i_p, plot=TRUE) title(paste("Filaments p2 day",i_p)) ----- -% if i == 1 +% if i == 1: Les voisins du jour courant (peÌriode de 24h allant de 8h aÌ 7h le lendemain) sont afficheÌs avec un trait d'autant plus sombre qu'ils sont proches. On constate dans le cas non contraint (en haut) une grande variabiliteÌ des lendemains, treÌs nette sur le graphe en haut aÌ droite. Ceci indique une faible correÌlation entre la forme d'une courbe sur une peÌriode de 24h et la forme sur les 24h suivantes ; **cette observation est la source des difficulteÌs rencontreÌes par l'algorithme sur ce jeu de donneÌes.** -% else if i == 2 +% elif i == 2: Les observations sont les meÌmes qu'au paragraphe preÌceÌdent : trop de variabiliteÌ des lendemains (et meÌme des voisins du jour courant). -% else +% else: Les graphes de filaments ont encore la meÌme allure, avec une assez grande variabiliteÌ observeÌe. Cette observation est cependant trompeuse, comme l'indique plus bas le graphe de variabiliteÌ relative. @@ -277,20 +277,20 @@ plotFilamentsBox(data, f_p1); title(paste("FilBox p1 day",i_p)) # En pointilleÌs la courbe du jour courant + lendemain (aÌ preÌdire) ----- -% if i == 1 +% if i == 1: Sur cette boxplot fonctionnelle (voir la fonction fboxplot() du package R "rainbow") l'on constate essentiellement deux choses : le lendemain d'un voisin "normal" peut se reÌveÌler eÌtre une courbe atypique, fort eÌloigneÌe de ce que l'on souhaite preÌdire (courbes bleue et rouge aÌ gauche) ; et, dans le cas d'une courbe aÌ preÌdire atypique (aÌ droite) la plupart des voisins sont trop eÌloigneÌs de la forme aÌ preÌdire et forcent ainsi un aplatissement de la preÌdiction. -% else if i == 2 +% elif i == 2: On constate la preÌsence d'un voisin au lendemain compleÌtement atypique avec un pic en deÌbut de journeÌe (courbe en vert aÌ gauche), et d'un autre pheÌnomeÌne semblable avec la courbe rouge sur le graphe de droite. AjouteÌ au fait que le lendemain aÌ preÌvoir est lui-meÌme un jour "hors norme", cela montre l'impossibiliteÌ de bien preÌvoir une courbe en utilisant l'algorithme aÌ voisins. -% else +% else: On peut reÌappliquer les meÌmes remarques qu'auparavant sur les boxplots fonctionnels : lendemains de voisins atypiques, courbe aÌ preÌvoir elle-meÌme leÌgeÌrement "hors norme". % endif @@ -304,7 +304,7 @@ plotRelVar(data, f_p2); title(paste("StdDev p2 day",i_p)) # Variabilité globale en rouge ; sur les voisins (+ lendemains) en noir ----- -% if i == 1 +% if i == 1: Ces graphes viennent confirmer l'impression visuelle apreÌs observation des filaments. En effet, la variabiliteÌ globale en rouge (eÌcart-type heure par heure sur l'ensemble des couples "aujourd'hui/lendemain"du passeÌ) devrait rester nettement au-dessus de la @@ -312,11 +312,11 @@ variabiliteÌ locale, calculeÌe respectivement sur un voisinage d'une soixantai (pour p1) et d'une dizaine de jours (pour p2). Or on constate que ce n'est pas du tout le cas sur la peÌriode "lendemain", sauf en partie pour p2 le jour 4 $-$ mais ce n'est pas suffisant. -% else if i == 2 +% elif i == 2: Comme preÌceÌdemment les variabiliteÌs locales et globales sont confondues dans les parties droites des graphes $-$ sauf pour la version "locale" sur le jour "facile"; mais cette bonne proprieÌteÌ n'est pas suffisante si l'on ne trouve pas les bons poids aÌ appliquer. -% else +% else: Cette fois la situation ideÌale est observeÌe : la variabiliteÌ globale est nettement 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. @@ -329,17 +329,17 @@ plotSimils(p1, i_p); title(paste("Weights p1 day",i_p)) plotSimils(p2, i_np); title(paste("Weights p2 day",i_np)) plotSimils(p2, i_p); title(paste("Weights p2 day",i_p)) ----- -% if i == 1 +% if i == 1: Les poids se concentrent preÌs de 0 dans le cas "non local" (p1), et se reÌpartissent assez uniformeÌment dans [ 0, 0.2 ] dans le cas "local" (p2). C'est ce que l'on souhaite observer pour eÌviter d'effectuer une simple moyenne. -% else if i == 2 +% elif i == 2: En comparaison avec le pragraphe preÌceÌdent on retrouve le meÌme (bon) comportement des poids pour la version "non locale". En revanche la feneÌtre optimiseÌe est trop grande sur le jour "facile" pour la meÌthode "locale" (voir affichage ci-dessous) : il en reÌsulte des poids tous semblables autour de 0.084, l'algorithme effectue donc une moyenne simple $-$ expliquant pourquoi les courbes mauve et bleue sont treÌs proches sur le graphe d'erreurs. -% else +% else: Concernant les poids en revanche, deux cas a priori mauvais se cumulent : * les poids dans le cas "non local" ne sont pas assez concentreÌs autour de 0, menant aÌ @@ -358,7 +358,7 @@ p2$getParams(i_np)$window p2$getParams(i_p)$window % endfor ----- -## Bilan +${"##"} Bilan Nos algorithmes aÌ voisins ne sont pas adapteÌs aÌ ce jeu de donneÌes ouÌ la forme varie consideÌrablement d'un jour aÌ l'autre. Plus geÌneÌralement cette deÌcorreÌlation de forme rend