X-Git-Url: https://git.auder.net/images/pieces/Cwda/wc.svg?a=blobdiff_plain;f=reports%2Freport_2017-03-01.7h_average.ipynb;h=795307c89c56506f42162f3856e6d2c7064b805b;hb=f17665c7d3da672163779da686d9f4d1ebad31f9;hp=6296e2948a51025073d55fa7906e0539de65d06c;hpb=841b7f5a10742afa28707ebf7dca273b38d8b8e4;p=talweg.git diff --git a/reports/report_2017-03-01.7h_average.ipynb b/reports/report_2017-03-01.7h_average.ipynb index 6296e29..795307c 100644 --- a/reports/report_2017-03-01.7h_average.ipynb +++ b/reports/report_2017-03-01.7h_average.ipynb @@ -19,8 +19,9 @@ }, "outputs": [], "source": [ - "data = getData(ts_data=\"../pkg/data/pm10_mesures_H_loc.csv\", exo_data=\"../pkg/data/meteo_extra_noNAs.csv\",\n", - " input_tz = \"Europe/Paris\", working_tz=\"Europe/Paris\", predict_at=7)" + "ts_data = read.csv(system.file(\"extdata\",\"pm10_mesures_H_loc.csv\",package=\"talweg\"))\n", + "exo_data = read.csv(system.file(\"extdata\",\"meteo_extra_noNAs.csv\",package=\"talweg\"))\n", + "data = getData(ts_data, exo_data, input_tz = \"Europe/Paris\", working_tz=\"Europe/Paris\", predict_at=7)" ] }, { @@ -35,6 +36,8 @@ " * same_season=FALSE : les indices pour la validation croisée ne tiennent pas compte des saisons\n", " * mix_strategy=\"mult\" : on multiplie les poids (au lieu d'en éteindre)\n", "\n", + "(valeurs par défaut).\n", + "\n", "J'ai systématiquement comparé à deux autres approches : la persistence et la moyennes des lendemains des jours \"similaires\" dans tout le passé ; à chaque fois sans prédiction du saut (sauf pour Neighbors : prédiction basée sur les poids calculés).\n", "\n", "Ensuite j'affiche les erreurs, quelques courbes prévues/mesurées, quelques filaments puis les histogrammes de quelques poids. Concernant les graphes de filaments, la moitié gauche du graphe correspond aux jours similaires au jour courant, tandis que la moitié droite affiche les lendemains : ce sont donc les voisinages tels qu'utilisés dans l'algorithme.\n", @@ -50,11 +53,11 @@ }, "outputs": [], "source": [ - "indices = seq(as.Date(\"2015-01-18\"),as.Date(\"2015-01-24\"),\"days\")\n", - "p_ch_nn = getForecast(data,indices,\"Neighbors\",\"Neighbors\",simtype=\"mix\",same_season=FALSE,mix_strategy=\"mult\")\n", - "p_ch_pz = getForecast(data, indices, \"Persistence\", \"Zero\", same_day=TRUE)\n", - "p_ch_az = getForecast(data, indices, \"Average\", \"Zero\") #, memory=183)\n", - "#p_ch_zz = getForecast(data, indices, \"Zero\", \"Zero\")" + "indices_ch = seq(as.Date(\"2015-01-18\"),as.Date(\"2015-01-24\"),\"days\")\n", + "p_ch_nn = computeForecast(data,indices_ch, \"Neighbors\", \"Neighbors\", simtype=\"mix\")\n", + "p_ch_pz = computeForecast(data, indices_ch, \"Persistence\", \"Zero\", same_day=TRUE)\n", + "p_ch_az = computeForecast(data, indices_ch, \"Average\", \"Zero\") #, memory=183)\n", + "#p_ch_zz = computeForecast(data, indices_ch, \"Zero\", \"Zero\")" ] }, { @@ -65,23 +68,16 @@ }, "outputs": [], "source": [ - "e_ch_nn = getError(data, p_ch_nn)\n", - "e_ch_pz = getError(data, p_ch_pz)\n", - "e_ch_az = getError(data, p_ch_az)\n", - "#e_ch_zz = getError(data, p_ch_zz)\n", + "e_ch_nn = computeError(data, p_ch_nn)\n", + "e_ch_pz = computeError(data, p_ch_pz)\n", + "e_ch_az = computeError(data, p_ch_az)\n", + "#e_ch_zz = computeError(data, p_ch_zz)\n", "options(repr.plot.width=9, repr.plot.height=7)\n", "plotError(list(e_ch_nn, e_ch_pz, e_ch_az), cols=c(1,2,colors()[258]))\n", "\n", "#Noir: neighbors, rouge: persistence, vert: moyenne" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "La méthode Neighbors fait assez nettement mieux que les autres dans ce cas." - ] - }, { "cell_type": "code", "execution_count": null, @@ -118,13 +114,6 @@ "plotPredReal(data, p_ch_az, 4)" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Les erreurs sont proches, mais les courbes prédites très différentes : avantage à \"Neighbors\"" - ] - }, { "cell_type": "code", "execution_count": null, @@ -134,8 +123,8 @@ "outputs": [], "source": [ "par(mfrow=c(1,2))\n", - "f3 = computeFilaments(data, p_ch_nn$getIndexInData(3), plot=TRUE)\n", - "f4 = computeFilaments(data, p_ch_nn$getIndexInData(4), plot=TRUE)" + "f3_ch = computeFilaments(data, p_ch_nn$getIndexInData(3), plot=TRUE)\n", + "f4_ch = computeFilaments(data, p_ch_nn$getIndexInData(4), plot=TRUE)" ] }, { @@ -148,10 +137,10 @@ "source": [ "par(mfrow=c(2,2))\n", "options(repr.plot.width=9, repr.plot.height=7)\n", - "plotFilamentsBox(data, f3$indices)\n", - "plotFilamentsBox(data, f3$indices+1)\n", - "plotFilamentsBox(data, f4$indices)\n", - "plotFilamentsBox(data, f4$indices+1)\n", + "plotFilamentsBox(data, f3_ch$indices)\n", + "plotFilamentsBox(data, f3_ch$indices+1)\n", + "plotFilamentsBox(data, f4_ch$indices)\n", + "plotFilamentsBox(data, f4_ch$indices+1)\n", "\n", "#En haut : jour 3 + lendemain (4) ; en bas : jour 4 + lendemain (5)\n", "#à gauche : premières 24h ; à droite : 24h suivantes" @@ -174,8 +163,8 @@ "source": [ "par(mfrow=c(1,2))\n", "options(repr.plot.width=9, repr.plot.height=4)\n", - "plotRelativeVariability(data, f3$indices)\n", - "plotRelativeVariability(data, f4$indices)\n", + "plotRelativeVariability(data, f3_ch$indices)\n", + "plotRelativeVariability(data, f4_ch$indices)\n", "\n", "#Variabilité sur 60 courbes au hasard en rouge ; sur nos 60 voisins (+ lendemains) en noir" ] @@ -184,7 +173,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Dans la situation idéale, il faudrait que la courbe noire soit nettement plus basse que la courbe rouge. Ce n'est pas très clair à J+1, surtout en soirée (de 21h à 0h)." + "Il faudrait que la courbe noire soit nettement plus basse que la courbe rouge." ] }, { @@ -223,6 +212,19 @@ "ignored <- computeFilaments(data, p_ch_nn$getIndexInData(5), plot=TRUE)" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite\n", + "p_ch_nn$getParams(3)$window\n", + "p_ch_nn$getParams(4)$window" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -238,11 +240,11 @@ }, "outputs": [], "source": [ - "indices = seq(as.Date(\"2015-03-15\"),as.Date(\"2015-03-21\"),\"days\")\n", - "p_ep_nn = getForecast(data,indices,\"Neighbors\",\"Neighbors\",simtype=\"mix\",same_season=FALSE,mix_strategy=\"mult\")\n", - "p_ep_pz = getForecast(data, indices, \"Persistence\", \"Zero\", same_day=TRUE)\n", - "p_ep_az = getForecast(data, indices, \"Average\", \"Zero\") #, memory=183)\n", - "#p_ep_zz = getForecast(data, indices, \"Zero\", \"Zero\")" + "indices_ep = seq(as.Date(\"2015-03-15\"),as.Date(\"2015-03-21\"),\"days\")\n", + "p_ep_nn = computeForecast(data,indices_ep, \"Neighbors\", \"Neighbors\", simtype=\"mix\")\n", + "p_ep_pz = computeForecast(data, indices_ep, \"Persistence\", \"Zero\", same_day=TRUE)\n", + "p_ep_az = computeForecast(data, indices_ep, \"Average\", \"Zero\") #, memory=183)\n", + "#p_ep_zz = computeForecast(data, indices_ep, \"Zero\", \"Zero\")" ] }, { @@ -253,24 +255,16 @@ }, "outputs": [], "source": [ - "e_ep_nn = getError(data, p_ep_nn)\n", - "e_ep_pz = getError(data, p_ep_pz)\n", - "e_ep_az = getError(data, p_ep_az)\n", - "#e_ep_zz = getError(data, p_ep_zz)\n", - "#e_ep_l = getError(data, p_ep_l)\n", + "e_ep_nn = computeError(data, p_ep_nn)\n", + "e_ep_pz = computeError(data, p_ep_pz)\n", + "e_ep_az = computeError(data, p_ep_az)\n", + "#e_ep_zz = computeError(data, p_ep_zz)\n", "options(repr.plot.width=9, repr.plot.height=7)\n", "plotError(list(e_ep_nn, e_ep_pz, e_ep_az), cols=c(1,2,colors()[258]))\n", "\n", "#Noir: neighbors, rouge: persistence, vert: moyenne" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Cette fois les deux méthodes naïves font en moyenne moins d'erreurs que Neighbors. Prédiction trop difficile ?" - ] - }, { "cell_type": "code", "execution_count": null, @@ -281,8 +275,8 @@ "source": [ "par(mfrow=c(1,2))\n", "options(repr.plot.width=9, repr.plot.height=4)\n", - "plotPredReal(data, p_ep_nn, 5)\n", - "plotPredReal(data, p_ep_nn, 2)\n", + "plotPredReal(data, p_ep_nn, 4)\n", + "plotPredReal(data, p_ep_nn, 6)\n", "\n", "#Bleu: prévue, noir: réalisée" ] @@ -303,15 +297,47 @@ "outputs": [], "source": [ "par(mfrow=c(1,2))\n", - "plotPredReal(data, p_ep_pz, 4)\n", - "plotPredReal(data, p_ep_pz, 6)" + "plotPredReal(data, p_ep_az, 4)\n", + "plotPredReal(data, p_ep_az, 6)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "par(mfrow=c(1,2))\n", + "f4_ep = computeFilaments(data, p_ep_nn$getIndexInData(4), plot=TRUE)\n", + "f6_ep = computeFilaments(data, p_ep_nn$getIndexInData(6), plot=TRUE)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "par(mfrow=c(2,2))\n", + "options(repr.plot.width=9, repr.plot.height=7)\n", + "plotFilamentsBox(data, f4_ep$indices)\n", + "plotFilamentsBox(data, f4_ep$indices+1)\n", + "plotFilamentsBox(data, f6_ep$indices)\n", + "plotFilamentsBox(data, f6_ep$indices+1)\n", + "\n", + "#En haut : jour 4 + lendemain (5) ; en bas : jour 6 + lendemain (7)\n", + "#à gauche : premières 24h ; à droite : 24h suivantes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Bonnes performances de la persistence (par chance...)" + "\"Voisinages\" catastrophiques : les jours 4 et 6 sont trop atypiques." ] }, { @@ -323,8 +349,18 @@ "outputs": [], "source": [ "par(mfrow=c(1,2))\n", - "plotFilaments(data, p_ep_nn$getIndexInData(5))\n", - "plotFilaments(data, p_ep_nn$getIndexInData(2))" + "options(repr.plot.width=9, repr.plot.height=4)\n", + "plotRelativeVariability(data, f4_ep$indices)\n", + "plotRelativeVariability(data, f6_ep$indices)\n", + "\n", + "#Variabilité sur 60 courbes au hasard en rouge ; sur nos 60 voisins (+ lendemains) en noir" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Il faudrait que la courbe noire soit nettement plus basse que la courbe rouge." ] }, { @@ -336,22 +372,35 @@ "outputs": [], "source": [ "par(mfrow=c(1,2))\n", - "plotSimils(p_ep_nn, 5)\n", - "plotSimils(p_ep_nn, 2)" + "plotSimils(p_ep_nn, 4)\n", + "plotSimils(p_ep_nn, 6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Même observation concernant les poids : concentrés près de zéro pour les prédictions avec peu de voisins." + "Poids très concentrés près de zéro pour les prédictions avec peu de voisins." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#Fenêtres sélectionnées dans ]0,10] / endo à gauche, exo à droite\n", + "p_ep_nn$getParams(4)$window\n", + "p_ep_nn$getParams(6)$window" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Semaine non polluée" + "