X-Git-Url: https://git.auder.net/?p=talweg.git;a=blobdiff_plain;f=reports%2FOLD%2Freport_2017-02-02.Rnw;fp=reports%2FOLD%2Freport_2017-02-02.Rnw;h=0000000000000000000000000000000000000000;hp=bba8896b269788e769496a6763c4e05c71b0b628;hb=af718fd5a9a330b13b331e78824a47407a3479ae;hpb=c8a81efd2e8302cde424165539f49e4bb7466fc3 diff --git a/reports/OLD/report_2017-02-02.Rnw b/reports/OLD/report_2017-02-02.Rnw deleted file mode 100644 index bba8896..0000000 --- a/reports/OLD/report_2017-02-02.Rnw +++ /dev/null @@ -1,158 +0,0 @@ -\documentclass[a4paper,12pt]{article} -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} - -\renewcommand*\familydefault{\sfdefault} - -\marginparwidth 0pt -\oddsidemargin 0pt -\evensidemargin 0pt -\marginparsep 0pt -\topmargin 0pt -\textwidth 16cm -\textheight 23cm -\parindent 5mm - -\begin{document} - -\section{Package R "ppmfun"} - -Le package $-$ Predict PM10 with FUNctional methods $-$ contient le code permettant de (re)lancer -les expériences numériques décrites dans ce document. La fonction principale \emph{predictPM10} -se divise en trois parties, décrites successivement au cours des trois paragraphes suivants.\\ - -<>= -#Chargement de la librairie (après compilation, "R CMD INSTALL ppmfun/") -library(ppmfun) -@ - -Note : sur la base de nos dernières expériences, on considère que -\begin{itemize} - \item on ne touche pas à la fenêtre obtenue par optim() ;} - \item on oublie la méthode consistant à prédire forme et niveau de manière complètement - déconnectée : il faut relier les deux. -\end{itemize} - -\subsection{Acquisition des données} - -Compte-tenu de la nature hétérogène des données utilisées $-$ fonctionnelles pour les PM10, -vectorielles pour les variables exogènes $-$, celles-ci sont organisées sous forme d'une liste -\emph{data}, la $i^{eme}$ cellule correspondant aux données disponibles au $i^{eme}$ jour à -l'heure $H$ de prédiction choisie (1h00, 8h00 ou 14h00) : c'est-à-dire les valeurs des PM10 de -$H-24h$ à $H-1H$, ainsi que les variables météo prédites pour la période de $1h00$ à $0h$ du -jour courant (sauf si on prédit à 0h : on prend alors les valeurs mesurées de la veille).\\ - -Exemple :\\ -<>= -#Le premier argument indique la zone horaire souhaitée ; "GMT" ou "local" -#pour l'heure française, ou tout autre fuseau horaire. -data = getData("local", "7h") -@ - -\subsection{Prédiction} - -Deux types de prévisions du prochain bloc de $24h$ sont à distinguer : -\begin{itemize} - \item prévision de la forme (centrée) ; - \item prévision du saut d'une fin de série au début de la suivante. -\end{itemize} - -\noindent Il faut ainsi préciser à la fois une méthode de prévision de forme ("Persistence" et -"Neighbors" implémentées), et une méthode de prédiction de saut ("Zero", "Persistence" ou -"Neighbors"). On détaille surtout la méthode à voisins ci-après.\\ - -\begin{enumerate} - \item \textbf{Préparation des données} : calcul des niveaux sur 24h, fenêtrage si demandé - (paramètre "memory"). - \item \textbf{Optimisation des paramètres d'échelle} : via la fonction \emph{optim()} - minimisant la somme des 45 dernières erreurs jounalières L2. - \item \textbf{Prédiction finale} : une fois le (ou les, si "simtype" vaut "mix") paramètre - d'échelle $h$ déterminé, les similarités sont évaluées sur les variables exogènes et/ou - endogènes, sous la forme $s(i,j) = \mbox{exp}\left(-\frac{\mbox{dist}^2(i,j)}{h^2}\right)$. - La formule indiquée plus haut dans le rapport est alors appliquée. -\end{enumerate} - -\subsection{Calcul des erreurs} - -Pour chacun des instants à prévoir jusqu'à minuit du jour courant, on calcule l'erreur moyenne -sur tous les instants similaires du passé (sur la plage prédite). Trois -types d'erreurs sont considérées : -\begin{itemize} - \item l'erreur "abs" égale à la valeur absolue moyenne entre la mesure et la prédiction ; - \item l'erreur "MAPE" égale à l'erreur absolue normalisée par la mesure. - \item l'erreur "RMSE" égale à la racine carrée de l'erreur quadratique moyenne. -\end{itemize} - -\subsection{Expériences numériques} - -%, fig.show='hold'>>= -<>= -p_endo = predictPM10(data, 2200, 2230, 0,0, "Neighbors", "Neighbors", simtype="endo") -p_exo = predictPM10(data, 2200, 2230, 0,0, "Neighbors", "Neighbors", simtype="exo") -p_mix = predictPM10(data, 2200, 2230, 0,0, "Neighbors", "Neighbors", simtype="mix") -p = c(p_endo, p_exo, p_mix) -yrange_MAPE = range(p_mix$errors$MAPE, p_endo$errors$MAPE, p_exo$errors$MAPE) -yrange_abs = range(p_mix$errors$abs, p_endo$errors$abs, p_exo$errors$abs) -yrange_RMSE = range(p_mix$errors$RMSE, p_endo$errors$RMSE, p_exo$errors$RMSE) -ranges = c(yrange_MAPE,yrange_abs,yrange_RMSE) -par(mfrow=c(1,3)) -titles = paste("Erreur",c("MAPE","abs","RMSE")) -for (i in 1:3) #error type (MAPE,abs,RMSE) -{ - for (j in 1:3) #model (mix,endo,exo) - { - plot(p[j]$errors[[i]], type="l", col=j, main=titles[i], xlab="Temps", - ylab="Erreur", ylim=ranges[i]) - par(new=TRUE) - } -} - -#Ne tenir compte que des similarités sur les variables exogènes semble -#conduire à l'erreur la plus faible. -@ - -<>= -p_nn = predictPM10(data, 2200, 2230, 0, 0, "Neighbors", "Neighbors", sameSeaon=TRUE) -p_np = predictPM10(data, 2200, 2230, 0, 0, "Neighbors", "Persistence", sameSeaon=TRUE) -p_nz = predictPM10(data, 2200, 2230, 0, 0, "Neighbors", "Zero", sameSeaon=TRUE) -p_pp = predictPM10(data, 2200, 2230, 0, 0, "Persistence", "Persistence") -p_pz = predictPM10(data, 2200, 2230, 0, 0, "Persistence", "Zero") -p = c(p_nn, p_np, p_nz, p_pp, p_pz) -yrange_MAPE = range(p_nn$errors$MAPE, p_nz$errors$MAPE, p_np$errors$MAPE, p_pp$errors$MAPE, p_pz$errors$MAPE) -yrange_abs = range(p_nn$errors$abs, p_nz$errors$abs, p_np$errors$abs, p_pp$errors$abs, p_pz$errors$abs) -yrange_RMSE = range(p_nn$errors$RMSE, p_nz$errors$RMSE, p_np$errors$RMSE, p_pp$errors$RMSE, p_pz$errors$RMSE) -ranges = c(yrange_MAPE,yrange_abs,yrange_RMSE) -par(mfrow=c(1,3)) -for (i in 1:3) #error type (MAPE,abs,RMSE) -{ - for (j in 1:5) #model (nn,np,nz,pp,pz) - { - plot(p[j]$errors[[i]], type="l", col=j, main=titles[i], xlab="Temps", - ylab="Erreur", ylim=ranges[i]) - if (j<5) - par(new=TRUE) - } -} - -#Meilleurs results: nn et nz (np moins bon) -@ - -%%TODO: analyse sur les trois périodes indiquées par Michel ; simtype=="exo" par defaut -16/03/2015 -p_nn_epandage = predictPM10(data, 2200, 2200, 0, 0, "Neighbors", "Neighbors", sameSeaon=FALSE) -19/01/2015 -p_nn_chauffage = predictPM10(data, 2200, 2200, 0, 0, "Neighbors", "Neighbors", sameSeaon=FALSE) -23/02/2015 -p_nn_nonpollue = predictPM10(data, 2200, 2200, 0, 0, "Neighbors", "Neighbors", sameSeaon=FALSE) - -\subsection{Suite du travail} - -Le type de jour n'est pas pris en compte dans la recherche de voisins ; cela diminuerait -nettement le nombre de similarités retenues, mais pourrait significativement améliorer les -prévisions. \textcolor{blue}{OK : on le prend désormais en compte}\\ - -\noindent Il serait intéressant également de disposer de plusieurs méthodes de prédiction, pour -par exemple les agréger à l'aide de méthodes similaires à celles du précédent contrat. -\textcolor{blue}{OK : on commence à en avoir quelques-unes} - -\end{document}