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