improvements, updated report
[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",
e5aa669a 38 "J'ai systématiquement comparé à deux autres approches : la persistence et la répétition de la dernière valeur observée (sur tout l'horizon, donc \"zero\") ; à 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
BA
55 "p_ch_pz = getForecast(data, indices, \"Persistence\", \"Zero\", same_day=TRUE)\n",
56 "#p_ch_az = getForecast(data, indices, \"Average\", \"Zero\")\n",
57 "p_ch_zz = getForecast(data, indices, \"Zero\", \"Zero\")\n",
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",
e5aa669a
BA
71 "#e_ch_az = getError(data, p_ch_az)\n",
72 "e_ch_zz = getError(data, p_ch_zz)\n",
73 "#e_ch_l = getError(data, p_ch_l)\n",
09cf9c19 74 "options(repr.plot.width=9, repr.plot.height=6)\n",
e5aa669a 75 "plotError(list(e_ch_nn, e_ch_pz, e_ch_zz), cols=c(1,2,colors()[258]))\n",
56999439 76 "\n",
e5aa669a 77 "#Noir: neighbors, rouge: persistence, vert: zero"
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
BA
183 "p_ep_pz = getForecast(data, indices, \"Persistence\", \"Zero\", same_day=TRUE)\n",
184 "#p_ep_az = getForecast(data, indices, \"Average\", \"Zero\")\n",
e030a6e3 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",
e5aa669a
BA
199 "#e_ep_az = getError(data, p_ep_az)\n",
200 "e_ep_zz = getError(data, p_ep_zz)\n",
201 "#e_ep_l = getError(data, p_ep_l)\n",
09cf9c19 202 "options(repr.plot.width=9, repr.plot.height=6)\n",
e5aa669a 203 "plotError(list(e_ep_nn, e_ep_pz, e_ep_zz), cols=c(1,2,colors()[258]))\n",
56999439 204 "\n",
e5aa669a 205 "#Noir: neighbors, rouge: persistence, vert: zero"
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
BA
225 "plotPredReal(data, p_ep_nn, 4)\n",
226 "plotPredReal(data, p_ep_nn, 6)"
227 ]
228 },
229 {
230 "cell_type": "markdown",
231 "metadata": {},
232 "source": [
233 "À gauche un jour \"bien\" prévu, à droite le pic d'erreur (jour 6)."
09cf9c19
BA
234 ]
235 },
236 {
237 "cell_type": "code",
238 "execution_count": null,
239 "metadata": {
240 "collapsed": false
241 },
242 "outputs": [],
243 "source": [
244 "par(mfrow=c(1,2))\n",
56999439
BA
245 "plotFilaments(data, p_ep_nn$getIndexInData(4))\n",
246 "plotFilaments(data, p_ep_nn$getIndexInData(6))"
09cf9c19
BA
247 ]
248 },
249 {
250 "cell_type": "code",
251 "execution_count": null,
252 "metadata": {
253 "collapsed": false
254 },
255 "outputs": [],
256 "source": [
56999439 257 "par(mfrow=c(1,2))\n",
09cf9c19 258 "plotSimils(p_ep_nn, 4)\n",
56999439
BA
259 "plotSimils(p_ep_nn, 6)"
260 ]
261 },
262 {
263 "cell_type": "markdown",
264 "metadata": {},
265 "source": [
266 "Même observation concernant les poids : concentrés près de zéro pour les prédictions avec peu de voisins."
09cf9c19
BA
267 ]
268 },
269 {
270 "cell_type": "markdown",
271 "metadata": {},
272 "source": [
273 "## Semaine non polluée"
274 ]
275 },
276 {
277 "cell_type": "code",
278 "execution_count": null,
279 "metadata": {
280 "collapsed": false
281 },
282 "outputs": [],
283 "source": [
e030a6e3
BA
284 "indices = seq(as.Date(\"2015-04-26\"),as.Date(\"2015-05-02\"),\"days\")\n",
285 "p_np_nn = getForecast(data,indices,\"Neighbors\",\"Neighbors\",simtype=\"mix\",same_season=FALSE,mix_strategy=\"mult\")\n",
e5aa669a
BA
286 "p_np_pz = getForecast(data, indices, \"Persistence\", \"Zero\", same_day=FALSE)\n",
287 "#p_np_az = getForecast(data, indices, \"Average\", \"Zero\")\n",
e030a6e3 288 "p_np_zz = getForecast(data, indices, \"Zero\", \"Zero\")\n",
e5aa669a 289 "#p_np_l = getForecast(data, indices, \"Level\", same_day=FALSE)"
09cf9c19
BA
290 ]
291 },
292 {
293 "cell_type": "code",
294 "execution_count": null,
295 "metadata": {
296 "collapsed": false
297 },
298 "outputs": [],
299 "source": [
e030a6e3
BA
300 "e_np_nn = getError(data, p_np_nn)\n",
301 "e_np_pz = getError(data, p_np_pz)\n",
e5aa669a
BA
302 "#e_np_az = getError(data, p_np_az)\n",
303 "e_np_zz = getError(data, p_np_zz)\n",
304 "#e_np_l = getError(data, p_np_l)\n",
09cf9c19 305 "options(repr.plot.width=9, repr.plot.height=6)\n",
e5aa669a 306 "plotError(list(e_np_nn, e_np_pz, e_np_zz), cols=c(1,2,colors()[258]))\n",
56999439 307 "\n",
e5aa669a 308 "#Noir: neighbors, rouge: persistence, vert: zero"
56999439
BA
309 ]
310 },
311 {
312 "cell_type": "markdown",
313 "metadata": {},
314 "source": [
e5aa669a 315 "Performances des méthodes \"Zero\" et \"Neighbors\" comparables ; mauvais résultats pour la persistence."
09cf9c19
BA
316 ]
317 },
318 {
319 "cell_type": "code",
320 "execution_count": null,
321 "metadata": {
322 "collapsed": false
323 },
324 "outputs": [],
325 "source": [
326 "par(mfrow=c(1,2))\n",
327 "options(repr.plot.width=9, repr.plot.height=4)\n",
328 "plotPredReal(data, p_np_nn, 3)\n",
56999439
BA
329 "plotPredReal(data, p_np_nn, 6)"
330 ]
331 },
332 {
333 "cell_type": "markdown",
334 "metadata": {},
335 "source": [
336 "Les \"bonnes\" prédictions (à gauche) sont tout de même trop lissées."
09cf9c19
BA
337 ]
338 },
339 {
340 "cell_type": "code",
341 "execution_count": null,
342 "metadata": {
343 "collapsed": false
344 },
345 "outputs": [],
346 "source": [
347 "par(mfrow=c(1,2))\n",
348 "plotFilaments(data, p_np_nn$getIndexInData(3))\n",
56999439
BA
349 "plotFilaments(data, p_np_nn$getIndexInData(6))"
350 ]
351 },
352 {
353 "cell_type": "markdown",
354 "metadata": {},
355 "source": [
356 "Jours \"typiques\", donc beaucoup de voisins."
09cf9c19
BA
357 ]
358 },
359 {
360 "cell_type": "code",
361 "execution_count": null,
362 "metadata": {
363 "collapsed": false
364 },
365 "outputs": [],
366 "source": [
367 "par(mfrow=c(1,3))\n",
368 "plotSimils(p_np_nn, 3)\n",
369 "plotSimils(p_np_nn, 4)\n",
56999439
BA
370 "plotSimils(p_np_nn, 6)"
371 ]
372 },
373 {
374 "cell_type": "markdown",
375 "metadata": {},
376 "source": [
377 "Répartition idéale des poids : quelques uns au-delà de 0.3-0.4, le reste très proche de zéro."
378 ]
379 },
380 {
381 "cell_type": "markdown",
382 "metadata": {},
383 "source": [
384 "## Bilan\n",
385 "\n",
e5aa669a 386 "Problème difficile : on ne fait guère mieux qu'une naïve moyenne des lendemains des jours similaires dans le passé, ce qui est à peu près équivalent à 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
387 "\n",
388 "Comment améliorer la méthode ?"
09cf9c19
BA
389 ]
390 }
391 ],
392 "metadata": {
393 "kernelspec": {
394 "display_name": "R",
395 "language": "R",
396 "name": "ir"
397 },
398 "language_info": {
399 "codemirror_mode": "r",
400 "file_extension": ".r",
401 "mimetype": "text/x-r-source",
402 "name": "R",
403 "pygments_lexer": "r",
404 "version": "3.3.2"
405 }
406 },
407 "nbformat": 4,
408 "nbformat_minor": 2
409}