'update'
[talweg.git] / reports / report_2017-03-01.ipynb
CommitLineData
09cf9c19
BA
1{
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": null,
6 "metadata": {
7 "collapsed": false
8 },
9 "outputs": [],
10 "source": [
11 "library(talweg)"
12 ]
13 },
14 {
15 "cell_type": "code",
16 "execution_count": null,
17 "metadata": {
18 "collapsed": false
19 },
20 "outputs": [],
21 "source": [
22 "data = getData(ts_data=\"../data/pm10_mesures_H_loc.csv\", exo_data=\"../data/meteo_extra_noNAs.csv\",\n",
23 " input_tz = \"Europe/Paris\", working_tz=\"Europe/Paris\", predict_at=7)"
24 ]
25 },
26 {
27 "cell_type": "markdown",
28 "metadata": {},
29 "source": [
56999439
BA
30 "## Introduction\n",
31 "\n",
32 "J'ai fait quelques essais dans différentes configurations pour la méthode \"Neighbors\" (la seule dont on a parlé).<br>Il semble que le mieux soit\n",
33 "\n",
34 " * simtype=\"mix\" : on utilise les similarités endogènes et exogènes (fenêtre optimisée par VC)\n",
35 " * same_season=FALSE : les indices pour la validation croisée ne tiennent pas compte des saisons\n",
36 " * mix_strategy=\"mult\" : on multiplie les poids (au lieu d'en éteindre)\n",
37 "\n",
3a3f16cc 38 "J'ai systématiquement comparé à deux autres approches : la persistence et la moyennes des lendemains des jours \"similaires\" dans tout le passé ; à chaque fois sans prédiction du saut (sauf pour Neighbors : prédiction basée sur les poids calculés).\n",
56999439
BA
39 "\n",
40 "Ensuite j'affiche les erreurs, quelques courbes prévues/mesurées, quelques filaments puis les histogrammes de quelques poids. Concernant les graphes de filaments, la moitié gauche du graphe correspond aux jours similaires au jour courant, tandis que la moitié droite affiche les lendemains : ce sont donc les voisinages tels qu'utilisés dans l'algorithme.\n",
41 "\n",
42 "<h2 style=\"color:blue;font-size:2em\">Pollution par chauffage</h2>"
09cf9c19
BA
43 ]
44 },
45 {
46 "cell_type": "code",
47 "execution_count": null,
48 "metadata": {
49 "collapsed": false
50 },
51 "outputs": [],
52 "source": [
e030a6e3
BA
53 "indices = seq(as.Date(\"2015-01-18\"),as.Date(\"2015-01-24\"),\"days\")\n",
54 "p_ch_nn = getForecast(data,indices,\"Neighbors\",\"Neighbors\",simtype=\"mix\",same_season=FALSE,mix_strategy=\"mult\")\n",
e5aa669a 55 "p_ch_pz = getForecast(data, indices, \"Persistence\", \"Zero\", same_day=TRUE)\n",
1b25210f 56 "p_ch_az = getForecast(data, indices, \"Average\", \"Zero\") #, memory=183)\n",
3a3f16cc 57 "#p_ch_zz = getForecast(data, indices, \"Zero\", \"Zero\")\n",
e5aa669a 58 "#p_ch_l = getForecast(data, indices, \"Level\", same_day=FALSE)"
09cf9c19
BA
59 ]
60 },
61 {
62 "cell_type": "code",
63 "execution_count": null,
64 "metadata": {
65 "collapsed": false
66 },
67 "outputs": [],
68 "source": [
e030a6e3
BA
69 "e_ch_nn = getError(data, p_ch_nn)\n",
70 "e_ch_pz = getError(data, p_ch_pz)\n",
858e4073 71 "e_ch_az = getError(data, p_ch_az)\n",
3a3f16cc 72 "#e_ch_zz = getError(data, p_ch_zz)\n",
e5aa669a 73 "#e_ch_l = getError(data, p_ch_l)\n",
09cf9c19 74 "options(repr.plot.width=9, repr.plot.height=6)\n",
3a3f16cc 75 "plotError(list(e_ch_nn, e_ch_pz, e_ch_az), cols=c(1,2,colors()[258]))\n",
56999439 76 "\n",
3a3f16cc 77 "#Noir: neighbors, rouge: persistence, vert: moyenne"
56999439
BA
78 ]
79 },
80 {
81 "cell_type": "markdown",
82 "metadata": {},
83 "source": [
e5aa669a 84 "La méthode Neighbors fait assez nettement mieux que les autres dans ce cas."
09cf9c19
BA
85 ]
86 },
87 {
88 "cell_type": "code",
89 "execution_count": null,
90 "metadata": {
91 "collapsed": false
92 },
93 "outputs": [],
94 "source": [
95 "par(mfrow=c(1,2))\n",
96 "options(repr.plot.width=9, repr.plot.height=4)\n",
97 "plotPredReal(data, p_ch_nn, 3)\n",
56999439
BA
98 "plotPredReal(data, p_ch_nn, 4)\n",
99 "\n",
100 "#Bleu: prévue, noir: réalisée"
101 ]
102 },
103 {
104 "cell_type": "markdown",
105 "metadata": {},
106 "source": [
107 "Prédictions d'autant plus lisses que le jour à prévoir est atypique (pollué)."
09cf9c19
BA
108 ]
109 },
110 {
111 "cell_type": "code",
112 "execution_count": null,
113 "metadata": {
114 "collapsed": false
115 },
116 "outputs": [],
117 "source": [
118 "par(mfrow=c(1,2))\n",
119 "plotFilaments(data, p_ch_nn$getIndexInData(3))\n",
120 "plotFilaments(data, p_ch_nn$getIndexInData(4))"
121 ]
122 },
56999439
BA
123 {
124 "cell_type": "markdown",
125 "metadata": {},
126 "source": [
127 "Beaucoup de courbes similaires dans le cas peu pollué, très peu pour un jour pollué."
128 ]
129 },
09cf9c19
BA
130 {
131 "cell_type": "code",
132 "execution_count": null,
133 "metadata": {
134 "collapsed": false
135 },
136 "outputs": [],
137 "source": [
138 "par(mfrow=c(1,3))\n",
139 "plotSimils(p_ch_nn, 3)\n",
140 "plotSimils(p_ch_nn, 4)\n",
56999439
BA
141 "plotSimils(p_ch_nn, 5)\n",
142 "\n",
143 "#Non pollué à gauche, pollué au milieu, autre pollué à droite"
09cf9c19
BA
144 ]
145 },
146 {
147 "cell_type": "markdown",
148 "metadata": {},
149 "source": [
56999439
BA
150 "La plupart des poids très proches de zéro ; pas pour le jour 5 : autre type de jour, cf. ci-dessous."
151 ]
152 },
153 {
154 "cell_type": "code",
155 "execution_count": null,
156 "metadata": {
157 "collapsed": false
158 },
159 "outputs": [],
160 "source": [
161 "par(mfrow=c(1,2))\n",
162 "plotPredReal(data, p_ch_nn, 5)\n",
163 "plotFilaments(data, p_ch_nn$getIndexInData(5))"
164 ]
165 },
166 {
167 "cell_type": "markdown",
168 "metadata": {},
169 "source": [
170 "<h2 style=\"color:blue;font-size:2em\">Pollution par épandage</h2>"
09cf9c19
BA
171 ]
172 },
173 {
174 "cell_type": "code",
175 "execution_count": null,
176 "metadata": {
177 "collapsed": false
178 },
179 "outputs": [],
180 "source": [
e030a6e3
BA
181 "indices = seq(as.Date(\"2015-03-15\"),as.Date(\"2015-03-21\"),\"days\")\n",
182 "p_ep_nn = getForecast(data,indices,\"Neighbors\",\"Neighbors\",simtype=\"mix\",same_season=FALSE,mix_strategy=\"mult\")\n",
e5aa669a 183 "p_ep_pz = getForecast(data, indices, \"Persistence\", \"Zero\", same_day=TRUE)\n",
1b25210f 184 "p_ep_az = getForecast(data, indices, \"Average\", \"Zero\") #, memory=183)\n",
3a3f16cc 185 "#p_ep_zz = getForecast(data, indices, \"Zero\", \"Zero\")\n",
e5aa669a 186 "#p_ep_l = getForecast(data, indices, \"Level\", same_day=TRUE)"
09cf9c19
BA
187 ]
188 },
189 {
190 "cell_type": "code",
191 "execution_count": null,
192 "metadata": {
193 "collapsed": false
194 },
195 "outputs": [],
196 "source": [
e030a6e3
BA
197 "e_ep_nn = getError(data, p_ep_nn)\n",
198 "e_ep_pz = getError(data, p_ep_pz)\n",
3a3f16cc
BA
199 "e_ep_az = getError(data, p_ep_az)\n",
200 "#e_ep_zz = getError(data, p_ep_zz)\n",
e5aa669a 201 "#e_ep_l = getError(data, p_ep_l)\n",
09cf9c19 202 "options(repr.plot.width=9, repr.plot.height=6)\n",
3a3f16cc 203 "plotError(list(e_ep_nn, e_ep_pz, e_ep_az), cols=c(1,2,colors()[258]))\n",
56999439 204 "\n",
3a3f16cc 205 "#Noir: neighbors, rouge: persistence, vert: moyenne"
56999439
BA
206 ]
207 },
208 {
209 "cell_type": "markdown",
210 "metadata": {},
211 "source": [
212 "Cette fois les deux méthodes naïves font en moyenne moins d'erreurs que Neighbors. Prédiction trop difficile ?"
09cf9c19
BA
213 ]
214 },
215 {
216 "cell_type": "code",
217 "execution_count": null,
218 "metadata": {
219 "collapsed": false
220 },
221 "outputs": [],
222 "source": [
223 "par(mfrow=c(1,2))\n",
224 "options(repr.plot.width=9, repr.plot.height=4)\n",
56999439 225 "plotPredReal(data, p_ep_nn, 4)\n",
1b25210f
BA
226 "plotPredReal(data, p_ep_nn, 6)\n",
227 "\n",
228 "#Bleu: prévue, noir: réalisée"
56999439
BA
229 ]
230 },
231 {
232 "cell_type": "markdown",
233 "metadata": {},
234 "source": [
235 "À gauche un jour \"bien\" prévu, à droite le pic d'erreur (jour 6)."
09cf9c19
BA
236 ]
237 },
238 {
239 "cell_type": "code",
240 "execution_count": null,
241 "metadata": {
242 "collapsed": false
243 },
244 "outputs": [],
245 "source": [
246 "par(mfrow=c(1,2))\n",
56999439
BA
247 "plotFilaments(data, p_ep_nn$getIndexInData(4))\n",
248 "plotFilaments(data, p_ep_nn$getIndexInData(6))"
09cf9c19
BA
249 ]
250 },
251 {
252 "cell_type": "code",
253 "execution_count": null,
254 "metadata": {
255 "collapsed": false
256 },
257 "outputs": [],
258 "source": [
56999439 259 "par(mfrow=c(1,2))\n",
09cf9c19 260 "plotSimils(p_ep_nn, 4)\n",
56999439
BA
261 "plotSimils(p_ep_nn, 6)"
262 ]
263 },
264 {
265 "cell_type": "markdown",
266 "metadata": {},
267 "source": [
268 "Même observation concernant les poids : concentrés près de zéro pour les prédictions avec peu de voisins."
09cf9c19
BA
269 ]
270 },
271 {
272 "cell_type": "markdown",
273 "metadata": {},
274 "source": [
275 "## Semaine non polluée"
276 ]
277 },
278 {
279 "cell_type": "code",
280 "execution_count": null,
281 "metadata": {
282 "collapsed": false
283 },
284 "outputs": [],
285 "source": [
e030a6e3
BA
286 "indices = seq(as.Date(\"2015-04-26\"),as.Date(\"2015-05-02\"),\"days\")\n",
287 "p_np_nn = getForecast(data,indices,\"Neighbors\",\"Neighbors\",simtype=\"mix\",same_season=FALSE,mix_strategy=\"mult\")\n",
e5aa669a 288 "p_np_pz = getForecast(data, indices, \"Persistence\", \"Zero\", same_day=FALSE)\n",
1b25210f 289 "p_np_az = getForecast(data, indices, \"Average\", \"Zero\") #, memory=183)\n",
3a3f16cc 290 "#p_np_zz = getForecast(data, indices, \"Zero\", \"Zero\")\n",
e5aa669a 291 "#p_np_l = getForecast(data, indices, \"Level\", same_day=FALSE)"
09cf9c19
BA
292 ]
293 },
294 {
295 "cell_type": "code",
296 "execution_count": null,
297 "metadata": {
298 "collapsed": false
299 },
300 "outputs": [],
301 "source": [
e030a6e3
BA
302 "e_np_nn = getError(data, p_np_nn)\n",
303 "e_np_pz = getError(data, p_np_pz)\n",
3a3f16cc
BA
304 "e_np_az = getError(data, p_np_az)\n",
305 "#e_np_zz = getError(data, p_np_zz)\n",
e5aa669a 306 "#e_np_l = getError(data, p_np_l)\n",
09cf9c19 307 "options(repr.plot.width=9, repr.plot.height=6)\n",
3a3f16cc 308 "plotError(list(e_np_nn, e_np_pz, e_np_az), cols=c(1,2,colors()[258]))\n",
56999439 309 "\n",
3a3f16cc 310 "#Noir: neighbors, rouge: persistence, vert: moyenne"
56999439
BA
311 ]
312 },
313 {
314 "cell_type": "markdown",
315 "metadata": {},
316 "source": [
3a3f16cc 317 "Performances des méthodes \"Average\" et \"Neighbors\" comparables ; mauvais résultats pour la persistence."
09cf9c19
BA
318 ]
319 },
320 {
321 "cell_type": "code",
322 "execution_count": null,
323 "metadata": {
324 "collapsed": false
325 },
326 "outputs": [],
327 "source": [
328 "par(mfrow=c(1,2))\n",
329 "options(repr.plot.width=9, repr.plot.height=4)\n",
330 "plotPredReal(data, p_np_nn, 3)\n",
1b25210f
BA
331 "plotPredReal(data, p_np_nn, 6)\n",
332 "\n",
333 "#Bleu: prévue, noir: réalisée"
56999439
BA
334 ]
335 },
336 {
337 "cell_type": "markdown",
338 "metadata": {},
339 "source": [
340 "Les \"bonnes\" prédictions (à gauche) sont tout de même trop lissées."
09cf9c19
BA
341 ]
342 },
1b25210f
BA
343 {
344 "cell_type": "code",
345 "execution_count": null,
346 "metadata": {
347 "collapsed": false
348 },
349 "outputs": [],
350 "source": [
351 "par(mfrow=c(1,2))\n",
352 "plotPredReal(data, p_np_az, 3)\n",
353 "plotPredReal(data, p_np_az, 6)"
354 ]
355 },
09cf9c19
BA
356 {
357 "cell_type": "code",
358 "execution_count": null,
359 "metadata": {
360 "collapsed": false
361 },
362 "outputs": [],
363 "source": [
364 "par(mfrow=c(1,2))\n",
365 "plotFilaments(data, p_np_nn$getIndexInData(3))\n",
56999439
BA
366 "plotFilaments(data, p_np_nn$getIndexInData(6))"
367 ]
368 },
369 {
370 "cell_type": "markdown",
371 "metadata": {},
372 "source": [
373 "Jours \"typiques\", donc beaucoup de voisins."
09cf9c19
BA
374 ]
375 },
376 {
377 "cell_type": "code",
378 "execution_count": null,
379 "metadata": {
380 "collapsed": false
381 },
382 "outputs": [],
383 "source": [
384 "par(mfrow=c(1,3))\n",
385 "plotSimils(p_np_nn, 3)\n",
386 "plotSimils(p_np_nn, 4)\n",
56999439
BA
387 "plotSimils(p_np_nn, 6)"
388 ]
389 },
390 {
391 "cell_type": "markdown",
392 "metadata": {},
393 "source": [
394 "Répartition idéale des poids : quelques uns au-delà de 0.3-0.4, le reste très proche de zéro."
395 ]
396 },
397 {
398 "cell_type": "markdown",
399 "metadata": {},
400 "source": [
401 "## Bilan\n",
402 "\n",
3a3f16cc 403 "Problème difficile : on ne fait guère mieux qu'une naïve moyenne des lendemains des jours similaires dans le passé, ce qui n'est pas loin de prédire une série constante égale à la dernière valeur observée (méthode \"zéro\"). La persistence donne parfois de bons résultats mais est trop instable (sensibilité à l'argument <code>same_day</code>).\n",
56999439
BA
404 "\n",
405 "Comment améliorer la méthode ?"
09cf9c19
BA
406 ]
407 }
408 ],
409 "metadata": {
410 "kernelspec": {
411 "display_name": "R",
412 "language": "R",
413 "name": "ir"
414 },
415 "language_info": {
416 "codemirror_mode": "r",
417 "file_extension": ".r",
418 "mimetype": "text/x-r-source",
419 "name": "R",
420 "pygments_lexer": "r",
421 "version": "3.3.2"
422 }
423 },
424 "nbformat": 4,
425 "nbformat_minor": 2
426}