🪂 Saint-Nazaire
Parawing · SUP · Surf · Repli · Dock • préférée 12–14h (⭐) • marée : ≥ 3.5 m favorable · 2–3.5 m défavorable · < 2 m no-go · ↑↓ montante/descendante · PM/BM pleine/basse mer • bande droite = vent horaire (kn + flèche direction, échelle Windguru)
La brise thermique des 42 derniers jours
Une case = un jour. En haut, le vent de terre du matin (6–11 h) — faible, limite, au-dessus du seuil, « mer » = déjà onshore ; la 2e valeur soulignée, quand elle est là, est celle mesurée à la balise. En bas, la brise de l'après-midi (13–19 h) : heure de bascule + force (couleurs Windguru), « — » = pas de brise établie. La série de fond est l'archive AROME 1.3 km sur la cellule du spot : c'est la seule reconstitution homogène du passé, la balise ne s'archivant que depuis le 27/07/2026.
Le déclencheur : le vent de terre du matin
Lecture : plus le vent de terre est fort au matin, moins la brise arrive à s'installer l'après-midi. Le moteur place la falaise à > 7 kn (sb_morning_kill_kn) — au-delà, il baisse la confiance du pronostic. Ce tableau est recalculé à chaque build sur la fenêtre ci-dessus : si la falaise se déplace, ça se voit ici avant de se voir sur l'eau.
Modèle vs réel : la brise mesurée
L'après-midi réel tape 2.1 kn plus fort que le modèle en médiane . C'est cet écart que la correction apprise réinjecte dans le pronostic — mesurée heure par heure et sur la fenêtre glissante, elle colle donc au régime récent plutôt qu'à la médiane des 6 semaines. Sans elle, le planner ne ferait que répéter le modèle. La bascule mesurée sert aussi à caler l'heure annoncée (voir le pronostic en bas de page).
Provenance du réel : 42 j sur balise Saint-Nazaire. La balise Saint-Nazaire est la référence — c'est elle qui mesure le vent là où on navigue. Une journée est diagnostiquée sur une seule source, jamais un panachage : la balise dès qu'elle couvre l'après-midi, sinon la station de repli en entier. Idem pour la correction, qui bascule sur la balise dès qu'elle aura 5 jours complets.
Quand ça bascule
Le pronostic du jour ne prend pas l'heure du modèle telle quelle : il la moyenne avec la médiane des 14 derniers jours, pour ne pas suivre un modèle qui fait basculer trop tôt un jour isolé.
Prévu vs réel : au-delà de 48 h (GFS)
Au-delà de 48 h le planner bascule sur GFS (25 km), qui ne résout pas vraiment la brise : sur la fenêtre ci-dessus il ne rate quasiment aucune vraie brise, mais il en invente et il sur-annonce la force. Concrètement : un créneau de brise en fin de semaine est une hypothèse, à reconfirmer quand AROME arrive dans les 48 h.
Prévu vs réel : à la balise
Jours de brise (12 j à bascule ; les autres régimes sont exclus du graphique)
Écart réel − modèle (AROME) heure par heure, à la balise Jetée Est, sur les seuls jours de brise. À droite (vert) = le vrai vent est plus fort que la prévi. Le pic est à 14 h (+3.3 kn) ; à la même heure, les 33 jours sans brise ne demandent que +2.0 kn. C'est la moyenne des deux (+2.3 kn) qui sert de matière à la correction appliquée — laquelle est ensuite lissée et bornée, donc pas exactement ce chiffre. C'est ce manque à l'entrée de la brise que rattrape l'uplift (section plus bas) ; dédoubler toute la correction par régime, lui, n'a pas passé le backtest (rf_regime_bias).
Comment le pronostic de brise est fabriqué
Aucune bascule annoncée et aucun matin encore mesuré : cette section se remplit dès qu'un des deux existe.
Le reforecast, heure par heure
Une colonne = une heure. Hauteur et couleur = vent moyen calé (échelle Windguru). Ces deux journées partagent une échelle verticale (les vignettes plus bas ont la leur). Le contour en pointillés derrière chaque barre est le modèle brut : l'écart entre les deux, c'est la correction. Survole une heure pour voir quel étage l'a produit.
Les jours au-delà de demain sont là pour le régime, pas pour la décision : survole une vignette pour le détail.
La forme de brise apprise
Chaque journée de brise mesurée est d'abord divisée par sa propre force d'après-midi : ce qui reste est une forme, indépendante de l'intensité — montée, plateau, retombée. Mesurée sur 70 journées de brise réelle. Les barres pâles (avant la bascule) sont affichées mais pas appliquées : avant l'entrée de la brise, le vent est celui du gradient du jour, très variable — un profil moyen y inventerait de la brise là où le modèle annonce un matin calme.
L'uplift de brise
| décalage | résidu moyen | erreur-type | verdict |
| à la bascule | -0.06 kn | ± 0.46 | rejeté (t = 0.1 < 2) |
| bascule +1 h | +0.99 kn | ± 0.38 | retenu |
| bascule +2 h | +0.81 kn | ± 0.51 | rejeté (t = 1.6 < 2) |
| bascule +3 h | +0.33 kn | ± 0.60 | rejeté (t = 0.6 < 2) |
| bascule +4 h | +0.27 kn | ± 0.55 | rejeté (t = 0.5 < 2) |
Résidu = ce qui reste de l'écart réel − prévu après le biais appris, sur les 12 journées de brise mesurées, indexé sur l'heure de bascule plutôt que sur l'heure d'horloge (deux jours ne basculent pas à la même heure). Un décalage n'est retenu que si sa moyenne dépasse 2 erreurs-types : sans ce garde-fou on ajusterait du bruit. C'est backtest_bias.py qui a tranché — sur l'heure de bascule, l'uplift fait passer le biais de +1,8 kn à +0,0, sans dégrader la précision.
Pour l'instant ce reforecast est affiché mais ne décide rien : les créneaux du planning restent calculés sur la correction horaire simple. On le regarde vivre avant de lui confier la barre (reforecast_drives_decision dans le fichier de spot).
Vent & pratiques
| Parawing | ≥ 12 kn |
| SUP downwind | 9–12 kn |
| Surf foil | < 10 kn — < 15 kn si secteur N→SE |
| Dockstart / SUP flat | < 11 kn |
Secteurs de vent (provenance)
| Parawing / SUP (W→S) | 180°→270° |
| Surf (N→SE, favorable) | 350°→135° |
| Onshore Kerlédé (brise) | 215°→310° |
Houle
| Ressenti au spot | bouée Belle-Île ÷ 2 |
| Surf : houle mini ressentie | 0.5 m |
| Surf : période mini | 9 s |
Marée (hauteur marégraphe St-Nazaire, zéro hydro)
| Profondeur mini (surf & dock) | 3.5 m |
| Repère visuel calendrier | 2 m |
| Horizon de cache marée | 30 j |
| Fenêtre descendante | PM + 1 h → BM suivante |
Correction de vent (biais appris)
| Fenêtre d'apprentissage | 45 j glissants |
| Jours mini avant activation | 5 j |
| Échantillons mini / bucket horaire | 3 |
| Rétention de l'archive d'obs | 0 j |
| Poids du nudge du jour (α) | 0.5 |
| Borne de correction (clamp) | ± 4 kn |
| Rabot des rafales | × 0.9 |
Détection de brise (libellé)
| Fenêtre d'analogues (climato) | 14 j |
| Seuil vent pour dater la bascule | 4.5 kn |
| Gradient de terre matin bloquant | > 7 kn |
| Fenêtre matin / après-midi | 6–11h / 13–19h |
Reforecast horaire
| Plage rendue | 8–21 h |
| Décalage max de la bascule | ± 2 h |
| Profil : jours de brise mini | 4 j |
| Profil : poids max | 50 % |
| Profil : appliqué à partir de | la bascule |
| Décroissance du nudge par jour | × 0.5 |
| Biais conditionné au régime | non (backtest non concluant) |
| Uplift de brise | oui · fenêtre 45 j |
| Uplift : décalages couverts | bascule +0 → +4 h |
| Uplift : seuil de significativité | 2 erreurs-types |
| Pilote la décision | non (affichage seul) |
Replis parawing
| Repli houle (La Baule) | bouée ≥ 1.1 m / 9 s, marée 1.5–3.5 m |
| Repli marée (Saint-Brévin) | marée ≥ 2 m |
Ces valeurs sont lues en direct dans foil_planner.CFG (surchargé par spots/kerlede.toml) au moment du build : elles reflètent exactement ce que le moteur applique. Les recaler = passer par le spot-tuner.
Vent
- AROME 1.3 km jusqu'à 48 h, GFS au-delà (Open-Meteo). Prévision sur la cellule exacte du spot (47.256, -2.236), pas un point au large : un décalage de localisation fausse le timing de la brise.
- On ne « répète » pas le modèle brut : on le cale via une correction apprise (voir ci-dessous).
Correction de vent (obs vs prévision)
- Biais appris : on compare le vent réel de la balise à ce que le modèle avait prévu, heure par heure et par modèle (AROME et GFS séparément), sur 45 jours glissants. Il remplace l'ancien bonus thermique forfaitaire de +4 kn. Attention à ce qu'il ne dit PAS : comme il moyenne tous les régimes, sa forme n'est pas la signature de la brise — c'est à l'uplift de brise (plus bas) de rattraper ce qu'il rate à la bascule.
- Nudge du jour : on y ajoute le résidu de la balise d'aujourd'hui (× 0.5), pour rattraper l'erreur synoptique du jour que la moyenne longue ne voit pas.
- Montée en charge : aucune source ne fournit l'historique du vent réel local (la balise ne sert que ~3 h de brut). L'archive se construit un point par heure, à partir du 27/07/2026. Tant qu'il y a moins de 5 jours archivés, la base longue est inactive et seul le nudge du jour agit. Pleine résolution ≈ mi-août 2026.
- Balise : Jetée Est (Windloire) en primaire, Winds-Up St-Brévin en secours.
Houle
Le ressenti au spot ≈ bouée Belle-Île ÷ 2 (la houle du large entre atténuée dans l'estuaire).
Marée
- Hauteur au marégraphe St-Nazaire (zéro hydrographique) — pas une profondeur réelle, aucun offset à caler.
- La marée est astronomique donc déterministe : une fois récupérée elle ne change plus → on la met en cache (immunise l'agenda contre une panne d'api-maree).
- Fenêtre favorable parawing/SUP = descendante, de PM + 1 h à la BM suivante.
Brise thermique
- AROME résout déjà la brise localement → on ne la « rajoute » pas.
- Prédicteur de la bascule = force du gradient de terre au matin (bloquée si > 7 kn), pas le ΔT terre/mer.
- Une seule définition de « brise » (bascule onshore 13–19 h ≥ 4.5 kn) sert au planning ET à l'analyse du passé → l'onglet 🌡️ Brise thermique montre les chiffres qui fondent ces seuils, et de quoi le pronostic du jour est fait.
Le reforecast horaire
Une brise n'est pas un événement journalier (« bascule à 14 h, 12 kn ») mais une courbe : elle entre, monte, plafonne, retombe. Le reforecast la reconstruit heure par heure, en quatre étages :
- Le biais appris reste horaire, mesuré obs contre prévision heure par heure. On a testé de le conditionner au régime (jours de brise / jours sans, dont les erreurs de modèle n'ont aucune raison de se ressembler) : en leave-one-day-out sur l'archive balise, ça ne bat pas la base tous-jours — 1,97 contre 1,93 kn d'erreur moyenne sur 21 jours d'apprentissage, 1,82 contre 1,83 kn sur 45 jours. Trop peu de jours par régime : la variance mange la réduction de biais. Le code est là et testé, mais éteint (
rf_regime_bias) jusqu'à ce que l'archive grossisse et quebacktest_bias.pytranche. - L'uplift de brise. Ce que le biais tous-jours rate à l'entrée du thermique. Les deux régimes ont des signatures d'erreur opposées (voir la section « Prévu vs réel : à la balise » : pic à +3,5 kn à 13 h les jours de brise, bosse matinale les jours sans), et leur moyenne ne convient à aucun des deux. Plutôt que de tout dédoubler, on n'apprend qu'un petit résidu ancré sur la bascule, et on ne retient que les décalages dont la moyenne dépasse 2 erreurs-types. Résultat mesuré : à l'heure de bascule, le biais passe de +1,8 kn à +0,0 sans dégrader la précision. Ça marche à condition que le biais apprenne sur la même fenêtre longue —
bias_window_daysest passé à 45 j pour ça (gain propre par ailleurs : MAE 1,92 → 1,83 kn). - La bascule calée fait glisser la courbe, au lieu d'être un nombre affiché à côté d'un vent horaire qui l'ignore (± 2 h max).
- Le nudge du jour décroît avec l'échéance (× 0.5 par jour) : un résidu synoptique d'aujourd'hui ne dit pas grand-chose de après-demain.
- Une forme de brise apprise sur les obs est mêlée en minorité au modèle (50 % au plus) — et seulement à partir de la bascule : avant, le vent est celui du gradient du jour, et un profil moyen y inventerait de la brise là où le modèle annonce un matin calme.
Les rafales ne sont pas calées. La correction apprise ne porte que sur le vent moyen : c'est le seul champ que l'archive d'observations contenait jusqu'au 11/09/2026. Depuis cette date on archive aussi la rafale (max des échantillons ~2 s de la balise, colonne gust côté station METAR) — d'ici quelques semaines elle sera calibrable comme le reste. En attendant, tout trait de rafale affiché est du modèle brut raboté de 10 %, sauf sur les heures déjà mesurées.
Les heures déjà passées ne sont pas prévues : le reforecast y porte la mesure de la balise. Et sur le jour J, le matin mesuré — qui n'est plus une prévision — avance ou retarde la bascule dans la recette commune, donc dans la ligne « 🎯 Mon pronostic » et dans la courbe à la fois : les deux ne peuvent pas diverger.
Robustesse
Toutes les sources réseau sont best-effort : si l'une tombe, le moteur dégrade proprement (correction nulle, fallback marée) plutôt que de planter.
Lire le planning
- Chaque colonne = un jour ; l'axe vertical va de 7h à 21h.
- Les blocs colorés = créneaux ridables, un par pratique (Parawing, SUP downwind, Surf, Repli, Dockstart).
- ⭐ = le créneau chevauche ta fenêtre préférée (12h–14h).
- La bande de droite de chaque jour = vent horaire (kn + flèche de direction, échelle de couleur Windguru).
Lire la marée
- Fond ≥ 3.5 m favorable · 2–3.5 m défavorable · < 2 m no-go.
- Les repères PM/BM marquent pleine/basse mer ; ↑↓ la marée montante/descendante.
La ligne « 🎯 Mon pronostic »
Quand une brise est prévue, elle résume la bascule attendue (direction, heure, force à Kerlédé) et, en dessous, sur quoi le pronostic est calé : régime récent, état de la correction apprise, nudge balise, et le vent brut du modèle pour comparaison. L'onglet 🌡️ Brise thermique déplie ce calcul étage par étage, et montre ce que la brise a réellement fait ces dernières semaines.
Avant d'y aller
C'est une aide à la décision, pas une garantie. Le jour J, vérifie le vent réel en direct (balise / notifier de session) avant de charger la voiture — surtout sur les bascules de brise, sensibles à ±1 h et ±1 secteur.