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