PROJECT · 08/08 · conecsio ← cd ..

// projet de fin d'études · conecsio · 2025-2026 · binôme

Conecsio.

Moteur de clustering hybride pour la découverte automatique de cohortes de patients à partir de données FHIR — IA explicable + enrichissement sémantique.

Python 3.11FastAPIReact / Vite scikit-learnHDBSCANUMAP FHIRSNOMED CTLOINC Ollama / QwenDockerDCAT-AP

// Contexte

PFE réalisé chez Conecsio, entreprise spécialisée dans l'interopérabilité de données de santé via le standard FHIR. La problématique : les entrepôts hospitaliers contiennent des millions de dossiers patients non étiquetés. Comment segmenter automatiquement des populations cliniquement similaires sans règles manuelles ?

Le « paradoxe FHIR » : excellent pour les échanges transactionnels (dossier d'un patient), mais faible pour l'analyse populationnelle. Notre solution : un moteur hybride combinant clustering statistique et enrichissement sémantique via les ontologies médicales.

// Architecture

Pipeline ETL modulaire : ingestion FHIR → enrichissement sémantique (roll-up) → vectorisation TF-IDF → réduction dimensionnelle (Truncated SVD) → clustering (HDBSCAN) → visualisation (UMAP) → export DCAT-AP.

flowchart LR
  F["Données FHIR (JSON bundles)\nPatient · Condition · Observation · RxNorm"]
  F --> TL["Terminology Layer (Roll-up sémantique)\nSNOMED CT + LOINC → codes parents\nStop-list (GENERIC_ROOTS)"]
  TL --> TF["Vectorisation TF-IDF + Pondération\nConditions 1.5 > Medications 1.0 > Observations 0.8"]
  TF --> SVD["Truncated SVD (50 dim, 85% variance)\n+ MinMaxScaler (âge normalisé 0-1)"]
  SVD --> HDB["HDBSCAN (clusters)"]
  SVD --> KM["K-Means (comparatif)"]
  SVD --> UMAP["UMAP (viz) Biplot"]
  HDB --> LLM["LLM (Qwen / Ollama)\ndescription narrative\n+ Export DCAT-AP (RDF/Turtle, FAIR)"]
        

// Projection UMAP + HDBSCAN

Projection UMAP avec clusters HDBSCAN

Projection UMAP — îlots de patients colorés par cluster HDBSCAN, bruit isolé en gris

UMAP préserve la structure topologique locale contrairement à la SVD (linéaire). Les patients partageant des trajectoires cliniques similaires forment des îlots denses et distincts. HDBSCAN identifie ces îlots naturellement et isole le bruit clinique (outliers) sans forcer l'appartenance.

// Export RDF / DCAT-AP

Graphe RDF généré par DCAT-AP

Graphe de métadonnées RDF (DCAT-AP) — cohorte décrite comme ressource interopérable

Chaque cohorte découverte est exportée au format Health DCAT-AP (RDF/Turtle) via RDFLib, décrivant la provenance, les algorithmes utilisés et les caractéristiques cliniques. Cela transforme le résultat du clustering en un objet numérique standardisé, publiable sur des portails Open Data.

// HDBSCAN vs K-Means

// HDBSCAN — retenu

Densité variable, isole le bruit, clusters de forme arbitraire. Stabilité ARI > 0.90 sur 50 itérations de bootstrap. Idéal pour les données médicales hétérogènes.

// K-Means — comparatif

Partitions sphériques, force l'appartenance de chaque point. ARI > 0.80 mais plus dispersé. Utile pour une segmentation macro mais sensible aux outliers.

// MVP Web + LLM

Application web full-stack conteneurisée (Docker) : backend FastAPI asynchrone pour lancer les clusters en arrière-plan, frontend React/Vite/Tailwind avec visualisations interactives. Un LLM (Qwen via Ollama, inférence locale) génère une synthèse narrative de chaque cluster (ex: « groupe gériatrique avec comorbidités cardiovasculaires »).

// IA explicable

Biplot + Top Codes pour retracer pourquoi un patient est assigné à un cluster. Pas de boîte noire.

// Éco-conception

Images Docker réduites de 95% (multi-stage builds). SVD sur CPU, GPU réservé au LLM ponctuel.