a9f10d0e4d54630df60cad52e5e026ddb257e2bd
[talweg.git] / reports / report.gj
1 -----
2
3 ## Introduction
4
5 J'ai fait quelques essais dans différentes configurations pour la méthode "Neighbors"
6 (la seule dont on a parlé).<br>Il semble que le mieux soit
7
8 * simtype="exo" ou "mix" : similarités exogènes avec/sans endogènes (fenêtre optimisée par VC)
9 * same_season=FALSE : les indices pour la validation croisée ne tiennent pas compte des saisons
10 * mix_strategy="mult" : on multiplie les poids (au lieu d'en éteindre)
11
12 J'ai systématiquement comparé à une approche naïve : la moyennes des lendemains des jours
13 "similaires" dans tout le passé ; à chaque fois sans prédiction du saut (sauf pour Neighbors :
14 prédiction basée sur les poids calculés).
15
16 Ensuite j'affiche les erreurs, quelques courbes prévues/mesurées, quelques filaments puis les
17 histogrammes de quelques poids. Concernant les graphes de filaments, la moitié gauche du graphe
18 correspond aux jours similaires au jour courant, tandis que la moitié droite affiche les
19 lendemains : ce sont donc les voisinages tels qu'utilisés dans l'algorithme.
20
21 <%
22 list_titles = ['Pollution par chauffage', 'Pollution par épandage', 'Semaine non polluée']
23 list_indices = ['indices_ch', 'indices_ep', 'indices_np']
24 %>
25
26 -----r
27
28 library(talweg)
29
30 ts_data = read.csv(system.file("extdata","pm10_mesures_H_loc_report.csv",package="talweg"))
31 exo_data = read.csv(system.file("extdata","meteo_extra_noNAs.csv",package="talweg"))
32 data = getData(ts_data, exo_data, input_tz = "Europe/Paris", working_tz="Europe/Paris", predict_at=13)
33
34 indices_ch = seq(as.Date("2015-01-18"),as.Date("2015-01-24"),"days")
35 indices_ep = seq(as.Date("2015-03-15"),as.Date("2015-03-21"),"days")
36 indices_np = seq(as.Date("2015-04-26"),as.Date("2015-05-02"),"days")
37
38 % for loop in range(3):
39
40 -----
41
42 <h2 style="color:blue;font-size:2em">${list_titles[loop]}</h2>
43
44 -----r
45 p_nn_exo = computeForecast(data, ${list_indices[loop]}, "Neighbors", "Neighbors", simtype="exo", horizon=H)
46 p_nn_mix = computeForecast(data, ${list_indices[loop]}, "Neighbors", "Neighbors", simtype="mix", horizon=H)
47 p_az = computeForecast(data, ${list_indices[loop]}, "Average", "Zero", horizon=H) #, memory=183)
48 p_pz = computeForecast(data, ${list_indices[loop]}, "Persistence", "Zero", horizon=H, same_day=TRUE)
49
50 -----r
51 e_nn_exo = computeError(data, p_nn_exo)
52 e_nn_mix = computeError(data, p_nn_mix)
53 e_az = computeError(data, p_az)
54 e_pz = computeError(data, p_pz)
55 options(repr.plot.width=9, repr.plot.height=7)
56 plotError(list(e_nn_mix, e_pz, e_az, e_nn_exo), cols=c(1,2,colors()[258], 4))
57
58 #Noir: neighbors_mix, bleu: neighbors_exo, vert: moyenne, rouge: persistence
59
60 i_np = which.min(e_nn_exo$abs$indices)
61 i_p = which.max(e_nn_exo$abs$indices)
62
63 -----r
64 options(repr.plot.width=9, repr.plot.height=4)
65 par(mfrow=c(1,2))
66
67 plotPredReal(data, p_nn_exo, i_np); title(paste("PredReal nn exo day",i_np))
68 plotPredReal(data, p_nn_exo, i_p); title(paste("PredReal nn exo day",i_p))
69
70 plotPredReal(data, p_nn_mix, i_np); title(paste("PredReal nn mix day",i_np))
71 plotPredReal(data, p_nn_mix, i_p); title(paste("PredReal nn mix day",i_p))
72
73 plotPredReal(data, p_az, i_np); title(paste("PredReal az day",i_np))
74 plotPredReal(data, p_az, i_p); title(paste("PredReal az day",i_p))
75
76 #Bleu: prévue, noir: réalisée
77
78 -----r
79 par(mfrow=c(1,2))
80 f_np_exo = computeFilaments(data, p_nn_exo, i_np, plot=TRUE); title(paste("Filaments nn exo day",i_np))
81 f_p_exo = computeFilaments(data, p_nn_exo, i_p, plot=TRUE); title(paste("Filaments nn exo day",i_p))
82
83 f_np_mix = computeFilaments(data, p_nn_mix, i_np, plot=TRUE); title(paste("Filaments nn mix day",i_np))
84 f_p_mix = computeFilaments(data, p_nn_mix, i_p, plot=TRUE); title(paste("Filaments nn mix day",i_p))
85
86 -----r
87 par(mfrow=c(1,2))
88 plotFilamentsBox(data, f_np_exo); title(paste("FilBox nn exo day",i_np))
89 plotFilamentsBox(data, f_p_exo); title(paste("FilBox nn exo day",i_p))
90
91 plotFilamentsBox(data, f_np_mix); title(paste("FilBox nn mix day",i_np))
92 plotFilamentsBox(data, f_p_mix); title(paste("FilBox nn mix day",i_p))
93
94 -----r
95 par(mfrow=c(1,2))
96 plotRelVar(data, f_np_exo); title(paste("StdDev nn exo day",i_np))
97 plotRelVar(data, f_p_exo); title(paste("StdDev nn exo day",i_p))
98
99 plotRelVar(data, f_np_mix); title(paste("StdDev nn mix day",i_np))
100 plotRelVar(data, f_p_mix); title(paste("StdDev nn mix day",i_p))
101
102 #Variabilité globale en rouge ; sur les 60 voisins (+ lendemains) en noir
103
104 -----r
105 par(mfrow=c(1,2))
106 plotSimils(p_nn_exo, i_np); title(paste("Weights nn exo day",i_np))
107 plotSimils(p_nn_exo, i_p); title(paste("Weights nn exo day",i_p))
108
109 plotSimils(p_nn_mix, i_np); title(paste("Weights nn mix day",i_np))
110 plotSimils(p_nn_mix, i_p); title(paste("Weights nn mix day",i_p)
111
112 #- pollué à gauche, + pollué à droite
113
114 -----r
115 #Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite
116 p_nn_exo$getParams(i_np)$window
117 p_nn_exo$getParams(i_p)$window
118
119 p_nn_mix$getParams(i_np)$window
120 p_nn_mix$getParams(i_p)$window
121
122 % endfor
123
124 -----
125 ## Bilan
126
127 Problème difficile : on ne fait guère mieux qu'une naïve moyenne des lendemains des jours
128 similaires dans le passé, ce qui n'est pas loin de prédire une série constante égale à la
129 dernière valeur observée (méthode "zéro"). La persistence donne parfois de bons résultats
130 mais est trop instable (sensibilité à l'argument <code>same_day</code>).
131
132 Comment améliorer la méthode ?