1

Reformulations

This commit is contained in:
2025-11-26 17:22:57 +01:00
parent 8b26c0bf17
commit f4bdbe2c7f
13 changed files with 460 additions and 171 deletions

View File

@@ -1,11 +1,32 @@
# Premiers modèles prédictifs
Objectif : passer de la description à la prédiction sur nos données locales, en restant simple et lisible. On compare quelques approches de base sur les horizons T+10, T+60, T+360 (~6 h) et T+1440 (~24 h) pour température, vent et pluie, sans présupposer que ça va marcher à tous les coups.
Objectif : passer de la description à la prédiction sur nos données locales, en restant simple et lisible.
Lidée est de prendre le cadre posé au chapitre 8 et de le peupler avec des modèles très basiques, pour voir ce quils valent réellement sur les horizons T+10, T+60, T+360 (~6 h) et T+1440 (~24 h) pour la température, le vent et la pluie, sans présupposer que “plus complexe” signifie forcément “meilleur”.
## Point de départ : données, features et métriques
On travaille toujours à partir de `data/weather_minutely.csv` (pas 10 minutes), enrichi des variables dérivées vues au chapitre 8 : temps encodé en sin/cos, lags courts (T10/20/30), deltas, moyennes et cumuls glissants sur 3060 minutes, composantes `(u, v)` du vent, drapeaux dévénements (pluie en cours, vent fort, chaleur/froid).
Cette table est découpée en trois blocs chronologiques : une partie _train_ (~70 % du début de la série) pour lapprentissage, une partie validation (~15 % suivante) pour régler les hyperparamètres, et une partie test (~15 % la plus récente) pour juger les modèles sur un futur qui na pas servi à lentraînement.
On peut, en variante, utiliser un _timeseries split_ “en rouleau” comme décrit au chapitre 8, mais les figures de ce chapitre sappuient sur une découpe simple.
Côté métriques, on reste sur les repères déjà introduits : MAE/RMSE pour température et vent, et pour la pluie binaire, le trio précisionrappel[_F1_](https://fr.wikipedia.org/wiki/F-mesure) complété par le [_Brier score_](https://en.wikipedia.org/wiki/Brier_score) et la calibration des probabilités.
Les modèles ne seront jugés intéressants que sils apportent un gain clair par rapport à des références naïves.
## Étape 1 — Baselines de référence
```shell
python "docs/09 - Premiers modèles prédictifs/scripts/run_baselines.py"
```
Ce premier script ne fait quune chose : mesurer la performance de quelques stratégies “bêtes mais honnêtes” qui serviront ensuite de ligne de base.
Il lit le dataset minuté, applique le découpage temporel, puis entraîne et évalue :
- des baselines de persistance (prédire que la prochaine valeur est identique à la dernière observée) ;
- des climatologies horaires (moyennes/quantiles par heure locale, éventuellement par saison) ;
- des moyennes mobiles à court terme ;
- un classifieur “toujours sec” pour la pluie, qui illustre à quel point la rareté des précipitations peut tromper les métriques.
Le script génère :
- deux CSV de résultats dans `docs/09 - Premiers modèles prédictifs/data/` :
@@ -15,11 +36,30 @@ Le script génère :
- `baselines_mae_validation.png` (MAE vs horizon pour température et vent)
- `baselines_rain_validation.png` (F1 et Brier vs horizon pour la pluie)
Ces deux graphiques résument ce que ces baselines savent faire, horizon par horizon.
![](./figures/baselines_mae_validation.png)
![](./figures/baselines_rain_validation.png)
Sur la figure MAE, la persistance reste imbattable jusquà +6 h sur la température, avec une erreur moyenne sous le degré ; à +24 h, elle se dégrade (MAE ≈1,5 °C), mais reste nettement devant la climatologie horaire, qui plafonne autour de 46 °C.
Pour le vent, la moyenne mobile sur 60 minutes devance légèrement la persistance dès +10 min, mais lécart reste modeste et la MAE grimpe doucement avec lhorizon (≈2 km/h à +24 h).
Le message est clair : sur un pas de 10 minutes, les baselines “bricolées” font déjà un travail honorable, et le gain potentiel dun modèle plus riche sera nécessairement limité.
Sur la figure pluie, la persistance profite à plein de la rareté des événements : annoncer “sec” presque tout le temps donne un F1 très élevé aux petits horizons, même si le Brier score se dégrade en séloignant.
La climatologie horaire, sans contexte, ne voit pratiquement jamais la pluie.
Toute tentative de modèle devra donc battre la persistance sur F1/Brier, surtout à +60 et +360 minutes où le score chute déjà : la barre nest pas très haute en absolu, mais elle lest par rapport à la quantité dinformation disponible dans une simple série locale.
Ces baselines fixent donc une référence indispensable : si un modèle plus sophistiqué napporte pas de gain visible par rapport à elles, il ne sert à rien en pratique.
## Étape 2 — Premiers modèles supervisés
```shell
python "docs/09 - Premiers modèles prédictifs/scripts/run_first_models.py"
```
Ce second script :
Une fois les références en place, on passe à des modèles un peu plus élaborés. Ce second script :
- construit les variables dérivées (sin/cos temporels, lags, deltas, moyennes glissantes, vent u/v, drapeaux) à partir du CSV brut ;
- découpe en _train_/_validation_/_test_ (70/15/15 %) ;
@@ -28,66 +68,28 @@ Ce second script :
- exporte `models_regression.csv` et `models_rain.csv` dans `docs/09 - Premiers modèles prédictifs/data/` ;
- produit `models_mae_validation.png` (MAE vs horizon pour température et vent) dans `docs/09 - Premiers modèles prédictifs/figures/`.
## Données et préparation
![](./figures/models_mae_validation.png)
- Jeu principal : `data/weather_minutely.csv` (pas 10 min), mis à jour au fil du temps. On peut réutiliser les CSV dérivés (matrices de lags/corrélations du chapitre 5) pour choisir des lags pertinents et vérifier la cohérence.
- Variables dérivées reprises du chapitre 8 : temps en _sin_/_cos_, lags courts (T-10/-20/-30), deltas (variation récente), moyennes/cumul sur 3060 min, composantes (u, v) du vent, drapeaux dévénements (pluie en cours, vent fort, chaleur/froid).
- Normalisation : on calcule moyenne/écart-type sur la partie _train_ uniquement, puis on applique ces paramètres aux parties _validation_ et _test_ pour ne pas utiliser dinformations futures.
Cette figure concentre la lecture sur température et vent, en MAE vs horizon.
## Découpage et validation
Côté température, Ridge/Lasso battent légèrement la persistance sur tous les horizons sauf à +10 min (MAE ≈0,14 à +60 min vs 0,15 pour la persistance ; ≈1,48 à +1440 vs 1,55).
Injecter les variables corrélées (humidité, illuminance, pression…) donne un petit gain par rapport à la version “lags génériques”, mais la marge reste modeste.
- Découpe sans fuite : _train_ (début→~70 %), _validation_ (~15 % suivant), _test_ (~15 % le plus récent), tout en ordre chronologique.
- Variante robuste : _time-series split_ “en rouleau”, où lon répète plusieurs découpes successives ; chaque paire (_train_, _validation_) est un _fold_. Cela aide à voir si un modèle reste stable dans le temps.
Pour le vent, la logique est la même : un léger mieux que la persistance (≈0,87 à +10 min vs 0,99 ; ≈1,67 à +1440 vs 1,74), sans révolution.
Les corrélations étant globalement faibles, lapport des autres variables reste limité sur ce pas de 10 minutes.
## Références de comparaison (_baselines_)
Pour la pluie, la régression logistique ne parvient pas encore à dépasser la persistance : F1 ≈0,91 à +10 min contre 0,94 pour la persistance, puis chute rapide à +60 min et audelà.
La probabilité produite est pourtant correctement calibrée (Brier ≈0,011 à +10 min), mais cela ne suffit pas à compenser lavantage dun modèle qui “reste sec” la plupart du temps.
Il faudra enrichir les variables dentrée ou changer de famille de modèles pour espérer dépasser cette baseline très difficile à battre sur une série aussi déséquilibrée.
- Persistance : prédire que la prochaine valeur est identique à la dernière observée (par horizon).
- Climatologie horaire : moyenne ou quantiles par heure locale (et éventuellement par saison) pour température/vent ; fréquence de pluie par heure pour la pluie.
- Moyenne mobile : prolonger la moyenne des 3060 dernières minutes.
- Pluie rare : classifieur “toujours sec” comme seuil minimal ; si un modèle ne fait pas mieux, il ne sert à rien.
En résumé, ces premiers modèles linéaires apportent un petit gain sur température/vent, mais échouent encore à battre la persistance pour la pluie.
Ils fixent un second niveau de référence : toute complexité supplémentaire devra se justifier par un gain clair, surtout sur les horizons intermédiaires (+60/+360 min) où les baselines commencent à se dégrader.
## Modèles simples à essayer
## Conclusion
- Régressions linéaires avec régularisation (_Ridge_/_Lasso_) pour température et vent : même principe que la régression linéaire, avec un terme qui limite lampleur des coefficients (_Ridge_) ou peut en annuler certains (_Lasso_) pour éviter le sur-apprentissage.
- Régression logistique pour la pluie : fournit une probabilité de pluie plutôt quun oui/non, ce qui permet dajuster le seuil selon lusage (prudence ou non).
- Si besoin de non-linéarités : petits arbres de décision, _random forest_ ou _boosting_ légers pour capturer des relations plus courbes tout en restant interprétables.
Contre lintuition, cest au très court terme que nos modèles simples se heurtent à un mur pour la pluie : la persistance reste devant à +10 min, et lécart se creuse déjà à +60 min.
## Lecture des résultats
Pour la température et le vent, les gains existent mais restent modestes, même à +10 min, alors quon pouvait espérer que ces prévisions soient “faciles”.
Les horizons longs se dégradent comme prévu, mais le vrai défi est donc daméliorer les prédictions proches sans sur-complexifier.
- Température / vent : _MAE_ et _RMSE_ (définis au chapitre 8) pour juger lerreur moyenne et la sensibilité aux grosses erreurs.
- Pluie : précision, rappel, _F1_, _Brier score_ et calibration des probabilités pour voir si les annonces de pluie sont réalistes et bien calibrées.
- Multi-horizons : tracer lerreur en fonction de lhorizon pour identifier à partir de quand la prévision décroche. On sattend à ce que +24 h soit difficile sans contexte synoptique, et on documentera ces limites.
## Déroulé proposé
1. Construire les variables dérivées et sauvegarder un jeu prêt pour lapprentissage (en suivant le découpage temporel).
2. Évaluer les références (_baselines_) sur chaque horizon.
3. Entraîner les modèles simples (linéaires régularisés, logistique, éventuellement arbres légers) et comparer aux références.
4. Consolider lévaluation multi-horizons (_time-series split_), conserver les résultats pour les chapitres suivants (affinements et pipeline dinférence local).
## Synthèse visuelle des baselines (validation)
![MAE des baselines par horizon](./figures/baselines_mae_validation.png)
![F1 et Brier des baselines pluie](./figures/baselines_rain_validation.png)
### Ce que montrent ces baselines
- Température : la persistance reste imbattable jusquà +6 h avec une MAE < 1 °C ; au-delà (+24 h), lerreur grimpe (≈1,5 °C) mais reste meilleure que la climatologie horaire qui plafonne autour de 46 °C. On part donc avec un avantage net sur le très court terme, mais lhorizon journalier sera plus difficile.
- Vent : la moyenne mobile 60 min devance légèrement la persistance dès +10 min, mais lécart reste faible et lerreur croît avec lhorizon (MAE ≈2 km/h à +24 h). Le gain potentiel dun modèle plus riche sera modeste si lon reste sur ce pas de 10 min.
- Pluie (binaire) : la persistance affiche des F1 élevés aux petits horizons parce que la pluie est rare et que “rester sec” gagne souvent ; le Brier augmente avec lhorizon, signe que la confiance se dégrade. La climatologie horaire est nulle : sans contexte, elle ne voit pas la pluie. Toute tentative de modèle devra donc battre la persistance sur F1/Brier, surtout à +60/+360 min où le score chute déjà.
- Conclusion provisoire : les baselines définissent une barre à franchir — forte sur le très court terme (température/vent), beaucoup plus basse pour la pluie (où la rareté favorise la persistance). Les modèles devront prouver un gain net sur ces repères, en particulier sur les horizons intermédiaires (+60/+360 min) où la prévisibilité commence à décrocher.
## Premiers modèles (Ridge/Lasso/logistique)
![MAE des modèles (validation)](./figures/models_mae_validation.png)
- Température : Ridge/Lasso battent légèrement la persistance sur tous les horizons sauf à +10 min (MAE ≈0,14 à +60 min vs 0,15 pour la persistance ; ≈1,48 à +1440 vs 1,55). Injecter les variables corrélées (humiditié, illumination, pression…) donne un petit gain par rapport à la version “lags génériques”, mais la marge reste modeste.
- Vent : même logique, un léger mieux que la persistance (≈0,87 à +10 min vs 0,99 ; ≈1,67 à +1440 vs 1,74). Les corrélations étant faibles, lapport des autres variables reste limité.
- Pluie : la régression logistique reste derrière la persistance (F1 ≈0,91 à +10 min contre 0,94 pour la persistance ; chute rapide à +60 et au-delà). La probabilité est calibrée (Brier ≈0,011 à +10 min), mais ne compense pas lavantage de “rester sec”. Il faudra enrichir les features ou changer de modèle pour espérer dépasser la baseline.
En résumé, les modèles linéaires apportent un petit gain sur température/vent et échouent encore à battre la persistance pour la pluie. Cest une base de référence ; les prochains essais devront justifier leur complexité par un gain clair, surtout sur les horizons où les baselines se dégradent (+60/+360 min).
## Conclusion provisoire du chapitre
Contre lintuition, cest au très court terme que nos modèles simples se heurtent à un mur pour la pluie : la persistance reste devant à +10 min, et lécart se creuse déjà à +60 min. Pour la température et le vent, les gains existent mais restent modestes, même à +10 min, alors quon pouvait espérer les “faciles”. Les horizons longs se dégradent comme prévu, mais le vrai défi est donc daméliorer les prédictions proches sans sur-complexifier. Prochaine étape : tester des modèles plus flexibles (arbres/boosting) et enrichir les features, tout en vérifiant que le gain sur les petits horizons justifie leffort.
Prochaine étape : tester des modèles plus flexibles (arbres/boosting) et enrichir les features, tout en vérifiant que le gain sur les petits horizons justifie leffort.