Tracer le chaos, entendre le silence avant la chute, révéler le vide dans la tempête.

ChaosTrace est un toolkit Python lightweight et open-source conçu pour analyser les systèmes multivariés chaotiques en haute performance, avec un focus initial sur la navigation des catamarans foil F50 (SailGP).

Il transforme des séries temporelles bruyantes et instables (vitesse bateau, hauteur foil, vent apparent, rake, VMG, accelerations…) en signaux exploitables :

  • Détection précoce de foil drops imminents

  • Identification de transitions de régime (stable → chaotique, displacement → foiling)

  • Révélation des anomalies subtiles et des null-traces (stabilités suspectes qui précèdent souvent une perte de contrôle)

Ce qui le rend vraiment différent

Zéro deep learning / zéro GPU : tout repose sur des méthodes classiques de chaos (reconstruction d'espace des phases Takens, RQA légère, exponent Lyapunov approximé, graphes d'états Markov, delta-stats, null-trace detection)

Sweeps paramétriques massifs : exploration exhaustive des fenêtres temporelles, lags d'embedding, seuils de drop… en mode CI-friendly (parallélisé, reproductible)

Reproductibilité extrême : chaque run génère un manifest.json + hashes SHA-256 sur tous les artefacts (metrics, anomalies, visualisations)

Données synthétiques réalistes intégrées : générateur déterministe de trajectoires F50 avec chaos contrôlé (vent shear, perturbations initiales, drops probabilistes) - parfait quand les vraies télémétries SailGP restent fermées

CI comme citoyen de première classe : workflows GitHub Actions pour lint, tests, sweeps nightly légers/heavy

Exemples concrets d'usage

Visualisation 3D d'espace des phases (boat_speed × foil_height × wind_speed) montrant attracteurs bistables et transitions

Timeline d'anomaly score avec pics avant les bascules foil

Graphe d'états foil/wind révélant cycles anormaux ou dead-ends

Détection de fenêtres "silencieuses" (variance foil anormalement basse) qui signalent un piège imminent

En résumé : ChaosTrace ne cherche pas à prédire bêtement la prochaine position. Il fait parler le chaos en révélant ce que les modèles ML classiques ratent souvent : les structures cachées, les silences suspects et les bifurcations dans le bruit.

Idéal pour : analystes performance voile, chercheurs en systèmes dynamiques/chaos, passionnés de data qui veulent explorer sans budget cloud massif.

Flux d’exécution concret (ce qui tourne vraiment)

  1. Parsing des arguments La CLI lit les flags (--input, --out, --runs, --seed, etc.) et valide les chemins.

  2. Chargement des données Lit le fichier CSV spécifié (ex. sample_timeseries.csv). Attend des colonnes standard : time_s, boat_speed, foil_height_m, wind_speed, wind_angle_deg, heading_deg, etc. (multivarié haute fréquence). Transforme en pandas DataFrame (ou structure interne similaire).

  3. Boucle de sweep (le cœur du traitement) Pour chaque itération (de 1 à --runs, ex. 3 ou 25) : Initialise un seed RNG (si --seed fourni → fixe pour toute la boucle, sinon random par run). Tire (ou fixe) une combinaison de paramètres pour ce run : Taille de fenêtre glissante (window_s, ex. 5.0 s) Seuil de drop foil (drop_threshold, ex. 0.25 m) Dimension d’embedding (emb_dim, ex. 3) Lag d’embedding (emb_lag, ex. 3, 5, 8 ; souvent le paramètre qui varie le plus dans les petits sweeps) Autres seuils/fenêtres selon config interne

  4. Reconstruction de l’espace des phases (Takens embedding) Sélectionne les variables clés (souvent boat_speed, foil_height, wind_speed ou combinaisons). Applique l’embedding de Takens : pour chaque série temporelle, crée des vecteurs retardés (lag) en dimension emb_dim. Résultat : trajectoires multivariées dans un espace reconstruit (utilisé pour visualiser attracteurs et pour certains analyzers).

  5. Exécution des analyseurs plug-and-play (en séquence ou parallèle si implémenté) Chaque analyzer traite les données (brutes ou embedded) et produit des métriques/scores : null_trace : détecte fenêtres de stabilité anormale (laminar_frac, rolling_std_median sur foil_height). delta_stats : variations relatives locales (score_mean, score_p95 sur boat_speed vs foil_height, etc.). markov_drop : chaîne de Markov sur états foil (drop/no-drop) → probas de transition (p00, p01, p10, p11), drop_frac. foil_state_graph : graphe NetworkX des transitions d’états foil → compte cycles, dead-ends, max_low_run, p_low. rqa_light : métriques de récurrence basiques sur boat_speed (rr, det_proxy). lyap_like : estimation approchée de l’exposant de Lyapunov (divergence locale). score agrégé : combinaison pondérée ou simple moyenne des scores pour produire un anomaly score par fenêtre temporelle.

  6. Agrégation et timeline d’anomalies Pour chaque run : produit une série temporelle d’anomaly scores (ex. une valeur toutes les 0.05-0.1 s). Calcule des stats globales par run (score_mean_mean, score_mean_p95, etc.).

  7. Génération des outputs (dans le dossier --out) manifest.json : version Python, OS, params exacts, liste des fichiers produits + leur SHA-256. metrics.csv : une ligne par run avec toutes les métriques des analyzers + run_id. anomalies.csv : timeline complète (run_id, time_s, score_mean). fig_phase.png : visualisation Matplotlib 3D de l’espace des phases (trajectoire + points, souvent agrégée ou pour un run représentatif).

  8. Fin du processus Le programme termine proprement. Tu peux inspecter les résultats avec cat ciout/demo/manifest.json, ouvrir le PNG, etc.

https://github.com/dalozedidier-dot/ChaosTrace.git

Archive LinkedIn importée le 19/09/2026.Voir la publication d’origine sur LinkedIn →
Retour aux analysesToutes les analyses