intermediate: R6, too slow
[talweg.git] / reports / report_2017-03-01.7h_average.ipynb
CommitLineData
fa8078f9
BA
1{
2 "cells": [
3 {
4 "cell_type": "code",
25b75559 5 "execution_count": 1,
fa8078f9
BA
6 "metadata": {
7 "collapsed": false
8 },
25b75559
BA
9 "outputs": [
10 {
11 "name": "stderr",
12 "output_type": "stream",
13 "text": [
14 "Loading required package: R6\n"
15 ]
16 }
17 ],
fa8078f9
BA
18 "source": [
19 "library(talweg)"
20 ]
21 },
22 {
23 "cell_type": "code",
25b75559 24 "execution_count": 2,
fa8078f9
BA
25 "metadata": {
26 "collapsed": false
27 },
25b75559
BA
28 "outputs": [
29 {
30 "ename": "ERROR",
31 "evalue": "Error in private$.data <<- list(): object 'private' not found\n",
32 "output_type": "error",
33 "traceback": [
34 "Error in private$.data <<- list(): object 'private' not found\nTraceback:\n",
35 "1. getData(ts_data, exo_data, input_tz = \"Europe/Paris\", working_tz = \"Europe/Paris\", \n . predict_at = 7)",
36 "2. Data$new()",
37 "3. .subset2(public_bind_env, \"initialize\")(...)",
38 "4. initializeData(self, private)"
39 ]
40 }
41 ],
fa8078f9 42 "source": [
99f83c9a
BA
43 "ts_data = read.csv(system.file(\"extdata\",\"pm10_mesures_H_loc.csv\",package=\"talweg\"))\n",
44 "exo_data = read.csv(system.file(\"extdata\",\"meteo_extra_noNAs.csv\",package=\"talweg\"))\n",
45 "data = getData(ts_data, exo_data, input_tz = \"Europe/Paris\", working_tz=\"Europe/Paris\", predict_at=7)"
fa8078f9
BA
46 ]
47 },
48 {
49 "cell_type": "markdown",
50 "metadata": {},
51 "source": [
52 "## Introduction\n",
53 "\n",
54 "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",
55 "\n",
56 " * simtype=\"mix\" : on utilise les similarités endogènes et exogènes (fenêtre optimisée par VC)\n",
57 " * same_season=FALSE : les indices pour la validation croisée ne tiennent pas compte des saisons\n",
58 " * mix_strategy=\"mult\" : on multiplie les poids (au lieu d'en éteindre)\n",
59 "\n",
99f83c9a
BA
60 "(valeurs par défaut).\n",
61 "\n",
fa8078f9
BA
62 "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",
63 "\n",
64 "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",
65 "\n",
66 "<h2 style=\"color:blue;font-size:2em\">Pollution par chauffage</h2>"
67 ]
68 },
69 {
70 "cell_type": "code",
1e20780e 71 "execution_count": null,
fa8078f9
BA
72 "metadata": {
73 "collapsed": false
74 },
75 "outputs": [],
76 "source": [
69bcd8bc 77 "indices_ch = seq(as.Date(\"2015-01-18\"),as.Date(\"2015-01-24\"),\"days\")\n",
99f83c9a
BA
78 "p_ch_nn = computeForecast(data,indices_ch, \"Neighbors\", \"Neighbors\", simtype=\"mix\")\n",
79 "p_ch_pz = computeForecast(data, indices_ch, \"Persistence\", \"Zero\", same_day=TRUE)\n",
80 "p_ch_az = computeForecast(data, indices_ch, \"Average\", \"Zero\") #, memory=183)\n",
81 "#p_ch_zz = computeForecast(data, indices_ch, \"Zero\", \"Zero\")"
fa8078f9
BA
82 ]
83 },
84 {
85 "cell_type": "code",
1e20780e 86 "execution_count": null,
fa8078f9
BA
87 "metadata": {
88 "collapsed": false
89 },
1e20780e 90 "outputs": [],
fa8078f9 91 "source": [
99f83c9a
BA
92 "e_ch_nn = computeError(data, p_ch_nn)\n",
93 "e_ch_pz = computeError(data, p_ch_pz)\n",
94 "e_ch_az = computeError(data, p_ch_az)\n",
95 "#e_ch_zz = computeError(data, p_ch_zz)\n",
841b7f5a 96 "options(repr.plot.width=9, repr.plot.height=7)\n",
fa8078f9
BA
97 "plotError(list(e_ch_nn, e_ch_pz, e_ch_az), cols=c(1,2,colors()[258]))\n",
98 "\n",
99 "#Noir: neighbors, rouge: persistence, vert: moyenne"
100 ]
101 },
fa8078f9
BA
102 {
103 "cell_type": "code",
1e20780e 104 "execution_count": null,
fa8078f9
BA
105 "metadata": {
106 "collapsed": false
107 },
1e20780e 108 "outputs": [],
fa8078f9
BA
109 "source": [
110 "par(mfrow=c(1,2))\n",
111 "options(repr.plot.width=9, repr.plot.height=4)\n",
112 "plotPredReal(data, p_ch_nn, 3)\n",
113 "plotPredReal(data, p_ch_nn, 4)\n",
114 "\n",
115 "#Bleu: prévue, noir: réalisée"
116 ]
117 },
118 {
119 "cell_type": "markdown",
120 "metadata": {},
121 "source": [
122 "Prédictions d'autant plus lisses que le jour à prévoir est atypique (pollué)."
123 ]
124 },
125 {
126 "cell_type": "code",
1e20780e 127 "execution_count": null,
fa8078f9
BA
128 "metadata": {
129 "collapsed": false
130 },
1e20780e 131 "outputs": [],
fa8078f9
BA
132 "source": [
133 "par(mfrow=c(1,2))\n",
134 "plotPredReal(data, p_ch_az, 3)\n",
135 "plotPredReal(data, p_ch_az, 4)"
136 ]
137 },
fa8078f9
BA
138 {
139 "cell_type": "code",
1e20780e 140 "execution_count": null,
fa8078f9
BA
141 "metadata": {
142 "collapsed": false
143 },
1e20780e 144 "outputs": [],
fa8078f9
BA
145 "source": [
146 "par(mfrow=c(1,2))\n",
69bcd8bc
BA
147 "f3_ch = computeFilaments(data, p_ch_nn$getIndexInData(3), plot=TRUE)\n",
148 "f4_ch = computeFilaments(data, p_ch_nn$getIndexInData(4), plot=TRUE)"
fa8078f9
BA
149 ]
150 },
151 {
152 "cell_type": "code",
1e20780e 153 "execution_count": null,
fa8078f9
BA
154 "metadata": {
155 "collapsed": false
156 },
1e20780e 157 "outputs": [],
fa8078f9
BA
158 "source": [
159 "par(mfrow=c(2,2))\n",
841b7f5a 160 "options(repr.plot.width=9, repr.plot.height=7)\n",
69bcd8bc
BA
161 "plotFilamentsBox(data, f3_ch$indices)\n",
162 "plotFilamentsBox(data, f3_ch$indices+1)\n",
163 "plotFilamentsBox(data, f4_ch$indices)\n",
164 "plotFilamentsBox(data, f4_ch$indices+1)\n",
841b7f5a
BA
165 "\n",
166 "#En haut : jour 3 + lendemain (4) ; en bas : jour 4 + lendemain (5)\n",
167 "#À gauche : premières 24h ; à droite : 24h suivantes"
fa8078f9
BA
168 ]
169 },
170 {
171 "cell_type": "markdown",
172 "metadata": {},
173 "source": [
841b7f5a 174 "Dans les deux cas, un voisinage \"raisonnable\" est trouvé ; mais grande variabilité le lendemain \"pollué\"."
fa8078f9
BA
175 ]
176 },
177 {
178 "cell_type": "code",
179 "execution_count": null,
180 "metadata": {
181 "collapsed": false
182 },
183 "outputs": [],
184 "source": [
185 "par(mfrow=c(1,2))\n",
186 "options(repr.plot.width=9, repr.plot.height=4)\n",
69bcd8bc
BA
187 "plotRelativeVariability(data, f3_ch$indices)\n",
188 "plotRelativeVariability(data, f4_ch$indices)\n",
841b7f5a
BA
189 "\n",
190 "#Variabilité sur 60 courbes au hasard en rouge ; sur nos 60 voisins (+ lendemains) en noir"
191 ]
192 },
193 {
194 "cell_type": "markdown",
195 "metadata": {},
196 "source": [
99f83c9a 197 "Il faudrait que la courbe noire soit nettement plus basse que la courbe rouge."
841b7f5a
BA
198 ]
199 },
200 {
201 "cell_type": "code",
202 "execution_count": null,
203 "metadata": {
204 "collapsed": false
205 },
206 "outputs": [],
207 "source": [
208 "par(mfrow=c(1,3))\n",
fa8078f9
BA
209 "plotSimils(p_ch_nn, 3)\n",
210 "plotSimils(p_ch_nn, 4)\n",
841b7f5a 211 "plotSimils(p_ch_nn, 5)\n",
fa8078f9
BA
212 "\n",
213 "#Non pollué à gauche, pollué au milieu, autre pollué à droite"
214 ]
215 },
216 {
217 "cell_type": "markdown",
218 "metadata": {},
219 "source": [
220 "La plupart des poids très proches de zéro ; pas pour le jour 5 : autre type de jour, cf. ci-dessous."
221 ]
222 },
223 {
224 "cell_type": "code",
225 "execution_count": null,
226 "metadata": {
227 "collapsed": false
228 },
229 "outputs": [],
230 "source": [
231 "par(mfrow=c(1,2))\n",
232 "plotPredReal(data, p_ch_nn, 5)\n",
841b7f5a 233 "ignored <- computeFilaments(data, p_ch_nn$getIndexInData(5), plot=TRUE)"
fa8078f9
BA
234 ]
235 },
99f83c9a
BA
236 {
237 "cell_type": "code",
238 "execution_count": null,
239 "metadata": {
240 "collapsed": false
241 },
242 "outputs": [],
243 "source": [
244 "#Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite\n",
245 "p_ch_nn$getParams(3)$window\n",
246 "p_ch_nn$getParams(4)$window"
247 ]
248 },
fa8078f9
BA
249 {
250 "cell_type": "markdown",
251 "metadata": {},
252 "source": [
253 "<h2 style=\"color:blue;font-size:2em\">Pollution par épandage</h2>"
254 ]
255 },
256 {
257 "cell_type": "code",
258 "execution_count": null,
259 "metadata": {
260 "collapsed": false
261 },
262 "outputs": [],
263 "source": [
69bcd8bc 264 "indices_ep = seq(as.Date(\"2015-03-15\"),as.Date(\"2015-03-21\"),\"days\")\n",
99f83c9a
BA
265 "p_ep_nn = computeForecast(data,indices_ep, \"Neighbors\", \"Neighbors\", simtype=\"mix\")\n",
266 "p_ep_pz = computeForecast(data, indices_ep, \"Persistence\", \"Zero\", same_day=TRUE)\n",
267 "p_ep_az = computeForecast(data, indices_ep, \"Average\", \"Zero\") #, memory=183)\n",
268 "#p_ep_zz = computeForecast(data, indices_ep, \"Zero\", \"Zero\")"
fa8078f9
BA
269 ]
270 },
271 {
272 "cell_type": "code",
273 "execution_count": null,
274 "metadata": {
275 "collapsed": false
276 },
277 "outputs": [],
278 "source": [
99f83c9a
BA
279 "e_ep_nn = computeError(data, p_ep_nn)\n",
280 "e_ep_pz = computeError(data, p_ep_pz)\n",
281 "e_ep_az = computeError(data, p_ep_az)\n",
282 "#e_ep_zz = computeError(data, p_ep_zz)\n",
841b7f5a 283 "options(repr.plot.width=9, repr.plot.height=7)\n",
fa8078f9
BA
284 "plotError(list(e_ep_nn, e_ep_pz, e_ep_az), cols=c(1,2,colors()[258]))\n",
285 "\n",
286 "#Noir: neighbors, rouge: persistence, vert: moyenne"
287 ]
288 },
fa8078f9
BA
289 {
290 "cell_type": "code",
291 "execution_count": null,
292 "metadata": {
293 "collapsed": false
294 },
295 "outputs": [],
296 "source": [
297 "par(mfrow=c(1,2))\n",
298 "options(repr.plot.width=9, repr.plot.height=4)\n",
69bcd8bc
BA
299 "plotPredReal(data, p_ep_nn, 4)\n",
300 "plotPredReal(data, p_ep_nn, 6)\n",
fa8078f9
BA
301 "\n",
302 "#Bleu: prévue, noir: réalisée"
303 ]
304 },
305 {
306 "cell_type": "markdown",
307 "metadata": {},
308 "source": [
309 "À gauche un jour \"bien\" prévu, à droite le pic d'erreur (jour 6)."
310 ]
311 },
312 {
313 "cell_type": "code",
314 "execution_count": null,
315 "metadata": {
316 "collapsed": false
317 },
318 "outputs": [],
319 "source": [
320 "par(mfrow=c(1,2))\n",
99f83c9a
BA
321 "plotPredReal(data, p_ep_az, 4)\n",
322 "plotPredReal(data, p_ep_az, 6)"
fa8078f9
BA
323 ]
324 },
325 {
326 "cell_type": "code",
327 "execution_count": null,
328 "metadata": {
329 "collapsed": false
330 },
331 "outputs": [],
332 "source": [
333 "par(mfrow=c(1,2))\n",
69bcd8bc
BA
334 "f4_ep = computeFilaments(data, p_ep_nn$getIndexInData(4), plot=TRUE)\n",
335 "f6_ep = computeFilaments(data, p_ep_nn$getIndexInData(6), plot=TRUE)"
336 ]
337 },
338 {
339 "cell_type": "code",
340 "execution_count": null,
341 "metadata": {
342 "collapsed": false
343 },
344 "outputs": [],
345 "source": [
346 "par(mfrow=c(2,2))\n",
347 "options(repr.plot.width=9, repr.plot.height=7)\n",
348 "plotFilamentsBox(data, f4_ep$indices)\n",
349 "plotFilamentsBox(data, f4_ep$indices+1)\n",
350 "plotFilamentsBox(data, f6_ep$indices)\n",
351 "plotFilamentsBox(data, f6_ep$indices+1)\n",
352 "\n",
353 "#En haut : jour 4 + lendemain (5) ; en bas : jour 6 + lendemain (7)\n",
354 "#À gauche : premières 24h ; à droite : 24h suivantes"
355 ]
356 },
357 {
358 "cell_type": "markdown",
359 "metadata": {},
360 "source": [
99f83c9a 361 "\"Voisinages\" catastrophiques : les jours 4 et 6 sont trop atypiques."
fa8078f9
BA
362 ]
363 },
364 {
365 "cell_type": "code",
366 "execution_count": null,
367 "metadata": {
368 "collapsed": false
369 },
370 "outputs": [],
371 "source": [
372 "par(mfrow=c(1,2))\n",
69bcd8bc
BA
373 "options(repr.plot.width=9, repr.plot.height=4)\n",
374 "plotRelativeVariability(data, f4_ep$indices)\n",
375 "plotRelativeVariability(data, f6_ep$indices)\n",
376 "\n",
377 "#Variabilité sur 60 courbes au hasard en rouge ; sur nos 60 voisins (+ lendemains) en noir"
fa8078f9
BA
378 ]
379 },
380 {
381 "cell_type": "markdown",
382 "metadata": {},
383 "source": [
99f83c9a 384 "Il faudrait que la courbe noire soit nettement plus basse que la courbe rouge."
69bcd8bc
BA
385 ]
386 },
387 {
388 "cell_type": "code",
389 "execution_count": null,
390 "metadata": {
391 "collapsed": false
392 },
393 "outputs": [],
394 "source": [
395 "par(mfrow=c(1,2))\n",
396 "plotSimils(p_ep_nn, 4)\n",
397 "plotSimils(p_ep_nn, 6)"
fa8078f9
BA
398 ]
399 },
400 {
401 "cell_type": "markdown",
402 "metadata": {},
403 "source": [
69bcd8bc
BA
404 "Poids très concentrés près de zéro pour les prédictions avec peu de voisins."
405 ]
406 },
99f83c9a
BA
407 {
408 "cell_type": "code",
409 "execution_count": null,
410 "metadata": {
411 "collapsed": false
412 },
413 "outputs": [],
414 "source": [
415 "#Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite\n",
416 "p_ep_nn$getParams(4)$window\n",
417 "p_ep_nn$getParams(6)$window"
418 ]
419 },
69bcd8bc
BA
420 {
421 "cell_type": "markdown",
422 "metadata": {},
423 "source": [
424 "<h2 style=\"color:blue;font-size:2em\">Semaine non polluée</h2>"
fa8078f9
BA
425 ]
426 },
427 {
428 "cell_type": "code",
429 "execution_count": null,
430 "metadata": {
431 "collapsed": false
432 },
433 "outputs": [],
434 "source": [
69bcd8bc 435 "indices_np = seq(as.Date(\"2015-04-26\"),as.Date(\"2015-05-02\"),\"days\")\n",
99f83c9a
BA
436 "p_np_nn = computeForecast(data,indices_np, \"Neighbors\", \"Neighbors\", simtype=\"mix\")\n",
437 "p_np_pz = computeForecast(data, indices_np, \"Persistence\", \"Zero\", same_day=FALSE)\n",
438 "p_np_az = computeForecast(data, indices_np, \"Average\", \"Zero\") #, memory=183)\n",
439 "#p_np_zz = computeForecast(data, indices_np, \"Zero\", \"Zero\")"
fa8078f9
BA
440 ]
441 },
442 {
443 "cell_type": "code",
444 "execution_count": null,
445 "metadata": {
446 "collapsed": false
447 },
448 "outputs": [],
449 "source": [
99f83c9a
BA
450 "e_np_nn = computeError(data, p_np_nn)\n",
451 "e_np_pz = computeError(data, p_np_pz)\n",
452 "e_np_az = computeError(data, p_np_az)\n",
453 "#e_np_zz = computeError(data, p_np_zz)\n",
69bcd8bc 454 "options(repr.plot.width=9, repr.plot.height=7)\n",
fa8078f9
BA
455 "plotError(list(e_np_nn, e_np_pz, e_np_az), cols=c(1,2,colors()[258]))\n",
456 "\n",
457 "#Noir: neighbors, rouge: persistence, vert: moyenne"
458 ]
459 },
460 {
461 "cell_type": "markdown",
462 "metadata": {},
463 "source": [
464 "Performances des méthodes \"Average\" et \"Neighbors\" comparables ; mauvais résultats pour la persistence."
465 ]
466 },
467 {
468 "cell_type": "code",
469 "execution_count": null,
470 "metadata": {
471 "collapsed": false
472 },
473 "outputs": [],
474 "source": [
475 "par(mfrow=c(1,2))\n",
476 "options(repr.plot.width=9, repr.plot.height=4)\n",
99f83c9a 477 "plotPredReal(data, p_np_nn, 5)\n",
fa8078f9
BA
478 "plotPredReal(data, p_np_nn, 6)\n",
479 "\n",
480 "#Bleu: prévue, noir: réalisée"
481 ]
482 },
fa8078f9
BA
483 {
484 "cell_type": "code",
485 "execution_count": null,
486 "metadata": {
487 "collapsed": false
488 },
489 "outputs": [],
490 "source": [
491 "par(mfrow=c(1,2))\n",
99f83c9a 492 "plotPredReal(data, p_np_az, 5)\n",
fa8078f9
BA
493 "plotPredReal(data, p_np_az, 6)"
494 ]
495 },
fa8078f9
BA
496 {
497 "cell_type": "code",
498 "execution_count": null,
499 "metadata": {
500 "collapsed": false
501 },
502 "outputs": [],
503 "source": [
504 "par(mfrow=c(1,2))\n",
99f83c9a 505 "f5_np = computeFilaments(data, p_np_nn$getIndexInData(5), plot=TRUE)\n",
69bcd8bc
BA
506 "f6_np = computeFilaments(data, p_np_nn$getIndexInData(6), plot=TRUE)"
507 ]
508 },
509 {
510 "cell_type": "code",
511 "execution_count": null,
512 "metadata": {
513 "collapsed": false
514 },
515 "outputs": [],
516 "source": [
517 "par(mfrow=c(2,2))\n",
518 "options(repr.plot.width=9, repr.plot.height=7)\n",
99f83c9a
BA
519 "plotFilamentsBox(data, f5_np$indices)\n",
520 "plotFilamentsBox(data, f5_np$indices+1)\n",
69bcd8bc
BA
521 "plotFilamentsBox(data, f6_np$indices)\n",
522 "plotFilamentsBox(data, f6_np$indices+1)\n",
523 "\n",
524 "#En haut : jour 3 + lendemain (4) ; en bas : jour 6 + lendemain (7)\n",
525 "#À gauche : premières 24h ; à droite : 24h suivantes"
526 ]
527 },
528 {
529 "cell_type": "markdown",
530 "metadata": {},
531 "source": [
532 "Jours \"typiques\", donc beaucoup de voisins. En revanche les lendemains des jours similaires sont très variables."
533 ]
534 },
535 {
536 "cell_type": "code",
537 "execution_count": null,
538 "metadata": {
539 "collapsed": false
540 },
541 "outputs": [],
542 "source": [
543 "par(mfrow=c(1,2))\n",
544 "options(repr.plot.width=9, repr.plot.height=4)\n",
99f83c9a 545 "plotRelativeVariability(data, f5_np$indices)\n",
69bcd8bc
BA
546 "plotRelativeVariability(data, f6_np$indices)\n",
547 "\n",
548 "#Variabilité sur 60 courbes au hasard en rouge ; sur nos 60 voisins (+ lendemains) en noir"
fa8078f9
BA
549 ]
550 },
551 {
552 "cell_type": "markdown",
553 "metadata": {},
554 "source": [
99f83c9a 555 "Bonne situation : la courbe noire est toujours assez nettement en dessous."
fa8078f9
BA
556 ]
557 },
558 {
559 "cell_type": "code",
560 "execution_count": null,
561 "metadata": {
562 "collapsed": false
563 },
564 "outputs": [],
565 "source": [
99f83c9a
BA
566 "par(mfrow=c(1,2))\n",
567 "plotSimils(p_np_nn, 5)\n",
fa8078f9
BA
568 "plotSimils(p_np_nn, 6)"
569 ]
570 },
571 {
572 "cell_type": "markdown",
573 "metadata": {},
574 "source": [
575 "Répartition idéale des poids : quelques uns au-delà de 0.3-0.4, le reste très proche de zéro."
576 ]
577 },
99f83c9a
BA
578 {
579 "cell_type": "code",
580 "execution_count": null,
581 "metadata": {
582 "collapsed": false
583 },
584 "outputs": [],
585 "source": [
586 "#Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite\n",
587 "p_np_nn$getParams(5)$window\n",
588 "p_np_nn$getParams(6)$window"
589 ]
590 },
fa8078f9
BA
591 {
592 "cell_type": "markdown",
593 "metadata": {},
594 "source": [
595 "## Bilan\n",
596 "\n",
597 "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",
598 "\n",
599 "Comment améliorer la méthode ?"
600 ]
601 }
602 ],
603 "metadata": {
604 "kernelspec": {
605 "display_name": "R",
606 "language": "R",
607 "name": "ir"
608 },
609 "language_info": {
610 "codemirror_mode": "r",
611 "file_extension": ".r",
612 "mimetype": "text/x-r-source",
613 "name": "R",
614 "pygments_lexer": "r",
f17665c7 615 "version": "3.2.3"
fa8078f9
BA
616 }
617 },
618 "nbformat": 4,
619 "nbformat_minor": 2
620}