first tests for Neighbors2 after debug; TODO: some missing forecasts
[talweg.git] / reports / report.gj
CommitLineData
63ff1ecb 1-----
ff5df8e3 2<h2>Introduction</h2>
63ff1ecb
BA
3
4J'ai fait quelques essais dans différentes configurations pour la méthode "Neighbors"
5e838b3e 5(la seule dont on a parlé) et sa variante récente appelée pour l'instant "Neighbors2".<br>
63ff1ecb 6
5e838b3e 7 * simtype="exo", "endo" ou "mix" : type de similarités (fenêtre optimisée par VC)
63ff1ecb
BA
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%>
63ff1ecb 24-----r
63ff1ecb
BA
25library(talweg)
26
d09b09b0
BA
27P = ${P} #instant de prévision
28H = ${H} #horizon (en heures)
29
63ff1ecb
BA
30ts_data = read.csv(system.file("extdata","pm10_mesures_H_loc_report.csv",package="talweg"))
31exo_data = read.csv(system.file("extdata","meteo_extra_noNAs.csv",package="talweg"))
0c1bf707 32data = getData(ts_data, exo_data, input_tz = "Europe/Paris", working_tz="Europe/Paris",
d09b09b0 33 predict_at=P) #predict from P+1 to P+H included
63ff1ecb
BA
34
35indices_ch = seq(as.Date("2015-01-18"),as.Date("2015-01-24"),"days")
36indices_ep = seq(as.Date("2015-03-15"),as.Date("2015-03-21"),"days")
37indices_np = seq(as.Date("2015-04-26"),as.Date("2015-05-02"),"days")
d4841a3f 38
ff5df8e3 39% for i in range(3):
63ff1ecb 40-----
ff5df8e3 41<h2 style="color:blue;font-size:2em">${list_titles[i]}</h2>
63ff1ecb 42-----r
0c1bf707 43p_nn_exo = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors",
d09b09b0 44 horizon=H, simtype="exo")
0c1bf707 45p_nn_mix = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors",
d09b09b0 46 horizon=H, simtype="mix")
0c1bf707 47p_az = computeForecast(data, ${list_indices[i]}, "Average", "Zero",
d09b09b0 48 horizon=H)
0c1bf707 49p_pz = computeForecast(data, ${list_indices[i]}, "Persistence", "Zero",
55639673 50 horizon=${H}, same_day=${'TRUE' if loop.index < 2 else 'FALSE'})
63ff1ecb 51-----r
d09b09b0
BA
52e_nn_exo = computeError(data, p_nn_exo, H)
53e_nn_mix = computeError(data, p_nn_mix, H)
54e_az = computeError(data, p_az, H)
55e_pz = computeError(data, p_pz, H)
63ff1ecb
BA
56options(repr.plot.width=9, repr.plot.height=7)
57plotError(list(e_nn_mix, e_pz, e_az, e_nn_exo), cols=c(1,2,colors()[258], 4))
58
ff5df8e3 59# Noir: neighbors_mix, bleu: neighbors_exo, vert: moyenne, rouge: persistence
63ff1ecb
BA
60
61i_np = which.min(e_nn_exo$abs$indices)
62i_p = which.max(e_nn_exo$abs$indices)
63ff1ecb
BA
63-----r
64options(repr.plot.width=9, repr.plot.height=4)
65par(mfrow=c(1,2))
66
67plotPredReal(data, p_nn_exo, i_np); title(paste("PredReal nn exo day",i_np))
68plotPredReal(data, p_nn_exo, i_p); title(paste("PredReal nn exo day",i_p))
69
70plotPredReal(data, p_nn_mix, i_np); title(paste("PredReal nn mix day",i_np))
71plotPredReal(data, p_nn_mix, i_p); title(paste("PredReal nn mix day",i_p))
72
73plotPredReal(data, p_az, i_np); title(paste("PredReal az day",i_np))
74plotPredReal(data, p_az, i_p); title(paste("PredReal az day",i_p))
75
ff5df8e3 76# Bleu: prévue, noir: réalisée
63ff1ecb
BA
77-----r
78par(mfrow=c(1,2))
79f_np_exo = computeFilaments(data, p_nn_exo, i_np, plot=TRUE); title(paste("Filaments nn exo day",i_np))
80f_p_exo = computeFilaments(data, p_nn_exo, i_p, plot=TRUE); title(paste("Filaments nn exo day",i_p))
81
82f_np_mix = computeFilaments(data, p_nn_mix, i_np, plot=TRUE); title(paste("Filaments nn mix day",i_np))
83f_p_mix = computeFilaments(data, p_nn_mix, i_p, plot=TRUE); title(paste("Filaments nn mix day",i_p))
63ff1ecb
BA
84-----r
85par(mfrow=c(1,2))
86plotFilamentsBox(data, f_np_exo); title(paste("FilBox nn exo day",i_np))
87plotFilamentsBox(data, f_p_exo); title(paste("FilBox nn exo day",i_p))
88
89plotFilamentsBox(data, f_np_mix); title(paste("FilBox nn mix day",i_np))
90plotFilamentsBox(data, f_p_mix); title(paste("FilBox nn mix day",i_p))
63ff1ecb
BA
91-----r
92par(mfrow=c(1,2))
93plotRelVar(data, f_np_exo); title(paste("StdDev nn exo day",i_np))
94plotRelVar(data, f_p_exo); title(paste("StdDev nn exo day",i_p))
95
96plotRelVar(data, f_np_mix); title(paste("StdDev nn mix day",i_np))
97plotRelVar(data, f_p_mix); title(paste("StdDev nn mix day",i_p))
98
ff5df8e3 99# Variabilité globale en rouge ; sur les 60 voisins (+ lendemains) en noir
63ff1ecb
BA
100-----r
101par(mfrow=c(1,2))
102plotSimils(p_nn_exo, i_np); title(paste("Weights nn exo day",i_np))
103plotSimils(p_nn_exo, i_p); title(paste("Weights nn exo day",i_p))
104
105plotSimils(p_nn_mix, i_np); title(paste("Weights nn mix day",i_np))
d4841a3f 106plotSimils(p_nn_mix, i_p); title(paste("Weights nn mix day",i_p))
63ff1ecb 107
ff5df8e3 108# - pollué à gauche, + pollué à droite
63ff1ecb 109-----r
ff5df8e3 110# Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite
63ff1ecb
BA
111p_nn_exo$getParams(i_np)$window
112p_nn_exo$getParams(i_p)$window
113
114p_nn_mix$getParams(i_np)$window
115p_nn_mix$getParams(i_p)$window
63ff1ecb 116% endfor
63ff1ecb 117-----
ff5df8e3 118<h2>Bilan</h2>
63ff1ecb
BA
119
120Problème difficile : on ne fait guère mieux qu'une naïve moyenne des lendemains des jours
121similaires dans le passé, ce qui n'est pas loin de prédire une série constante égale à la
122dernière valeur observée (méthode "zéro"). La persistence donne parfois de bons résultats
123mais est trop instable (sensibilité à l'argument <code>same_day</code>).
124
125Comment améliorer la méthode ?