'update'
[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"
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%>
63ff1ecb 24-----r
63ff1ecb
BA
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", predict_at=13)
30
31indices_ch = seq(as.Date("2015-01-18"),as.Date("2015-01-24"),"days")
32indices_ep = seq(as.Date("2015-03-15"),as.Date("2015-03-21"),"days")
33indices_np = seq(as.Date("2015-04-26"),as.Date("2015-05-02"),"days")
d4841a3f
BA
34
35H = 17 #predict from 8am to 12pm
ff5df8e3 36% for i in range(3):
63ff1ecb 37-----
ff5df8e3 38<h2 style="color:blue;font-size:2em">${list_titles[i]}</h2>
63ff1ecb 39-----r
ff5df8e3
BA
40p_nn_exo = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", simtype="exo", horizon=H)
41p_nn_mix = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", simtype="mix", horizon=H)
42p_az = computeForecast(data, ${list_indices[i]}, "Average", "Zero", horizon=H) #, memory=183)
43p_pz = computeForecast(data, ${list_indices[i]}, "Persistence", "Zero", horizon=H, same_day=TRUE)
63ff1ecb 44-----r
d4841a3f
BA
45e_nn_exo = computeError(data, p_nn_exo, H)
46e_nn_mix = computeError(data, p_nn_mix, H)
47e_az = computeError(data, p_az, H)
48e_pz = computeError(data, p_pz, H)
63ff1ecb
BA
49options(repr.plot.width=9, repr.plot.height=7)
50plotError(list(e_nn_mix, e_pz, e_az, e_nn_exo), cols=c(1,2,colors()[258], 4))
51
ff5df8e3 52# Noir: neighbors_mix, bleu: neighbors_exo, vert: moyenne, rouge: persistence
63ff1ecb
BA
53
54i_np = which.min(e_nn_exo$abs$indices)
55i_p = which.max(e_nn_exo$abs$indices)
63ff1ecb
BA
56-----r
57options(repr.plot.width=9, repr.plot.height=4)
58par(mfrow=c(1,2))
59
60plotPredReal(data, p_nn_exo, i_np); title(paste("PredReal nn exo day",i_np))
61plotPredReal(data, p_nn_exo, i_p); title(paste("PredReal nn exo day",i_p))
62
63plotPredReal(data, p_nn_mix, i_np); title(paste("PredReal nn mix day",i_np))
64plotPredReal(data, p_nn_mix, i_p); title(paste("PredReal nn mix day",i_p))
65
66plotPredReal(data, p_az, i_np); title(paste("PredReal az day",i_np))
67plotPredReal(data, p_az, i_p); title(paste("PredReal az day",i_p))
68
ff5df8e3 69# Bleu: prévue, noir: réalisée
63ff1ecb
BA
70-----r
71par(mfrow=c(1,2))
72f_np_exo = computeFilaments(data, p_nn_exo, i_np, plot=TRUE); title(paste("Filaments nn exo day",i_np))
73f_p_exo = computeFilaments(data, p_nn_exo, i_p, plot=TRUE); title(paste("Filaments nn exo day",i_p))
74
75f_np_mix = computeFilaments(data, p_nn_mix, i_np, plot=TRUE); title(paste("Filaments nn mix day",i_np))
76f_p_mix = computeFilaments(data, p_nn_mix, i_p, plot=TRUE); title(paste("Filaments nn mix day",i_p))
63ff1ecb
BA
77-----r
78par(mfrow=c(1,2))
79plotFilamentsBox(data, f_np_exo); title(paste("FilBox nn exo day",i_np))
80plotFilamentsBox(data, f_p_exo); title(paste("FilBox nn exo day",i_p))
81
82plotFilamentsBox(data, f_np_mix); title(paste("FilBox nn mix day",i_np))
83plotFilamentsBox(data, f_p_mix); title(paste("FilBox nn mix day",i_p))
63ff1ecb
BA
84-----r
85par(mfrow=c(1,2))
86plotRelVar(data, f_np_exo); title(paste("StdDev nn exo day",i_np))
87plotRelVar(data, f_p_exo); title(paste("StdDev nn exo day",i_p))
88
89plotRelVar(data, f_np_mix); title(paste("StdDev nn mix day",i_np))
90plotRelVar(data, f_p_mix); title(paste("StdDev nn mix day",i_p))
91
ff5df8e3 92# Variabilité globale en rouge ; sur les 60 voisins (+ lendemains) en noir
63ff1ecb
BA
93-----r
94par(mfrow=c(1,2))
95plotSimils(p_nn_exo, i_np); title(paste("Weights nn exo day",i_np))
96plotSimils(p_nn_exo, i_p); title(paste("Weights nn exo day",i_p))
97
98plotSimils(p_nn_mix, i_np); title(paste("Weights nn mix day",i_np))
d4841a3f 99plotSimils(p_nn_mix, i_p); title(paste("Weights nn mix day",i_p))
63ff1ecb 100
ff5df8e3 101# - pollué à gauche, + pollué à droite
63ff1ecb 102-----r
ff5df8e3 103# Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite
63ff1ecb
BA
104p_nn_exo$getParams(i_np)$window
105p_nn_exo$getParams(i_p)$window
106
107p_nn_mix$getParams(i_np)$window
108p_nn_mix$getParams(i_p)$window
63ff1ecb 109% endfor
63ff1ecb 110-----
ff5df8e3 111<h2>Bilan</h2>
63ff1ecb
BA
112
113Problème difficile : on ne fait guère mieux qu'une naïve moyenne des lendemains des jours
114similaires dans le passé, ce qui n'est pas loin de prédire une série constante égale à la
115dernière valeur observée (méthode "zéro"). La persistence donne parfois de bons résultats
116mais est trop instable (sensibilité à l'argument <code>same_day</code>).
117
118Comment améliorer la méthode ?