-
Prévision de la météo sur Tours par modèles de lissage moyenne mobile/exponentielle, Buys-Ballot, Prophet et LSTM.
-
Régression multiple forward, backward, Ridge, Lasso et sur ACP
Le jeu de données choisis est météorologique, nous souhaitons prévoir la température du lendemain en fonction des autres variables quantitatives.
Ce jeu de données a été obtenu dans les opens data de la ville de Tours, le fichier est trouvable ici.
D'après l'hébergeur les paramètres atmosphériques sont mesurés (température, humidité, direction et force du vent, pression atmosphérique...) ou observés (description des nuages, visibilité...) depuis la surface terrestre.
Nous avons cependant une limite à notre analyse. Puisque l'ensemble de ces observations est tirés d'une seule station d'observation.
Après lecture de la colonne Date, les données sont collectées de janvier 2010 jusqu'à décembre 2021, il en résulte plus de 30k observations & 86 variables.
Les transformations utilisés pour le nettoyage sont les suivants :
-
Suppression des variables à plus de 15% de manquants
-
Suppression des variables qualitatives
-
PMM du package Mice sur les manquants restants
-
Winsorisation des données
-
Séparation chronologique du jeu de données
L'auto corrélation de notre série temporelle correspond à la corrélation entre une mesure du trafic
L'auto covariance d'une variable
On en déduit l'auto-corrélation correspondante :
On observe une corrélation positive forte avec un décalage d'un an. Cela indique une tendance croissante que l'on vérifie avec un test de Coax Stuart.
Une moyenne mobile est un filtre linéaire. Il permet de transformer une série chronologique avec comme but d'annuler une composante (tendance ou saison) pour en laisser les autres invariantes tout en réduisant le bruit.
Une moyenne mobile en t est définit comme une combinaison linéaire finie des valeurs de la série correspondantes à des dates entourant t, c'est donc un lissage de la série.
Une moyenne mobile d'ordre m peut être écrite tel que
$$\begin{equation} \hat{T}{t} = \frac{1}{m} \sum{j=-k}^k y_{t+j}, \end{equation}$$
Avec
On souhaite conserver uniquement la tendance, on choisit une moyenne mobile 2x2920 pour annuler la saisonnalité annuelle.
2920 correspond au nombre d'observations dans une année, nous avons utilisé une combinaison de moyennes mobiles pour la symétrie et la pondération. En effet, voici une moyenne mobile 2x12 :
$$\hat{T}{t} = \frac{1}{32}y{t-6} + \frac{1}{12}y_{t-5} + \frac{1}{12}y_{t-4} + \frac{1}{12}y_{t-3} + \frac{1}{12}y_{t-2} + \frac{1}{12}y_{t-1} +\frac{1}{12}y_{t} + \frac{1}{12}y_{t+1} +\frac{1}{12}y_{t+2} + \frac{1}{12}y_{t+3} + \frac{1}{12}y_{t+4} + \frac{1}{12}y_{t+5} + \frac{1}{32}y_{t+6}.$$
L’approche de BUYS-BALLOT consiste à introduire des variables indicatrices correspondant à chaque saison définit par le cycle d’observation tel que
Nous avons estimer dans un premier temp la tendance
Tendance + Saisonnalité Annuelle + Saisonnalité Mensuelle
Tendance + Saisonnalité Annuelle + Saisonnalité Mensuelle + Saisonnalité journalière
Soit SCE la somme des distances au carré entre chaque valeur prédite par le modèle
Nous obtenons alors la part de dispersion expliquée par le modèle. Puis, nous calculons la dispersion totale des données nommé SCT
Avec
Nous obtenons alors le R² par la combinaisons des calculs précédents
Pour compléter cette mesure, nous utiliserons donc l'erreur absolue moyenne en pourcentage (MAPE en anglais). Il s'agit de la moyenne des écarts en valeur absolue par rapport aux valeurs observées.
C'est donc un pourcentage et par conséquent un indicateur pratique de comparaison.
Indicateur | Jeu Train (2010-2019) | Jeu Test (2020-2021) | Jeu globale (2010-2021) |
---|---|---|---|
R² | 0.72 | 0.68 | 0.65 |
MAPE | 101% | 84% | 101% |
⏩ Rapport ⏪
Bilan des problématiques rencontrés avec le jeu de données et leurs résolutions.
- Le nombre de variables est très important, les données qualitatives ou manquantes empêchent d'effectuer une régression
- On résume les données pour identifier les qualitatives et les supprimer.
- Les données manquantes empêche d'effectuer une régression
- On sélectionne les lignes avec une variables manquantes et on les supprime.
- Si l'on supprime ces variables, les données seront nulle
- On décide de préalablement supprimés les variables avec des manquants.
- Une fois les variables avec des manquants supprimés, les données restantes n'expliquent rien, la régression associée a un R² proche de 0
- On regarde combien de manquants sont présents par variables, on classe par ordre décroissant les variables selon leur nombre de manquants, puis on supprime petit à petit les variables pour avoir le bon équilibre entre variables explicatives et nombre d'observations.
- Nous souhaitons réaliser une prévision de la température à la prochaine observation, mais cette variable n'est pas présente
- Création de cette variable par utilisation de la méthode lag.
- Le modèle a un R² proche de 0 car les données ne sont pas ordonnées chronologiquement
- On ordonne selon la variable Date
- Les prédictions donnent de mauvais résultat, car les observations n'ont pas les même écarts temporelles entre elles, en effet certains jours il y a 0 observation, tandis que d'autres il y a 15.
- On associe à un id à chaque jour en isolant les parties de la variable date puis en effectuant le calcul jour + 30 x mois + 365 x année, ainsi chaque observation a désormais l'id de son jour. Ensuite on ne garde que la première observation de chaque id, il ne reste plus qu’une observation par jour.
Après nettoyage, nous avons 1655 observations de 21 variables, cela est suffisant pour la régression multiple.
Nous allons effectuer plusieurs régressions pour essayer d’expliquer la température en fonction des autres variables explicatives.
R² ajusté obtenu | Modèle |
---|---|
0.67 | Régression avec toutes les variables |
0.60 | Régression avec variables significatives |
0.67 | Régression forward |
0.67 | Régression backward |
0.67 | Régression sur ACP |
0.67 | Régression Ridge |
0.67 | Régression Lasso |
Nous allons utiliser le R² ajusté pour comparer les différentes régressions. Cette mesure indique la proportion de la variance expliquée par le modèle.
- 0 % le modèle n’explique par la variable Y
- 100 % le modèle explique la variabilité de Y lié à la liaison linéaire des variables explicatives entièrement
La régression avec toutes les variables obtient un R² de 0.67, lorsque nous essayons d’obtenir une régression “presque aussi bien” en retirons les variables les moins explicatives, le R² chute à 0.60.
Ensuite, en utilisant les méthodes de protection de la régression, nous obtenons le même R² avec les régressions forward,backward,sur ACP, Ridge que avec la régression avec toutes les variables. Nous voyons l’efficacité de ces méthodes.
En partant d’une base open-source, nous avons réussis à prédire la météo sur Tours sur une année ainsi que la température du jour suivant en l’exprimant linéairement par rapport à un ensemble de variables explicatives.
Nous avons besoin des données de plusieurs stations afin d'obtenir des résultats viables, les résultats de la partie II ne sont pas exploitables car les modèles ne prenaient pas en compte la tendance et la saisonnalité (analyse confirmé par l'Anova).
Bonus : Un test du package Shiny