Algorithme de prédiction
Vue d'ensemble
Le moteur de prédiction estime le temps de course trail à partir des données d'entraînement récentes (180 jours). Il calcule des métriques dérivées pour chaque activité, les agrège en sous-scores, puis simule la course segment par segment en appliquant des facteurs de pente, technicité, altitude et fatigue.
1. Traitement des activités
Synchronisation
- Première sync : récupère les activités des 180 derniers jours
- Sync incrémentale : récupère uniquement les activités postérieures à la plus récente en base
- Les activités sont filtrées par type (Run, TrailRun)
- Pour chaque activité, les streams (données seconde par seconde) sont récupérés
- Détection de doublons : même utilisateur, date ±2 min, distance ±10%
Grade Adjusted Pace (GAP)
Utilise le polynôme de coût métabolique de Minetti et al. (2002) pour convertir la vitesse réelle en vitesse équivalente à plat :
C(g) = 155.4·g&sup5; - 30.4·g&sup4; - 43.3·g³ + 46.3·g² + 19.5·g + 3.6
GAP = vitesse × C(0) / C(grade)
Meilleures performances (Best Effort)
Fenêtres glissantes sur les streams pour trouver la meilleure vitesse GAP moyenne sur :
- v30 : 30 minutes
- v60 : 60 minutes
- v120 : 120 minutes
Autres métriques dérivées
- Vitesse ascensionnelle : D+/h sur les sections à plus de 2% de pente
- Dérive cardiaque : variation de FC entre 1ère et 2ème moitié
- Déclin de vitesse : variation de vitesse entre 1ère et 2ème moitié
- Index d'endurance :
1.0 + speed_decay - HR_drift × 0.5, borné [0, 1]
Charge d'entraînement (TRIMP)
Formule de Banister (1991) avec réserve cardiaque :
TRIMP = durée × ΔFC × k
où ΔFC = (FC_exercice - FC_repos) / (FC_max - FC_repos) et k = 0.64 × e^(1.92 × ΔFC) (hommes).
2. Modèle Forme / Fatigue / Fraîcheur
Implémentation du Performance Management Chart (PMC) de Banister (1991) avec EWMA :
| Métrique | Constante | Interprétation |
|---|---|---|
| Forme (CTL) | 42 jours | Condition physique accumulée |
| Fatigue (ATL) | 7 jours | Fatigue récente |
| Fraîcheur (TSB) | CTL - ATL | Balance entraînement/récupération |
Poids de récence
Décroissance exponentielle composite avec trois demi-vies (21, 45 et 90 jours) capturant respectivement la forme récente, l'adaptation moyenne et la base aérobie profonde.
3. Sous-scores d'entraînement
Chaque sous-score est la moyenne pondérée par récence, normalisée par une référence élite :
| Sous-score | Source | Référence | Poids |
|---|---|---|---|
| Seuil | v30 (GAP) | 5.0 m/s | 35% |
| Base aérobie | v60 (GAP) | 4.5 m/s | 25% |
| Montée | Vitesse ascensionnelle | 1200 m D+/h | 25% |
| Endurance | Index d'endurance | 0.95 | 15% |
4. Prédiction de course
Vitesse de base
v_base = 0.30 × v30 + 0.50 × v60 + 0.20 × v120
Simulation segment par segment
Pour chaque segment :
vitesse = v_base × A(pente) × B(technicité) × C(altitude) × D(fatigue) × E(fraîcheur)
| Facteur | Description |
|---|---|
| A (pente) | Coût métabolique de Minetti : ratio C(0)/C(grade) |
| B (technicité) | 1.00 (facile) → 0.65 (très technique) |
| C (altitude) | -3%/1000m au-dessus de 1500m, plancher 0.80 |
| D (fatigue) | Décroissance progressive calibrée par l'endurance, plancher 0.70 |
| E (fraîcheur) | Modulation ±10% selon la balance CTL/ATL |
Estimation énergétique
Basée sur le modèle de Minetti : énergie = Σ C(grade) × poids × distance
5. Vitesse Critique / D' (CS/D')
Le moteur estime les paramètres du modèle linéaire distance-temps :
d = CS × t + D'
- CS (Critical Speed) : vitesse maximale soutenable asymptotiquement
- D' : réserve de distance au-dessus de CS (capacité anaérobie)
Estimé par régression linéaire sur les meilleurs efforts GAP (v30, v60, v120). Le R² sert d'indicateur de cohérence.
Plancher de vitesse (CS)
Après 2h de course cumulées, la vitesse par segment ne descend plus en dessous de CS ajusté au terrain. Cela empêche des prédictions excessivement pessimistes sur les ultras.
D' pour l'estimation optimiste
Le scénario optimiste simule la dépense et la régénération de D' segment par segment : dépense au-dessus de CS, récupération partielle en dessous (τ = 5 min), et boost sur les segments courts en montée.
Réf. : Monod & Scherrer (1965), Morton (2006), Skiba et al. (2012)
6. Ajustements physiologiques
Si le profil physiologique est renseigné :
- Vitesse soutenable VT2 : plafond à 85% de la vitesse au seuil ventilatoire 2
- Plafond VMA : vitesse de course ≤ 70% VMA (60% pour ultra > 50 km)
7. Fourchette de confiance
incertitude = 25% - 15% × score_confiance
Le score de confiance (0-1) agrège le volume de données, la qualité des streams, les données d'endurance et physiologiques. Plancher d'incertitude : 10% (aléa irréductible lié aux conditions de course).
8. Comparaison prédiction vs réalisé
Quand une activité est associée à une course, les temps réels par segment sont interpolés depuis les streams GPS. Un facteur d'échelle compense la différence GPS/course. L'écart est coloré par segment (vert/bleu = plus rapide, orange/rouge = plus lent).
9. Segmentation GPX
Le fichier GPX est découpé en segments homogènes de ~500m par la formule de Haversine, classifiés par pente moyenne :
| Pente | Type |
|---|---|
| > 15% | Montée raide |
| > 5% | Montée |
| > 1% | Faux-plat montant |
| -1% à 1% | Roulant |
| -10% à -1% | Descente |
| < -10% | Descente raide |