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