Ce document présente une évaluation rigoureuse du moteur de prédiction de temps de course Wattness, basé sur un modèle physique multi-disciplines (natation, vélo, course à pied) couplé à un système de personnalisation par coefficients individuels.
L'évaluation porte sur 511 résultats réels couvrant 93 athlètes et 24 parcours (Ironman et 70.3), de 2017 à 2025. Le protocole reproduit fidèlement les conditions de production : validation leave-future-out chronologique, où les coefficients personnels ne sont calculés qu'à partir de courses antérieures.
Deux modes de prédiction sont évalués :
Chaque prédiction est générée par le pipeline de production exact : calculateRacePacing() produit le baseline physique, puis fetchPersonalCoefficients() ajuste par discipline si l'historique est suffisant. Aucun paramètre n'est ajusté après coup.
Pour chaque course d'un athlète, les coefficients personnels sont calculés uniquement à partir des courses antérieures (exactement comme en production). Les courses futures ne sont jamais visibles, éliminant tout risque de fuite de données.
| Métrique | Définition |
|---|---|
| MAPE | Erreur absolue moyenne en pourcentage du temps observé |
| MAE | Erreur absolue moyenne (en minutes) |
| MedAE | Erreur absolue médiane (robuste aux outliers) |
| P90 | 90e percentile de l'erreur absolue (borne supérieure pour 90% des prédictions) |
| Bias | Erreur signée moyenne. Positif = prédit trop lent ; négatif = prédit trop rapide |
Les athlètes sont classés en trois niveaux sur la base d'un algorithme multi-critères combinant les seuils physiologiques (FTP, CSS, CS), le volume d'entraînement, l'historique de compétition et la régularité :
| Niveau | Profil type | n (dataset) |
|---|---|---|
| Elite | Athlètes avancés (catégories ADV_*) : seuils élevés, volume régulier, historique confirmé | 196 |
| Competitive | Confirmés et réguliers (catégories CMP_*, EST_RESILIENT) : bonne base, expérience course | 260 |
| Age-group | En développement ou irréguliers (catégories DEV_*, EST_FRAGILE/STANDARD) : profil variable, historique limité | 55 |
| Évaluation | Seuil MAPE | Interprétation |
|---|---|---|
| Bon | ≤ 5 % | Précision suffisante pour un usage de planification fiable |
| Correct | 5 – 8 % | Utilisable avec réserve, écart perceptible sur les temps longs |
| À améliorer | > 8 % | Écart significatif, prédiction à prendre comme estimation large |
| Inconclusif | n < 5 | Échantillon insuffisant pour conclure |
Le baseline constitue le socle du moteur : un modèle physique déterministe qui prédit les temps sans historique personnel. C'est la version accessible à tous les utilisateurs, y compris les nouveaux.
| Niveau | n | MAPE | MAE | MedAE | P90 | Bias |
|---|---|---|---|---|---|---|
| Elite | 196 | 4.6 % | 21 min | 14 min | 46 min | -15 min |
| Competitive | 260 | 5.5 % | 24 min | 17 min | 1h00 | ≈ 0 |
| Age-group | 55 | 14.0 % | 1h01 | 59 min | 1h42 | +37 min |
| Niveau | Format | n | MAPE | MAE | Bias |
|---|---|---|---|---|---|
| Elite | 70.3 | 106 | 4.1 % | 12 min | -8 min |
| Elite | Full Ironman | 90 | 4.7 % | 29 min | -19 min |
| Competitive | 70.3 | 174 | 4.8 % | 15 min | -3 min |
| Competitive | Full Ironman | 86 | 6.6 % | 44 min | -20 min |
| Age-group | Full Ironman | 23 | 9.6 % | 1h04 | +38 min |
| Age-group | 70.3 | 32 | 13.4 % | 45 min | +11 min |
| Niveau | Swim MAPE | Bike MAPE | Run MAPE | Swim Bias | Bike Bias | Run Bias |
|---|---|---|---|---|---|---|
| Elite | 8.9 % | 4.3 % | 6.9 % | -2 min | ≈ 0 | -8 min |
| Competitive | 11.1 % | 8.3 % | 8.6 % | -2 min | +11 min | -9 min |
| Age-group | 8.5 % | 18.3 % | 11.3 % | -2 min | +31 min | -1 min |
Limites connues du baseline : Le modèle applique les seuils actuels de l'athlète (FTP, CSS) à des courses passées (2017-2025). Si un athlète a progressé ou régressé, cela introduit un biais temporel, particulièrement visible chez les age-group (vélo +31 min). La résolution de ce biais (stockage de seuils historiques) est la priorité d'amélioration n°1.
Les coefficients personnels sont le médian des ratios observé / baseline calculé sur les courses antérieures de l'athlète (minimum 5, filtre outliers). Ils corrigent le baseline par discipline, captant les écarts systématiques propres à chaque individu.
| Niveau | n | MAPE baseline | MAPE ajusté | Gain | Bias baseline | Bias ajusté |
|---|---|---|---|---|---|---|
| Elite | 86 | 3.8 % | 3.3 % | -0.5 pts | -9 min | -4 min |
| Competitive | 76 | 5.2 % | 4.9 % | -0.3 pts | -4 min | -14 min |
| Age-group | 15 | 15.2 % | 7.3 % | -7.9 pts | +46 min | +6 min |
Observation clé : Le gain le plus spectaculaire est observé chez les age-group (MAPE 15.2 % → 7.3 %, biais +46 min → +6 min). Cela confirme que les coefficients personnels compensent efficacement le biais du baseline pour ce profil, mais l'échantillon reste limité (n=15).
| Niveau | n | Mode | MAPE | MAE | MedAE | P90 | Bias |
|---|---|---|---|---|---|---|---|
| Elite | 196 | Baseline | 4.6 % | 21 min | 14 min | 46 min | -15 min |
| Ajusté | 4.4 % | 20 min | 12 min | 46 min | -13 min | ||
| Competitive | 260 | Baseline | 5.5 % | 24 min | 17 min | 1h00 | ≈ 0 |
| Ajusté | 5.4 % | 25 min | 15 min | 1h00 | -5 min | ||
| Age-group | 55 | Baseline | 14.0 % | 1h01 | 59 min | 1h42 | +37 min |
| Ajusté | 11.8 % | 53 min | 51 min | 1h42 | +22 min |
Le moteur Wattness repose sur des modèles physiques et physiologiques documentés dans la littérature scientifique :
| Module | Fondement | Référence |
|---|---|---|
| Hydrodynamique natation | Relation drag/vitesse en eau libre | Chatard et al. (1998) [7] |
| Solveur puissance vélo | Équation de Newton-Raphson avec forces résistives (CdA, Crr, gravité, vent) | Coggan (2003) [8], Blocken et al. (2018) [6] |
| Course à pied (dénivelé) | Coût énergétique en fonction de la pente | Minetti et al. (2002) [3] |
| Pénalité chaleur (WBGT) | Impact de la température sur la performance marathon | Ely et al. (2007) [2] |
| Couplage vélo → CAP | Transition et effet de fatigue pré-course | Hausswirth & Brisswalter (2008) [4], Millet & Vleck (2000) [5] |
| Décomposition triathlon | Contribution relative de chaque discipline | Rust et al. (2021) [1] |
Le modèle n'est pas une boîte noire : chaque prédiction est décomposable segment par segment, avec les pénalités explicitement attribuées (chaleur, dénivelé, couplage, glycogène).
Modélisé avec pénalité explicite : Chaleur (WBGT), dénivelé, vent de face/dos, couplage vélo-CAP, déplétion glycogénique.
Partiellement modélisé : Drafting (facteur moyen par niveau), position vélo (TT vs route).
Non modélisé : Courant marin, état de route, incidents mécaniques, gestion de course tactique, conditions météo hors température (pluie, humidité extrême).
Pour mesurer la contribution de chaque sous-module, le benchmark est relancé en désactivant successivement un module à la fois. Deux comparateurs naïfs quantifient la valeur ajoutée du modèle physique :
| Variante | n | MAPE | MAE | Bias | MedAE | P90 | % >30min |
|---|---|---|---|---|---|---|---|
| Modèle complet | 511 | 6.1 % | 27 min | −1 min | 17 min | 1h05 | 29.9 % |
| Sans chaleur | 511 | 6.1 % | 27 min | −8 min | 17 min | 1h06 | 34.4 % |
| Sans couplage | 511 | 6.0 % | 26 min | −5 min | 17 min | 1h04 | 31.3 % |
| Sans glycogène | 511 | 6.1 % | 27 min | −1 min | 17 min | 1h05 | 29.9 % |
| Naïf individuel | 353 | 6.0 % | 27 min | +1 min | 19 min | 59 min | 34.8 % |
| Naïf population | 511 | 7.9 % | 34 min | −5 min | 25 min | 1h10 | 42.1 % |
Elite (n=196)
| Variante | n | MAPE | MAE | Bias | MedAE | P90 | % >30min |
|---|---|---|---|---|---|---|---|
| Modèle complet | 196 | 4.6 % | 20 min | −15 min | 14 min | 45 min | 23.0 % |
| Sans chaleur | 196 | 5.4 % | 25 min | −21 min | 16 min | 58 min | 33.7 % |
| Sans couplage | 196 | 4.9 % | 22 min | −17 min | 15 min | 47 min | 27.0 % |
| Naïf individuel | 149 | 5.4 % | 24 min | +6 min | 18 min | 52 min | 31.5 % |
| Naïf population | 196 | 7.5 % | 30 min | −3 min | 24 min | 1h03 | 39.8 % |
Competitive (n=260)
| Variante | n | MAPE | MAE | Bias | MedAE | P90 | % >30min |
|---|---|---|---|---|---|---|---|
| Modèle complet | 260 | 5.5 % | 24 min | ≈ 0 | 16 min | 1h00 | 24.6 % |
| Sans chaleur | 260 | 5.3 % | 24 min | −6 min | 15 min | 56 min | 26.2 % |
| Sans couplage | 260 | 5.4 % | 24 min | −3 min | 16 min | 1h00 | 24.2 % |
| Naïf individuel | 169 | 6.3 % | 29 min | ≈ 0 | 18 min | 1h08 | 37.3 % |
| Naïf population | 260 | 7.9 % | 34 min | −4 min | 25 min | 1h19 | 42.7 % |
Age-group (n=55)
| Variante | n | MAPE | MAE | Bias | MedAE | P90 | % >30min |
|---|---|---|---|---|---|---|---|
| Modèle complet | 55 | 14.0 % | 1h00 | +36 min | 58 min | 1h42 | 80.0 % |
| Sans chaleur | 55 | 12.3 % | 53 min | +26 min | 52 min | 1h31 | 76.4 % |
| Sans couplage | 55 | 12.8 % | 55 min | +28 min | 51 min | 1h32 | 80.0 % |
| Naïf individuel | 35 | 6.9 % | 33 min | −12 min | 24 min | 1h05 | 37.1 % |
| Naïf population | 55 | 9.5 % | 44 min | −15 min | 27 min | 2h09 | 47.3 % |
Full Ironman (n=199)
| Variante | n | MAPE | MAE | Bias | MedAE | P90 | % >30min |
|---|---|---|---|---|---|---|---|
| Modèle complet | 199 | 6.2 % | 39 min | −8 min | 28 min | 1h36 | 46.2 % |
| Sans chaleur | 199 | 6.7 % | 43 min | −20 min | 34 min | 1h30 | 58.3 % |
| Sans couplage | 199 | 6.2 % | 39 min | −13 min | 31 min | 1h29 | 51.8 % |
| Naïf individuel | 163 | 6.4 % | 40 min | +6 min | 30 min | 1h30 | 50.3 % |
| Naïf population | 199 | 7.4 % | 47 min | −6 min | 39 min | 1h42 | 58.8 % |
70.3 (n=312)
| Variante | n | MAPE | MAE | Bias | MedAE | P90 | % >30min |
|---|---|---|---|---|---|---|---|
| Modèle complet | 312 | 6.0 % | 18 min | +2 min | 13 min | 42 min | 19.6 % |
| Sans chaleur | 312 | 5.7 % | 18 min | −1 min | 12 min | 38 min | 19.2 % |
| Sans couplage | 312 | 5.9 % | 18 min | ≈ 0 | 13 min | 42 min | 18.3 % |
| Naïf individuel | 190 | 5.6 % | 17 min | −2 min | 12 min | 41 min | 21.6 % |
| Naïf population | 312 | 8.3 % | 26 min | −4 min | 22 min | 52 min | 31.4 % |
Module chaleur : impact le plus significatif pour les Elite (MAPE 4.6 % → 5.4 % sans chaleur, +11 pts de taux d'erreurs >30 min). Effet inverse chez les Competitive (5.5 % → 5.3 % sans chaleur) — la pénalité thermique surcorrige légèrement cette population.
Module couplage : impact modéré sur les elites (MAPE +0.3 pts, +4 pts de taux >30 min). Quasi nul sur competitive et age-group.
Module glycogène : aucun impact mesurable sur aucun niveau. Ce module n'apporte pas de valeur dans sa forme actuelle.
L'ablation compare deux types de naïfs, ce qui clarifie la valeur du modèle physique selon le contexte :
| Critère | Modèle physique | Naïf individuel | Naïf population |
|---|---|---|---|
| Historique requis | Aucun | Oui (même format) | Aucun |
| Décomposition | Par discipline + segments | Total uniquement | Total uniquement |
| Adaptation parcours | Profil, météo, conditions | Aucune | Aucune |
| MAPE global | 6.1 % | 6.0 % (n=353) | 7.9 % |
| MedAE global | 17 min | 19 min | 25 min |
| % erreurs >30 min | 29.9 % | 34.8 % | 42.1 % |
Enseignements clés :
Sur 511 résultats réels couvrant 93 athlètes et 24 parcours, le moteur Wattness montre une précision globalement solide, particulièrement chez les profils elite et competitive, avec un gain net lorsque l'historique personnel est suffisant. Ces résultats restent à interpréter avec prudence chez les age-groupers en raison d'un échantillon encore limité.
| Profil | Gratuit (MAPE) | Gratuit (MedAE) | Personnalisé (MAPE) | Meilleur cas |
|---|---|---|---|---|
| Elite | 4.6 % | 14 min | 4.4 % | 3.3 % |
| Competitive | 5.5 % | 17 min | 5.4 % | 4.9 % |
| Age-group | 14.0 % | 59 min | 11.8 % | 7.3 % (n=15) |
La valeur du moteur ne se réduit pas à son MAPE global. L'étude d'ablation confirme que le modèle physique surpasse nettement un estimateur naïf sans historique (MAPE 6.1 % vs 7.9 %, taux d'erreurs >30 min 30 % vs 42 %), et que les modules de chaleur et couplage apportent une valeur réelle pour les elites. Elle tient aussi à sa capacité de décomposition par discipline (permettant un plan de course actionnable), à son adaptation au parcours spécifique (altitude, météo, technicité) et à son fonctionnement sans historique — trois propriétés qu'un simple estimateur statistique ne peut offrir.
Le modèle reste en amélioration continue. Les axes prioritaires sont le stockage des seuils historiques (pour éliminer le biais temporel, principal facteur d'erreur chez les age-group), l'amélioration de la modélisation de la chaleur extrême (surcorrection competitive), et l'élargissement du dataset pour les profils age-group.
[1] Rust, C.A. et al. (2021). "What Is the Best Discipline to Predict Overall Triathlon Performance?" Frontiers in Physiology, 12, 654552.
[2] Ely, M.R. et al. (2007). "Impact of Weather on Marathon-Running Performance." Medicine & Science in Sports & Exercise, 39(3), 487-493.
[3] Minetti, A.E. et al. (2002). "Energy cost of walking and running at extreme uphill and downhill slopes." Journal of Applied Physiology, 93(3), 1039-1046.
[4] Hausswirth, C. & Brisswalter, J. (2008). "Strategies for improving performance in long duration events." Sports Medicine, 38(11), 881-891.
[5] Millet, G.P. & Vleck, V.E. (2000). "Physiological and biomechanical adaptations to the cycle to run transition in Olympic triathlon." British Journal of Sports Medicine, 34(5), 384-390.
[6] Blocken, B. et al. (2018). "CFD simulations of the aerodynamic drag of two drafting cyclists." Computers & Fluids, 171, 209-229.
[7] Chatard, J.C. et al. (1998). "Analysis of body composition, swimming performance and estimated energy expenditure." European Journal of Applied Physiology, 78(2), 109-113.
[8] Coggan, A.R. (2003). "Training and racing using a power meter." Training Peaks whitepaper.