Commit | Line | Data |
---|---|---|
63ff1ecb | 1 | ----- |
ff5df8e3 | 2 | <h2>Introduction</h2> |
63ff1ecb BA |
3 | |
4 | J'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 | ||
11 | J'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 : | |
13 | prédiction basée sur les poids calculés). | |
14 | ||
15 | Ensuite j'affiche les erreurs, quelques courbes prévues/mesurées, quelques filaments puis les | |
16 | histogrammes de quelques poids. Concernant les graphes de filaments, la moitié gauche du graphe | |
17 | correspond aux jours similaires au jour courant, tandis que la moitié droite affiche les | |
18 | lendemains : ce sont donc les voisinages tels qu'utilisés dans l'algorithme. | |
19 | ||
20 | <% | |
21 | list_titles = ['Pollution par chauffage', 'Pollution par épandage', 'Semaine non polluée'] | |
22 | list_indices = ['indices_ch', 'indices_ep', 'indices_np'] | |
23 | %> | |
63ff1ecb | 24 | -----r |
63ff1ecb BA |
25 | library(talweg) |
26 | ||
d09b09b0 BA |
27 | P = ${P} #instant de prévision |
28 | H = ${H} #horizon (en heures) | |
29 | ||
63ff1ecb BA |
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")) | |
0c1bf707 | 32 | data = 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 | |
35 | indices_ch = seq(as.Date("2015-01-18"),as.Date("2015-01-24"),"days") | |
36 | indices_ep = seq(as.Date("2015-03-15"),as.Date("2015-03-21"),"days") | |
37 | indices_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 | 43 | p_nn_exo = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", |
d09b09b0 | 44 | horizon=H, simtype="exo") |
0c1bf707 | 45 | p_nn_mix = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", |
d09b09b0 | 46 | horizon=H, simtype="mix") |
0c1bf707 | 47 | p_az = computeForecast(data, ${list_indices[i]}, "Average", "Zero", |
d09b09b0 | 48 | horizon=H) |
0c1bf707 | 49 | p_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 |
52 | e_nn_exo = computeError(data, p_nn_exo, H) |
53 | e_nn_mix = computeError(data, p_nn_mix, H) | |
54 | e_az = computeError(data, p_az, H) | |
55 | e_pz = computeError(data, p_pz, H) | |
63ff1ecb BA |
56 | options(repr.plot.width=9, repr.plot.height=7) |
57 | plotError(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 | |
61 | i_np = which.min(e_nn_exo$abs$indices) | |
62 | i_p = which.max(e_nn_exo$abs$indices) | |
63ff1ecb BA |
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 | ||
ff5df8e3 | 76 | # Bleu: prévue, noir: réalisée |
63ff1ecb BA |
77 | -----r |
78 | par(mfrow=c(1,2)) | |
79 | f_np_exo = computeFilaments(data, p_nn_exo, i_np, plot=TRUE); title(paste("Filaments nn exo day",i_np)) | |
80 | f_p_exo = computeFilaments(data, p_nn_exo, i_p, plot=TRUE); title(paste("Filaments nn exo day",i_p)) | |
81 | ||
82 | f_np_mix = computeFilaments(data, p_nn_mix, i_np, plot=TRUE); title(paste("Filaments nn mix day",i_np)) | |
83 | f_p_mix = computeFilaments(data, p_nn_mix, i_p, plot=TRUE); title(paste("Filaments nn mix day",i_p)) | |
63ff1ecb BA |
84 | -----r |
85 | par(mfrow=c(1,2)) | |
86 | plotFilamentsBox(data, f_np_exo); title(paste("FilBox nn exo day",i_np)) | |
87 | plotFilamentsBox(data, f_p_exo); title(paste("FilBox nn exo day",i_p)) | |
88 | ||
89 | plotFilamentsBox(data, f_np_mix); title(paste("FilBox nn mix day",i_np)) | |
90 | plotFilamentsBox(data, f_p_mix); title(paste("FilBox nn mix day",i_p)) | |
63ff1ecb BA |
91 | -----r |
92 | par(mfrow=c(1,2)) | |
93 | plotRelVar(data, f_np_exo); title(paste("StdDev nn exo day",i_np)) | |
94 | plotRelVar(data, f_p_exo); title(paste("StdDev nn exo day",i_p)) | |
95 | ||
96 | plotRelVar(data, f_np_mix); title(paste("StdDev nn mix day",i_np)) | |
97 | plotRelVar(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 |
101 | par(mfrow=c(1,2)) | |
102 | plotSimils(p_nn_exo, i_np); title(paste("Weights nn exo day",i_np)) | |
103 | plotSimils(p_nn_exo, i_p); title(paste("Weights nn exo day",i_p)) | |
104 | ||
105 | plotSimils(p_nn_mix, i_np); title(paste("Weights nn mix day",i_np)) | |
d4841a3f | 106 | plotSimils(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 |
111 | p_nn_exo$getParams(i_np)$window |
112 | p_nn_exo$getParams(i_p)$window | |
113 | ||
114 | p_nn_mix$getParams(i_np)$window | |
115 | p_nn_mix$getParams(i_p)$window | |
63ff1ecb | 116 | % endfor |
63ff1ecb | 117 | ----- |
ff5df8e3 | 118 | <h2>Bilan</h2> |
63ff1ecb BA |
119 | |
120 | Problème difficile : on ne fait guère mieux qu'une naïve moyenne des lendemains des jours | |
121 | similaires dans le passé, ce qui n'est pas loin de prédire une série constante égale à la | |
122 | dernière valeur observée (méthode "zéro"). La persistence donne parfois de bons résultats | |
123 | mais est trop instable (sensibilité à l'argument <code>same_day</code>). | |
124 | ||
125 | Comment améliorer la méthode ? |