| 1 | ----- |
| 2 | <h2>Introduction</h2> |
| 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 | %> |
| 24 | -----r |
| 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") |
| 34 | % for i in range(3): |
| 35 | ----- |
| 36 | <h2 style="color:blue;font-size:2em">${list_titles[i]}</h2> |
| 37 | -----r |
| 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) |
| 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 | |
| 50 | # Noir: neighbors_mix, bleu: neighbors_exo, vert: moyenne, rouge: persistence |
| 51 | |
| 52 | i_np = which.min(e_nn_exo$abs$indices) |
| 53 | i_p = which.max(e_nn_exo$abs$indices) |
| 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 | |
| 67 | # Bleu: prévue, noir: réalisée |
| 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)) |
| 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)) |
| 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 | |
| 90 | # Variabilité globale en rouge ; sur les 60 voisins (+ lendemains) en noir |
| 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 | |
| 99 | # - pollué à gauche, + pollué à droite |
| 100 | -----r |
| 101 | # Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite |
| 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 |
| 107 | % endfor |
| 108 | ----- |
| 109 | <h2>Bilan</h2> |
| 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 ? |