Commit | Line | Data |
---|---|---|
ff5df8e3 BA |
1 | ******* text after include: |
2 | ----- | |
3 | <h2>Introduction</h2> | |
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 | -----r | |
26 | library(talweg) | |
27 | ||
28 | ts_data = read.csv(system.file("extdata","pm10_mesures_H_loc_report.csv",package="talweg")) | |
29 | exo_data = read.csv(system.file("extdata","meteo_extra_noNAs.csv",package="talweg")) | |
30 | data = getData(ts_data, exo_data, input_tz = "Europe/Paris", working_tz="Europe/Paris", predict_at=13) | |
31 | ||
32 | indices_ch = seq(as.Date("2015-01-18"),as.Date("2015-01-24"),"days") | |
33 | indices_ep = seq(as.Date("2015-03-15"),as.Date("2015-03-21"),"days") | |
34 | indices_np = seq(as.Date("2015-04-26"),as.Date("2015-05-02"),"days") | |
35 | % for i in range(3): | |
36 | ----- | |
37 | <h2 style="color:blue;font-size:2em">${list_titles[i]}</h2> | |
38 | -----r | |
39 | p_nn_exo = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", simtype="exo", horizon=H) | |
40 | p_nn_mix = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", simtype="mix", horizon=H) | |
41 | p_az = computeForecast(data, ${list_indices[i]}, "Average", "Zero", horizon=H) #, memory=183) | |
42 | p_pz = computeForecast(data, ${list_indices[i]}, "Persistence", "Zero", horizon=H, same_day=TRUE) | |
43 | -----r | |
44 | e_nn_exo = computeError(data, p_nn_exo) | |
45 | e_nn_mix = computeError(data, p_nn_mix) | |
46 | e_az = computeError(data, p_az) | |
47 | e_pz = computeError(data, p_pz) | |
48 | options(repr.plot.width=9, repr.plot.height=7) | |
49 | plotError(list(e_nn_mix, e_pz, e_az, e_nn_exo), cols=c(1,2,colors()[258], 4)) | |
50 | ||
51 | # Noir: neighbors_mix, bleu: neighbors_exo, vert: moyenne, rouge: persistence | |
52 | ||
53 | i_np = which.min(e_nn_exo$abs$indices) | |
54 | i_p = which.max(e_nn_exo$abs$indices) | |
55 | -----r | |
56 | options(repr.plot.width=9, repr.plot.height=4) | |
57 | par(mfrow=c(1,2)) | |
58 | ||
59 | plotPredReal(data, p_nn_exo, i_np); title(paste("PredReal nn exo day",i_np)) | |
60 | plotPredReal(data, p_nn_exo, i_p); title(paste("PredReal nn exo day",i_p)) | |
61 | ||
62 | plotPredReal(data, p_nn_mix, i_np); title(paste("PredReal nn mix day",i_np)) | |
63 | plotPredReal(data, p_nn_mix, i_p); title(paste("PredReal nn mix day",i_p)) | |
64 | ||
65 | plotPredReal(data, p_az, i_np); title(paste("PredReal az day",i_np)) | |
66 | plotPredReal(data, p_az, i_p); title(paste("PredReal az day",i_p)) | |
67 | ||
68 | # Bleu: prévue, noir: réalisée | |
69 | -----r | |
70 | par(mfrow=c(1,2)) | |
71 | f_np_exo = computeFilaments(data, p_nn_exo, i_np, plot=TRUE); title(paste("Filaments nn exo day",i_np)) | |
72 | f_p_exo = computeFilaments(data, p_nn_exo, i_p, plot=TRUE); title(paste("Filaments nn exo day",i_p)) | |
73 | ||
74 | f_np_mix = computeFilaments(data, p_nn_mix, i_np, plot=TRUE); title(paste("Filaments nn mix day",i_np)) | |
75 | f_p_mix = computeFilaments(data, p_nn_mix, i_p, plot=TRUE); title(paste("Filaments nn mix day",i_p)) | |
76 | -----r | |
77 | par(mfrow=c(1,2)) | |
78 | plotFilamentsBox(data, f_np_exo); title(paste("FilBox nn exo day",i_np)) | |
79 | plotFilamentsBox(data, f_p_exo); title(paste("FilBox nn exo day",i_p)) | |
80 | ||
81 | plotFilamentsBox(data, f_np_mix); title(paste("FilBox nn mix day",i_np)) | |
82 | plotFilamentsBox(data, f_p_mix); title(paste("FilBox nn mix day",i_p)) | |
83 | -----r | |
84 | par(mfrow=c(1,2)) | |
85 | plotRelVar(data, f_np_exo); title(paste("StdDev nn exo day",i_np)) | |
86 | plotRelVar(data, f_p_exo); title(paste("StdDev nn exo day",i_p)) | |
87 | ||
88 | plotRelVar(data, f_np_mix); title(paste("StdDev nn mix day",i_np)) | |
89 | plotRelVar(data, f_p_mix); title(paste("StdDev nn mix day",i_p)) | |
90 | ||
91 | # Variabilité globale en rouge ; sur les 60 voisins (+ lendemains) en noir | |
92 | -----r | |
93 | par(mfrow=c(1,2)) | |
94 | plotSimils(p_nn_exo, i_np); title(paste("Weights nn exo day",i_np)) | |
95 | plotSimils(p_nn_exo, i_p); title(paste("Weights nn exo day",i_p)) | |
96 | ||
97 | plotSimils(p_nn_mix, i_np); title(paste("Weights nn mix day",i_np)) | |
98 | plotSimils(p_nn_mix, i_p); title(paste("Weights nn mix day",i_p) | |
99 | ||
100 | # - pollué à gauche, + pollué à droite | |
101 | -----r | |
102 | # Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite | |
103 | p_nn_exo$getParams(i_np)$window | |
104 | p_nn_exo$getParams(i_p)$window | |
105 | ||
106 | p_nn_mix$getParams(i_np)$window | |
107 | p_nn_mix$getParams(i_p)$window | |
108 | % endfor | |
109 | ----- | |
110 | <h2>Bilan</h2> | |
111 | ||
112 | Problème difficile : on ne fait guère mieux qu'une naïve moyenne des lendemains des jours | |
113 | similaires dans le passé, ce qui n'est pas loin de prédire une série constante égale à la | |
114 | dernière valeur observée (méthode "zéro"). La persistence donne parfois de bons résultats | |
115 | mais est trop instable (sensibilité à l'argument <code>same_day</code>). | |
116 | ||
117 | Comment améliorer la méthode ? | |
118 | ******* mako_kwargs: {} | |
119 | ******* text after mako: | |
120 | ----- | |
121 | <h2>Introduction</h2> | |
122 | ||
123 | J'ai fait quelques essais dans différentes configurations pour la méthode "Neighbors" | |
124 | (la seule dont on a parlé).<br>Il semble que le mieux soit | |
125 | ||
126 | * simtype="exo" ou "mix" : similarités exogènes avec/sans endogènes (fenêtre optimisée par VC) | |
127 | * same_season=FALSE : les indices pour la validation croisée ne tiennent pas compte des saisons | |
128 | * mix_strategy="mult" : on multiplie les poids (au lieu d'en éteindre) | |
129 | ||
130 | J'ai systématiquement comparé à une approche naïve : la moyennes des lendemains des jours | |
131 | "similaires" dans tout le passé ; à chaque fois sans prédiction du saut (sauf pour Neighbors : | |
132 | prédiction basée sur les poids calculés). | |
133 | ||
134 | Ensuite j'affiche les erreurs, quelques courbes prévues/mesurées, quelques filaments puis les | |
135 | histogrammes de quelques poids. Concernant les graphes de filaments, la moitié gauche du graphe | |
136 | correspond aux jours similaires au jour courant, tandis que la moitié droite affiche les | |
137 | lendemains : ce sont donc les voisinages tels qu'utilisés dans l'algorithme. | |
138 | ||
139 | ||
140 | -----r | |
141 | library(talweg) | |
142 | ||
143 | ts_data = read.csv(system.file("extdata","pm10_mesures_H_loc_report.csv",package="talweg")) | |
144 | exo_data = read.csv(system.file("extdata","meteo_extra_noNAs.csv",package="talweg")) | |
145 | data = getData(ts_data, exo_data, input_tz = "Europe/Paris", working_tz="Europe/Paris", predict_at=13) | |
146 | ||
147 | indices_ch = seq(as.Date("2015-01-18"),as.Date("2015-01-24"),"days") | |
148 | indices_ep = seq(as.Date("2015-03-15"),as.Date("2015-03-21"),"days") | |
149 | indices_np = seq(as.Date("2015-04-26"),as.Date("2015-05-02"),"days") | |
150 | ----- | |
151 | <h2 style="color:blue;font-size:2em">Pollution par chauffage</h2> | |
152 | -----r | |
153 | p_nn_exo = computeForecast(data, indices_ch, "Neighbors", "Neighbors", simtype="exo", horizon=H) | |
154 | p_nn_mix = computeForecast(data, indices_ch, "Neighbors", "Neighbors", simtype="mix", horizon=H) | |
155 | p_az = computeForecast(data, indices_ch, "Average", "Zero", horizon=H) #, memory=183) | |
156 | p_pz = computeForecast(data, indices_ch, "Persistence", "Zero", horizon=H, same_day=TRUE) | |
157 | -----r | |
158 | e_nn_exo = computeError(data, p_nn_exo) | |
159 | e_nn_mix = computeError(data, p_nn_mix) | |
160 | e_az = computeError(data, p_az) | |
161 | e_pz = computeError(data, p_pz) | |
162 | options(repr.plot.width=9, repr.plot.height=7) | |
163 | plotError(list(e_nn_mix, e_pz, e_az, e_nn_exo), cols=c(1,2,colors()[258], 4)) | |
164 | ||
165 | # Noir: neighbors_mix, bleu: neighbors_exo, vert: moyenne, rouge: persistence | |
166 | ||
167 | i_np = which.min(e_nn_exo$abs$indices) | |
168 | i_p = which.max(e_nn_exo$abs$indices) | |
169 | -----r | |
170 | options(repr.plot.width=9, repr.plot.height=4) | |
171 | par(mfrow=c(1,2)) | |
172 | ||
173 | plotPredReal(data, p_nn_exo, i_np); title(paste("PredReal nn exo day",i_np)) | |
174 | plotPredReal(data, p_nn_exo, i_p); title(paste("PredReal nn exo day",i_p)) | |
175 | ||
176 | plotPredReal(data, p_nn_mix, i_np); title(paste("PredReal nn mix day",i_np)) | |
177 | plotPredReal(data, p_nn_mix, i_p); title(paste("PredReal nn mix day",i_p)) | |
178 | ||
179 | plotPredReal(data, p_az, i_np); title(paste("PredReal az day",i_np)) | |
180 | plotPredReal(data, p_az, i_p); title(paste("PredReal az day",i_p)) | |
181 | ||
182 | # Bleu: prévue, noir: réalisée | |
183 | -----r | |
184 | par(mfrow=c(1,2)) | |
185 | f_np_exo = computeFilaments(data, p_nn_exo, i_np, plot=TRUE); title(paste("Filaments nn exo day",i_np)) | |
186 | f_p_exo = computeFilaments(data, p_nn_exo, i_p, plot=TRUE); title(paste("Filaments nn exo day",i_p)) | |
187 | ||
188 | f_np_mix = computeFilaments(data, p_nn_mix, i_np, plot=TRUE); title(paste("Filaments nn mix day",i_np)) | |
189 | f_p_mix = computeFilaments(data, p_nn_mix, i_p, plot=TRUE); title(paste("Filaments nn mix day",i_p)) | |
190 | -----r | |
191 | par(mfrow=c(1,2)) | |
192 | plotFilamentsBox(data, f_np_exo); title(paste("FilBox nn exo day",i_np)) | |
193 | plotFilamentsBox(data, f_p_exo); title(paste("FilBox nn exo day",i_p)) | |
194 | ||
195 | plotFilamentsBox(data, f_np_mix); title(paste("FilBox nn mix day",i_np)) | |
196 | plotFilamentsBox(data, f_p_mix); title(paste("FilBox nn mix day",i_p)) | |
197 | -----r | |
198 | par(mfrow=c(1,2)) | |
199 | plotRelVar(data, f_np_exo); title(paste("StdDev nn exo day",i_np)) | |
200 | plotRelVar(data, f_p_exo); title(paste("StdDev nn exo day",i_p)) | |
201 | ||
202 | plotRelVar(data, f_np_mix); title(paste("StdDev nn mix day",i_np)) | |
203 | plotRelVar(data, f_p_mix); title(paste("StdDev nn mix day",i_p)) | |
204 | ||
205 | # Variabilité globale en rouge ; sur les 60 voisins (+ lendemains) en noir | |
206 | -----r | |
207 | par(mfrow=c(1,2)) | |
208 | plotSimils(p_nn_exo, i_np); title(paste("Weights nn exo day",i_np)) | |
209 | plotSimils(p_nn_exo, i_p); title(paste("Weights nn exo day",i_p)) | |
210 | ||
211 | plotSimils(p_nn_mix, i_np); title(paste("Weights nn mix day",i_np)) | |
212 | plotSimils(p_nn_mix, i_p); title(paste("Weights nn mix day",i_p) | |
213 | ||
214 | # - pollué à gauche, + pollué à droite | |
215 | -----r | |
216 | # Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite | |
217 | p_nn_exo$getParams(i_np)$window | |
218 | p_nn_exo$getParams(i_p)$window | |
219 | ||
220 | p_nn_mix$getParams(i_np)$window | |
221 | p_nn_mix$getParams(i_p)$window | |
222 | ----- | |
223 | <h2 style="color:blue;font-size:2em">Pollution par épandage</h2> | |
224 | -----r | |
225 | p_nn_exo = computeForecast(data, indices_ep, "Neighbors", "Neighbors", simtype="exo", horizon=H) | |
226 | p_nn_mix = computeForecast(data, indices_ep, "Neighbors", "Neighbors", simtype="mix", horizon=H) | |
227 | p_az = computeForecast(data, indices_ep, "Average", "Zero", horizon=H) #, memory=183) | |
228 | p_pz = computeForecast(data, indices_ep, "Persistence", "Zero", horizon=H, same_day=TRUE) | |
229 | -----r | |
230 | e_nn_exo = computeError(data, p_nn_exo) | |
231 | e_nn_mix = computeError(data, p_nn_mix) | |
232 | e_az = computeError(data, p_az) | |
233 | e_pz = computeError(data, p_pz) | |
234 | options(repr.plot.width=9, repr.plot.height=7) | |
235 | plotError(list(e_nn_mix, e_pz, e_az, e_nn_exo), cols=c(1,2,colors()[258], 4)) | |
236 | ||
237 | # Noir: neighbors_mix, bleu: neighbors_exo, vert: moyenne, rouge: persistence | |
238 | ||
239 | i_np = which.min(e_nn_exo$abs$indices) | |
240 | i_p = which.max(e_nn_exo$abs$indices) | |
241 | -----r | |
242 | options(repr.plot.width=9, repr.plot.height=4) | |
243 | par(mfrow=c(1,2)) | |
244 | ||
245 | plotPredReal(data, p_nn_exo, i_np); title(paste("PredReal nn exo day",i_np)) | |
246 | plotPredReal(data, p_nn_exo, i_p); title(paste("PredReal nn exo day",i_p)) | |
247 | ||
248 | plotPredReal(data, p_nn_mix, i_np); title(paste("PredReal nn mix day",i_np)) | |
249 | plotPredReal(data, p_nn_mix, i_p); title(paste("PredReal nn mix day",i_p)) | |
250 | ||
251 | plotPredReal(data, p_az, i_np); title(paste("PredReal az day",i_np)) | |
252 | plotPredReal(data, p_az, i_p); title(paste("PredReal az day",i_p)) | |
253 | ||
254 | # Bleu: prévue, noir: réalisée | |
255 | -----r | |
256 | par(mfrow=c(1,2)) | |
257 | f_np_exo = computeFilaments(data, p_nn_exo, i_np, plot=TRUE); title(paste("Filaments nn exo day",i_np)) | |
258 | f_p_exo = computeFilaments(data, p_nn_exo, i_p, plot=TRUE); title(paste("Filaments nn exo day",i_p)) | |
259 | ||
260 | f_np_mix = computeFilaments(data, p_nn_mix, i_np, plot=TRUE); title(paste("Filaments nn mix day",i_np)) | |
261 | f_p_mix = computeFilaments(data, p_nn_mix, i_p, plot=TRUE); title(paste("Filaments nn mix day",i_p)) | |
262 | -----r | |
263 | par(mfrow=c(1,2)) | |
264 | plotFilamentsBox(data, f_np_exo); title(paste("FilBox nn exo day",i_np)) | |
265 | plotFilamentsBox(data, f_p_exo); title(paste("FilBox nn exo day",i_p)) | |
266 | ||
267 | plotFilamentsBox(data, f_np_mix); title(paste("FilBox nn mix day",i_np)) | |
268 | plotFilamentsBox(data, f_p_mix); title(paste("FilBox nn mix day",i_p)) | |
269 | -----r | |
270 | par(mfrow=c(1,2)) | |
271 | plotRelVar(data, f_np_exo); title(paste("StdDev nn exo day",i_np)) | |
272 | plotRelVar(data, f_p_exo); title(paste("StdDev nn exo day",i_p)) | |
273 | ||
274 | plotRelVar(data, f_np_mix); title(paste("StdDev nn mix day",i_np)) | |
275 | plotRelVar(data, f_p_mix); title(paste("StdDev nn mix day",i_p)) | |
276 | ||
277 | # Variabilité globale en rouge ; sur les 60 voisins (+ lendemains) en noir | |
278 | -----r | |
279 | par(mfrow=c(1,2)) | |
280 | plotSimils(p_nn_exo, i_np); title(paste("Weights nn exo day",i_np)) | |
281 | plotSimils(p_nn_exo, i_p); title(paste("Weights nn exo day",i_p)) | |
282 | ||
283 | plotSimils(p_nn_mix, i_np); title(paste("Weights nn mix day",i_np)) | |
284 | plotSimils(p_nn_mix, i_p); title(paste("Weights nn mix day",i_p) | |
285 | ||
286 | # - pollué à gauche, + pollué à droite | |
287 | -----r | |
288 | # Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite | |
289 | p_nn_exo$getParams(i_np)$window | |
290 | p_nn_exo$getParams(i_p)$window | |
291 | ||
292 | p_nn_mix$getParams(i_np)$window | |
293 | p_nn_mix$getParams(i_p)$window | |
294 | ----- | |
295 | <h2 style="color:blue;font-size:2em">Semaine non polluée</h2> | |
296 | -----r | |
297 | p_nn_exo = computeForecast(data, indices_np, "Neighbors", "Neighbors", simtype="exo", horizon=H) | |
298 | p_nn_mix = computeForecast(data, indices_np, "Neighbors", "Neighbors", simtype="mix", horizon=H) | |
299 | p_az = computeForecast(data, indices_np, "Average", "Zero", horizon=H) #, memory=183) | |
300 | p_pz = computeForecast(data, indices_np, "Persistence", "Zero", horizon=H, same_day=TRUE) | |
301 | -----r | |
302 | e_nn_exo = computeError(data, p_nn_exo) | |
303 | e_nn_mix = computeError(data, p_nn_mix) | |
304 | e_az = computeError(data, p_az) | |
305 | e_pz = computeError(data, p_pz) | |
306 | options(repr.plot.width=9, repr.plot.height=7) | |
307 | plotError(list(e_nn_mix, e_pz, e_az, e_nn_exo), cols=c(1,2,colors()[258], 4)) | |
308 | ||
309 | # Noir: neighbors_mix, bleu: neighbors_exo, vert: moyenne, rouge: persistence | |
310 | ||
311 | i_np = which.min(e_nn_exo$abs$indices) | |
312 | i_p = which.max(e_nn_exo$abs$indices) | |
313 | -----r | |
314 | options(repr.plot.width=9, repr.plot.height=4) | |
315 | par(mfrow=c(1,2)) | |
316 | ||
317 | plotPredReal(data, p_nn_exo, i_np); title(paste("PredReal nn exo day",i_np)) | |
318 | plotPredReal(data, p_nn_exo, i_p); title(paste("PredReal nn exo day",i_p)) | |
319 | ||
320 | plotPredReal(data, p_nn_mix, i_np); title(paste("PredReal nn mix day",i_np)) | |
321 | plotPredReal(data, p_nn_mix, i_p); title(paste("PredReal nn mix day",i_p)) | |
322 | ||
323 | plotPredReal(data, p_az, i_np); title(paste("PredReal az day",i_np)) | |
324 | plotPredReal(data, p_az, i_p); title(paste("PredReal az day",i_p)) | |
325 | ||
326 | # Bleu: prévue, noir: réalisée | |
327 | -----r | |
328 | par(mfrow=c(1,2)) | |
329 | f_np_exo = computeFilaments(data, p_nn_exo, i_np, plot=TRUE); title(paste("Filaments nn exo day",i_np)) | |
330 | f_p_exo = computeFilaments(data, p_nn_exo, i_p, plot=TRUE); title(paste("Filaments nn exo day",i_p)) | |
331 | ||
332 | f_np_mix = computeFilaments(data, p_nn_mix, i_np, plot=TRUE); title(paste("Filaments nn mix day",i_np)) | |
333 | f_p_mix = computeFilaments(data, p_nn_mix, i_p, plot=TRUE); title(paste("Filaments nn mix day",i_p)) | |
334 | -----r | |
335 | par(mfrow=c(1,2)) | |
336 | plotFilamentsBox(data, f_np_exo); title(paste("FilBox nn exo day",i_np)) | |
337 | plotFilamentsBox(data, f_p_exo); title(paste("FilBox nn exo day",i_p)) | |
338 | ||
339 | plotFilamentsBox(data, f_np_mix); title(paste("FilBox nn mix day",i_np)) | |
340 | plotFilamentsBox(data, f_p_mix); title(paste("FilBox nn mix day",i_p)) | |
341 | -----r | |
342 | par(mfrow=c(1,2)) | |
343 | plotRelVar(data, f_np_exo); title(paste("StdDev nn exo day",i_np)) | |
344 | plotRelVar(data, f_p_exo); title(paste("StdDev nn exo day",i_p)) | |
345 | ||
346 | plotRelVar(data, f_np_mix); title(paste("StdDev nn mix day",i_np)) | |
347 | plotRelVar(data, f_p_mix); title(paste("StdDev nn mix day",i_p)) | |
348 | ||
349 | # Variabilité globale en rouge ; sur les 60 voisins (+ lendemains) en noir | |
350 | -----r | |
351 | par(mfrow=c(1,2)) | |
352 | plotSimils(p_nn_exo, i_np); title(paste("Weights nn exo day",i_np)) | |
353 | plotSimils(p_nn_exo, i_p); title(paste("Weights nn exo day",i_p)) | |
354 | ||
355 | plotSimils(p_nn_mix, i_np); title(paste("Weights nn mix day",i_np)) | |
356 | plotSimils(p_nn_mix, i_p); title(paste("Weights nn mix day",i_p) | |
357 | ||
358 | # - pollué à gauche, + pollué à droite | |
359 | -----r | |
360 | # Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite | |
361 | p_nn_exo$getParams(i_np)$window | |
362 | p_nn_exo$getParams(i_p)$window | |
363 | ||
364 | p_nn_mix$getParams(i_np)$window | |
365 | p_nn_mix$getParams(i_p)$window | |
366 | ----- | |
367 | <h2>Bilan</h2> | |
368 | ||
369 | Problème difficile : on ne fait guère mieux qu'une naïve moyenne des lendemains des jours | |
370 | similaires dans le passé, ce qui n'est pas loin de prédire une série constante égale à la | |
371 | dernière valeur observée (méthode "zéro"). La persistence donne parfois de bons résultats | |
372 | mais est trop instable (sensibilité à l'argument <code>same_day</code>). | |
373 | ||
374 | Comment améliorer la méthode ? | |
375 | ******* cell: markdown | |
376 | ******* found shortname r | |
377 | ******* cell: astext=False shortname=r | |
378 | ******* cell: markdown | |
379 | ******* found shortname r | |
380 | ******* cell: astext=False shortname=r | |
381 | ******* found shortname r | |
382 | ******* cell: astext=False shortname=r | |
383 | ******* found shortname r | |
384 | ******* cell: astext=False shortname=r | |
385 | ******* found shortname r | |
386 | ******* cell: astext=False shortname=r | |
387 | ******* found shortname r | |
388 | ******* cell: astext=False shortname=r | |
389 | ******* found shortname r | |
390 | ******* cell: astext=False shortname=r | |
391 | ******* found shortname r | |
392 | ******* cell: astext=False shortname=r | |
393 | ******* found shortname r | |
394 | ******* cell: astext=False shortname=r | |
395 | ******* cell: markdown | |
396 | ******* found shortname r | |
397 | ******* cell: astext=False shortname=r | |
398 | ******* found shortname r | |
399 | ******* cell: astext=False shortname=r | |
400 | ******* found shortname r | |
401 | ******* cell: astext=False shortname=r | |
402 | ******* found shortname r | |
403 | ******* cell: astext=False shortname=r | |
404 | ******* found shortname r | |
405 | ******* cell: astext=False shortname=r | |
406 | ******* found shortname r | |
407 | ******* cell: astext=False shortname=r | |
408 | ******* found shortname r | |
409 | ******* cell: astext=False shortname=r | |
410 | ******* found shortname r | |
411 | ******* cell: astext=False shortname=r | |
412 | ******* cell: markdown | |
413 | ******* found shortname r | |
414 | ******* cell: astext=False shortname=r | |
415 | ******* found shortname r | |
416 | ******* cell: astext=False shortname=r | |
417 | ******* found shortname r | |
418 | ******* cell: astext=False shortname=r | |
419 | ******* found shortname r | |
420 | ******* cell: astext=False shortname=r | |
421 | ******* found shortname r | |
422 | ******* cell: astext=False shortname=r | |
423 | ******* found shortname r | |
424 | ******* cell: astext=False shortname=r | |
425 | ******* found shortname r | |
426 | ******* cell: astext=False shortname=r | |
427 | ******* found shortname r | |
428 | ******* cell: astext=False shortname=r | |
429 | ******* cell: markdown | |
430 | ******* cell data structure:\b[['markdown', | |
431 | 'text', | |
432 | '\n' | |
433 | '\n' | |
434 | '<h2>Introduction</h2>\n' | |
435 | '\n' | |
436 | "J'ai fait quelques essais dans différentes configurations pour la méthode " | |
437 | '"Neighbors"\n' | |
438 | '(la seule dont on a parlé).<br>Il semble que le mieux soit\n' | |
439 | '\n' | |
440 | ' * simtype="exo" ou "mix" : similarités exogènes avec/sans endogènes ' | |
441 | '(fenêtre optimisée par VC)\n' | |
442 | ' * same_season=FALSE : les indices pour la validation croisée ne tiennent ' | |
443 | 'pas compte des saisons\n' | |
444 | ' * mix_strategy="mult" : on multiplie les poids (au lieu d\'en éteindre)\n' | |
445 | '\n' | |
446 | "J'ai systématiquement comparé à une approche naïve : la moyennes des " | |
447 | 'lendemains des jours\n' | |
448 | '"similaires" dans tout le passé ; à chaque fois sans prédiction du saut ' | |
449 | '(sauf pour Neighbors :\n' | |
450 | 'prédiction basée sur les poids calculés).\n' | |
451 | '\n' | |
452 | "Ensuite j'affiche les erreurs, quelques courbes prévues/mesurées, quelques " | |
453 | 'filaments puis les\n' | |
454 | 'histogrammes de quelques poids. Concernant les graphes de filaments, la ' | |
455 | 'moitié gauche du graphe\n' | |
456 | 'correspond aux jours similaires au jour courant, tandis que la moitié ' | |
457 | 'droite affiche les\n' | |
458 | "lendemains : ce sont donc les voisinages tels qu'utilisés dans " | |
459 | "l'algorithme.\n" | |
460 | '\n'], | |
461 | ['codecell', | |
462 | 'R', | |
463 | 'library(talweg)\n' | |
464 | '\n' | |
465 | 'ts_data = ' | |
466 | 'read.csv(system.file("extdata","pm10_mesures_H_loc_report.csv",package="talweg"))\n' | |
467 | 'exo_data = ' | |
468 | 'read.csv(system.file("extdata","meteo_extra_noNAs.csv",package="talweg"))\n' | |
469 | 'data = getData(ts_data, exo_data, input_tz = "Europe/Paris", ' | |
470 | 'working_tz="Europe/Paris", predict_at=13)\n' | |
471 | '\n' | |
472 | 'indices_ch = seq(as.Date("2015-01-18"),as.Date("2015-01-24"),"days")\n' | |
473 | 'indices_ep = seq(as.Date("2015-03-15"),as.Date("2015-03-21"),"days")\n' | |
474 | 'indices_np = seq(as.Date("2015-04-26"),as.Date("2015-05-02"),"days")'], | |
475 | ['markdown', | |
476 | 'text', | |
477 | '\n\n<h2 style="color:blue;font-size:2em">Pollution par chauffage</h2>'], | |
478 | ['codecell', | |
479 | 'R', | |
480 | 'p_nn_exo = computeForecast(data, indices_ch, "Neighbors", "Neighbors", ' | |
481 | 'simtype="exo", horizon=H)\n' | |
482 | 'p_nn_mix = computeForecast(data, indices_ch, "Neighbors", "Neighbors", ' | |
483 | 'simtype="mix", horizon=H)\n' | |
484 | 'p_az = computeForecast(data, indices_ch, "Average", "Zero", horizon=H) #, ' | |
485 | 'memory=183)\n' | |
486 | 'p_pz = computeForecast(data, indices_ch, "Persistence", "Zero", horizon=H, ' | |
487 | 'same_day=TRUE)'], | |
488 | ['codecell', | |
489 | 'R', | |
490 | 'e_nn_exo = computeError(data, p_nn_exo)\n' | |
491 | 'e_nn_mix = computeError(data, p_nn_mix)\n' | |
492 | 'e_az = computeError(data, p_az)\n' | |
493 | 'e_pz = computeError(data, p_pz)\n' | |
494 | 'options(repr.plot.width=9, repr.plot.height=7)\n' | |
495 | 'plotError(list(e_nn_mix, e_pz, e_az, e_nn_exo), cols=c(1,2,colors()[258], ' | |
496 | '4))\n' | |
497 | '\n' | |
498 | '# Noir: neighbors_mix, bleu: neighbors_exo, vert: moyenne, rouge: ' | |
499 | 'persistence\n' | |
500 | '\n' | |
501 | 'i_np = which.min(e_nn_exo$abs$indices)\n' | |
502 | 'i_p = which.max(e_nn_exo$abs$indices)'], | |
503 | ['codecell', | |
504 | 'R', | |
505 | 'options(repr.plot.width=9, repr.plot.height=4)\n' | |
506 | 'par(mfrow=c(1,2))\n' | |
507 | '\n' | |
508 | 'plotPredReal(data, p_nn_exo, i_np); title(paste("PredReal nn exo ' | |
509 | 'day",i_np))\n' | |
510 | 'plotPredReal(data, p_nn_exo, i_p); title(paste("PredReal nn exo day",i_p))\n' | |
511 | '\n' | |
512 | 'plotPredReal(data, p_nn_mix, i_np); title(paste("PredReal nn mix ' | |
513 | 'day",i_np))\n' | |
514 | 'plotPredReal(data, p_nn_mix, i_p); title(paste("PredReal nn mix day",i_p))\n' | |
515 | '\n' | |
516 | 'plotPredReal(data, p_az, i_np); title(paste("PredReal az day",i_np))\n' | |
517 | 'plotPredReal(data, p_az, i_p); title(paste("PredReal az day",i_p))\n' | |
518 | '\n' | |
519 | '# Bleu: prévue, noir: réalisée'], | |
520 | ['codecell', | |
521 | 'R', | |
522 | 'par(mfrow=c(1,2))\n' | |
523 | 'f_np_exo = computeFilaments(data, p_nn_exo, i_np, plot=TRUE); ' | |
524 | 'title(paste("Filaments nn exo day",i_np))\n' | |
525 | 'f_p_exo = computeFilaments(data, p_nn_exo, i_p, plot=TRUE); ' | |
526 | 'title(paste("Filaments nn exo day",i_p))\n' | |
527 | '\n' | |
528 | 'f_np_mix = computeFilaments(data, p_nn_mix, i_np, plot=TRUE); ' | |
529 | 'title(paste("Filaments nn mix day",i_np))\n' | |
530 | 'f_p_mix = computeFilaments(data, p_nn_mix, i_p, plot=TRUE); ' | |
531 | 'title(paste("Filaments nn mix day",i_p))'], | |
532 | ['codecell', | |
533 | 'R', | |
534 | 'par(mfrow=c(1,2))\n' | |
535 | 'plotFilamentsBox(data, f_np_exo); title(paste("FilBox nn exo day",i_np))\n' | |
536 | 'plotFilamentsBox(data, f_p_exo); title(paste("FilBox nn exo day",i_p))\n' | |
537 | '\n' | |
538 | 'plotFilamentsBox(data, f_np_mix); title(paste("FilBox nn mix day",i_np))\n' | |
539 | 'plotFilamentsBox(data, f_p_mix); title(paste("FilBox nn mix day",i_p))'], | |
540 | ['codecell', | |
541 | 'R', | |
542 | 'par(mfrow=c(1,2))\n' | |
543 | 'plotRelVar(data, f_np_exo); title(paste("StdDev nn exo day",i_np))\n' | |
544 | 'plotRelVar(data, f_p_exo); title(paste("StdDev nn exo day",i_p))\n' | |
545 | '\n' | |
546 | 'plotRelVar(data, f_np_mix); title(paste("StdDev nn mix day",i_np))\n' | |
547 | 'plotRelVar(data, f_p_mix); title(paste("StdDev nn mix day",i_p))\n' | |
548 | '\n' | |
549 | '# Variabilité globale en rouge ; sur les 60 voisins (+ lendemains) en noir'], | |
550 | ['codecell', | |
551 | 'R', | |
552 | 'par(mfrow=c(1,2))\n' | |
553 | 'plotSimils(p_nn_exo, i_np); title(paste("Weights nn exo day",i_np))\n' | |
554 | 'plotSimils(p_nn_exo, i_p); title(paste("Weights nn exo day",i_p))\n' | |
555 | '\n' | |
556 | 'plotSimils(p_nn_mix, i_np); title(paste("Weights nn mix day",i_np))\n' | |
557 | 'plotSimils(p_nn_mix, i_p); title(paste("Weights nn mix day",i_p)\n' | |
558 | '\n' | |
559 | '# - pollué à gauche, + pollué à droite'], | |
560 | ['codecell', | |
561 | 'R', | |
562 | '# Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite\n' | |
563 | 'p_nn_exo$getParams(i_np)$window\n' | |
564 | 'p_nn_exo$getParams(i_p)$window\n' | |
565 | '\n' | |
566 | 'p_nn_mix$getParams(i_np)$window\n' | |
567 | 'p_nn_mix$getParams(i_p)$window'], | |
568 | ['markdown', | |
569 | 'text', | |
570 | '\n\n<h2 style="color:blue;font-size:2em">Pollution par épandage</h2>'], | |
571 | ['codecell', | |
572 | 'R', | |
573 | 'p_nn_exo = computeForecast(data, indices_ep, "Neighbors", "Neighbors", ' | |
574 | 'simtype="exo", horizon=H)\n' | |
575 | 'p_nn_mix = computeForecast(data, indices_ep, "Neighbors", "Neighbors", ' | |
576 | 'simtype="mix", horizon=H)\n' | |
577 | 'p_az = computeForecast(data, indices_ep, "Average", "Zero", horizon=H) #, ' | |
578 | 'memory=183)\n' | |
579 | 'p_pz = computeForecast(data, indices_ep, "Persistence", "Zero", horizon=H, ' | |
580 | 'same_day=TRUE)'], | |
581 | ['codecell', | |
582 | 'R', | |
583 | 'e_nn_exo = computeError(data, p_nn_exo)\n' | |
584 | 'e_nn_mix = computeError(data, p_nn_mix)\n' | |
585 | 'e_az = computeError(data, p_az)\n' | |
586 | 'e_pz = computeError(data, p_pz)\n' | |
587 | 'options(repr.plot.width=9, repr.plot.height=7)\n' | |
588 | 'plotError(list(e_nn_mix, e_pz, e_az, e_nn_exo), cols=c(1,2,colors()[258], ' | |
589 | '4))\n' | |
590 | '\n' | |
591 | '# Noir: neighbors_mix, bleu: neighbors_exo, vert: moyenne, rouge: ' | |
592 | 'persistence\n' | |
593 | '\n' | |
594 | 'i_np = which.min(e_nn_exo$abs$indices)\n' | |
595 | 'i_p = which.max(e_nn_exo$abs$indices)'], | |
596 | ['codecell', | |
597 | 'R', | |
598 | 'options(repr.plot.width=9, repr.plot.height=4)\n' | |
599 | 'par(mfrow=c(1,2))\n' | |
600 | '\n' | |
601 | 'plotPredReal(data, p_nn_exo, i_np); title(paste("PredReal nn exo ' | |
602 | 'day",i_np))\n' | |
603 | 'plotPredReal(data, p_nn_exo, i_p); title(paste("PredReal nn exo day",i_p))\n' | |
604 | '\n' | |
605 | 'plotPredReal(data, p_nn_mix, i_np); title(paste("PredReal nn mix ' | |
606 | 'day",i_np))\n' | |
607 | 'plotPredReal(data, p_nn_mix, i_p); title(paste("PredReal nn mix day",i_p))\n' | |
608 | '\n' | |
609 | 'plotPredReal(data, p_az, i_np); title(paste("PredReal az day",i_np))\n' | |
610 | 'plotPredReal(data, p_az, i_p); title(paste("PredReal az day",i_p))\n' | |
611 | '\n' | |
612 | '# Bleu: prévue, noir: réalisée'], | |
613 | ['codecell', | |
614 | 'R', | |
615 | 'par(mfrow=c(1,2))\n' | |
616 | 'f_np_exo = computeFilaments(data, p_nn_exo, i_np, plot=TRUE); ' | |
617 | 'title(paste("Filaments nn exo day",i_np))\n' | |
618 | 'f_p_exo = computeFilaments(data, p_nn_exo, i_p, plot=TRUE); ' | |
619 | 'title(paste("Filaments nn exo day",i_p))\n' | |
620 | '\n' | |
621 | 'f_np_mix = computeFilaments(data, p_nn_mix, i_np, plot=TRUE); ' | |
622 | 'title(paste("Filaments nn mix day",i_np))\n' | |
623 | 'f_p_mix = computeFilaments(data, p_nn_mix, i_p, plot=TRUE); ' | |
624 | 'title(paste("Filaments nn mix day",i_p))'], | |
625 | ['codecell', | |
626 | 'R', | |
627 | 'par(mfrow=c(1,2))\n' | |
628 | 'plotFilamentsBox(data, f_np_exo); title(paste("FilBox nn exo day",i_np))\n' | |
629 | 'plotFilamentsBox(data, f_p_exo); title(paste("FilBox nn exo day",i_p))\n' | |
630 | '\n' | |
631 | 'plotFilamentsBox(data, f_np_mix); title(paste("FilBox nn mix day",i_np))\n' | |
632 | 'plotFilamentsBox(data, f_p_mix); title(paste("FilBox nn mix day",i_p))'], | |
633 | ['codecell', | |
634 | 'R', | |
635 | 'par(mfrow=c(1,2))\n' | |
636 | 'plotRelVar(data, f_np_exo); title(paste("StdDev nn exo day",i_np))\n' | |
637 | 'plotRelVar(data, f_p_exo); title(paste("StdDev nn exo day",i_p))\n' | |
638 | '\n' | |
639 | 'plotRelVar(data, f_np_mix); title(paste("StdDev nn mix day",i_np))\n' | |
640 | 'plotRelVar(data, f_p_mix); title(paste("StdDev nn mix day",i_p))\n' | |
641 | '\n' | |
642 | '# Variabilité globale en rouge ; sur les 60 voisins (+ lendemains) en noir'], | |
643 | ['codecell', | |
644 | 'R', | |
645 | 'par(mfrow=c(1,2))\n' | |
646 | 'plotSimils(p_nn_exo, i_np); title(paste("Weights nn exo day",i_np))\n' | |
647 | 'plotSimils(p_nn_exo, i_p); title(paste("Weights nn exo day",i_p))\n' | |
648 | '\n' | |
649 | 'plotSimils(p_nn_mix, i_np); title(paste("Weights nn mix day",i_np))\n' | |
650 | 'plotSimils(p_nn_mix, i_p); title(paste("Weights nn mix day",i_p)\n' | |
651 | '\n' | |
652 | '# - pollué à gauche, + pollué à droite'], | |
653 | ['codecell', | |
654 | 'R', | |
655 | '# Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite\n' | |
656 | 'p_nn_exo$getParams(i_np)$window\n' | |
657 | 'p_nn_exo$getParams(i_p)$window\n' | |
658 | '\n' | |
659 | 'p_nn_mix$getParams(i_np)$window\n' | |
660 | 'p_nn_mix$getParams(i_p)$window'], | |
661 | ['markdown', | |
662 | 'text', | |
663 | '\n\n<h2 style="color:blue;font-size:2em">Semaine non polluée</h2>'], | |
664 | ['codecell', | |
665 | 'R', | |
666 | 'p_nn_exo = computeForecast(data, indices_np, "Neighbors", "Neighbors", ' | |
667 | 'simtype="exo", horizon=H)\n' | |
668 | 'p_nn_mix = computeForecast(data, indices_np, "Neighbors", "Neighbors", ' | |
669 | 'simtype="mix", horizon=H)\n' | |
670 | 'p_az = computeForecast(data, indices_np, "Average", "Zero", horizon=H) #, ' | |
671 | 'memory=183)\n' | |
672 | 'p_pz = computeForecast(data, indices_np, "Persistence", "Zero", horizon=H, ' | |
673 | 'same_day=TRUE)'], | |
674 | ['codecell', | |
675 | 'R', | |
676 | 'e_nn_exo = computeError(data, p_nn_exo)\n' | |
677 | 'e_nn_mix = computeError(data, p_nn_mix)\n' | |
678 | 'e_az = computeError(data, p_az)\n' | |
679 | 'e_pz = computeError(data, p_pz)\n' | |
680 | 'options(repr.plot.width=9, repr.plot.height=7)\n' | |
681 | 'plotError(list(e_nn_mix, e_pz, e_az, e_nn_exo), cols=c(1,2,colors()[258], ' | |
682 | '4))\n' | |
683 | '\n' | |
684 | '# Noir: neighbors_mix, bleu: neighbors_exo, vert: moyenne, rouge: ' | |
685 | 'persistence\n' | |
686 | '\n' | |
687 | 'i_np = which.min(e_nn_exo$abs$indices)\n' | |
688 | 'i_p = which.max(e_nn_exo$abs$indices)'], | |
689 | ['codecell', | |
690 | 'R', | |
691 | 'options(repr.plot.width=9, repr.plot.height=4)\n' | |
692 | 'par(mfrow=c(1,2))\n' | |
693 | '\n' | |
694 | 'plotPredReal(data, p_nn_exo, i_np); title(paste("PredReal nn exo ' | |
695 | 'day",i_np))\n' | |
696 | 'plotPredReal(data, p_nn_exo, i_p); title(paste("PredReal nn exo day",i_p))\n' | |
697 | '\n' | |
698 | 'plotPredReal(data, p_nn_mix, i_np); title(paste("PredReal nn mix ' | |
699 | 'day",i_np))\n' | |
700 | 'plotPredReal(data, p_nn_mix, i_p); title(paste("PredReal nn mix day",i_p))\n' | |
701 | '\n' | |
702 | 'plotPredReal(data, p_az, i_np); title(paste("PredReal az day",i_np))\n' | |
703 | 'plotPredReal(data, p_az, i_p); title(paste("PredReal az day",i_p))\n' | |
704 | '\n' | |
705 | '# Bleu: prévue, noir: réalisée'], | |
706 | ['codecell', | |
707 | 'R', | |
708 | 'par(mfrow=c(1,2))\n' | |
709 | 'f_np_exo = computeFilaments(data, p_nn_exo, i_np, plot=TRUE); ' | |
710 | 'title(paste("Filaments nn exo day",i_np))\n' | |
711 | 'f_p_exo = computeFilaments(data, p_nn_exo, i_p, plot=TRUE); ' | |
712 | 'title(paste("Filaments nn exo day",i_p))\n' | |
713 | '\n' | |
714 | 'f_np_mix = computeFilaments(data, p_nn_mix, i_np, plot=TRUE); ' | |
715 | 'title(paste("Filaments nn mix day",i_np))\n' | |
716 | 'f_p_mix = computeFilaments(data, p_nn_mix, i_p, plot=TRUE); ' | |
717 | 'title(paste("Filaments nn mix day",i_p))'], | |
718 | ['codecell', | |
719 | 'R', | |
720 | 'par(mfrow=c(1,2))\n' | |
721 | 'plotFilamentsBox(data, f_np_exo); title(paste("FilBox nn exo day",i_np))\n' | |
722 | 'plotFilamentsBox(data, f_p_exo); title(paste("FilBox nn exo day",i_p))\n' | |
723 | '\n' | |
724 | 'plotFilamentsBox(data, f_np_mix); title(paste("FilBox nn mix day",i_np))\n' | |
725 | 'plotFilamentsBox(data, f_p_mix); title(paste("FilBox nn mix day",i_p))'], | |
726 | ['codecell', | |
727 | 'R', | |
728 | 'par(mfrow=c(1,2))\n' | |
729 | 'plotRelVar(data, f_np_exo); title(paste("StdDev nn exo day",i_np))\n' | |
730 | 'plotRelVar(data, f_p_exo); title(paste("StdDev nn exo day",i_p))\n' | |
731 | '\n' | |
732 | 'plotRelVar(data, f_np_mix); title(paste("StdDev nn mix day",i_np))\n' | |
733 | 'plotRelVar(data, f_p_mix); title(paste("StdDev nn mix day",i_p))\n' | |
734 | '\n' | |
735 | '# Variabilité globale en rouge ; sur les 60 voisins (+ lendemains) en noir'], | |
736 | ['codecell', | |
737 | 'R', | |
738 | 'par(mfrow=c(1,2))\n' | |
739 | 'plotSimils(p_nn_exo, i_np); title(paste("Weights nn exo day",i_np))\n' | |
740 | 'plotSimils(p_nn_exo, i_p); title(paste("Weights nn exo day",i_p))\n' | |
741 | '\n' | |
742 | 'plotSimils(p_nn_mix, i_np); title(paste("Weights nn mix day",i_np))\n' | |
743 | 'plotSimils(p_nn_mix, i_p); title(paste("Weights nn mix day",i_p)\n' | |
744 | '\n' | |
745 | '# - pollué à gauche, + pollué à droite'], | |
746 | ['codecell', | |
747 | 'R', | |
748 | '# Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite\n' | |
749 | 'p_nn_exo$getParams(i_np)$window\n' | |
750 | 'p_nn_exo$getParams(i_p)$window\n' | |
751 | '\n' | |
752 | 'p_nn_mix$getParams(i_np)$window\n' | |
753 | 'p_nn_mix$getParams(i_p)$window'], | |
754 | ['markdown', | |
755 | 'text', | |
756 | '\n' | |
757 | '\n' | |
758 | '<h2>Bilan</h2>\n' | |
759 | '\n' | |
760 | "Problème difficile : on ne fait guère mieux qu'une naïve moyenne des " | |
761 | 'lendemains des jours\n' | |
762 | "similaires dans le passé, ce qui n'est pas loin de prédire une série " | |
763 | 'constante égale à la\n' | |
764 | 'dernière valeur observée (méthode "zéro"). La persistence donne parfois de ' | |
765 | 'bons résultats\n' | |
766 | "mais est trop instable (sensibilité à l'argument <code>same_day</code>).\n" | |
767 | '\n' | |
768 | 'Comment améliorer la méthode ?']] |