📚 case-study & architecture

CPF Recherche : Démocratiser, Analyser et Optimiser la Recherche de Formations CPF

Découvrez les objectifs stratégiques, l'architecture de données haute performance et la vision produit qui propulsent la plateforme CPF Recherche.

CR
L'équipe CPF Recherche
4 Juillet 2026
⏱️ 8 min de lecture

1. Le Contexte & La Problématique

En France, la formation professionnelle est un pilier de la reconversion et de l'adaptation des compétences aux réalités de l'emploi. Via le Compte Personnel de Formation (CPF), des millions de salariés et de demandeurs d'emploi disposent de droits financiers accumulés chaque année pour se former.

Cependant, le catalogue officiel consolidé (publié par la Caisse des Dépôts et Consignations sur l'Open Data français) comporte des dizaines de milliers d'offres et fait l'objet d'un fichier de données brutes particulièrement massif (plusieurs centaines de mégaoctets). Pour un citoyen ou un conseiller en évolution professionnelle, l'accès à ces informations est souvent freiné par des interfaces complexes, des filtres rigides, ou des temps de chargement décourageants.

"La donnée publique n'est réellement utile que lorsqu'elle est accessible de manière simple, transparente et instantanée."


2. Les Objectifs Stratégiques du Projet

La plateforme CPF Recherche a été initiée avec la volonté forte de réconcilier l'agilité technique avec les besoins des usagers de la formation. Elle répond à trois objectifs fondamentaux :

🔎 Fluidité d'accès

Proposer une interface de recherche moderne et réactive permettant de filtrer par thématique, localisation (département, code postal) ou organisme en moins de 100ms.

📅 Historisation Temporelle

Conserver une trace chronologique des dates d'extraction de chaque offre afin d'identifier la permanence ou la saisonnalité des programmes de formation.

📊 Analyse du Marché

Extraire des indicateurs statistiques (histogrammes temporels, répartition géographique) pour observer les évolutions de l'offre de compétences au niveau national.


3. Les Coulisses Techniques : Architecture du Pipeline de Données

Pour relever ce défi d'historisation et de performance, l'application s'appuie sur une stack technique hautement optimisée alliant Python 3.13, le micro-framework Flask, et la base de données NoSQL MongoDB 7.0.

Le flux de traitement des données
☁️ API de Data.gouv.fr (Fichier JSON complet)
⬇️
🚀 Stream Parser (ijson) & Dépôt en chunks
⬇️
🔑 Hash SHA-256 (Canonical Serialization)
⬇️
💾 Upsert MongoDB ($addToSet historique dates)

L'ingestion de données massives sans explosion mémoire

Comme le démontre notre service d'importation [sync.py](file:///C:/Users/renau/OneDrive/Documents/antigravity/CPF_Recherche/services/sync.py), le catalogue brut peut faire crouler un serveur si le fichier entier est chargé en mémoire. CPF Recherche utilise ainsi ijson, un parser itératif écrit en C/Python. Les enregistrements sont décodés en continu, transformés, et envoyés par lots (bulk writes) vers MongoDB, garantissant un usage de RAM stable sous la barre des 150 Mo.

Le dédoublonnement intelligent via SHA-256

Pour suivre la permanence d'une formation dans le temps sans dupliquer ses caractéristiques statiques (intitulé, niveau, objectifs, code RNCP), nous appliquons une sérialisation canonique. L'objet JSON est trié par ordre alphabétique de clés, puis haché en SHA-256. Lors de l'import, nous effectuons une opération de mise à jour unique (Upsert) dans MongoDB :

# Extrait de la logique de sync.py
operation = UpdateOne(
    {"Hash": sha256_hash},
    {
        "$addToSet": {"dates": clean_date},
        "$setOnInsert": {"data": element}
    },
    upsert=True
)

Ainsi, si l'offre est déjà connue, seule sa présence à la date d'extraction est consignée dans le tableau dates. S'il s'agit d'une nouvelle offre, tout le bloc signalétique est enregistré.

Indexation Multi-niveaux sous MongoDB 7.0

Pour supporter des temps de recherche sub-déciseconde, la base de données est configurée au démarrage [db.py](file:///C:/Users/renau/OneDrive/Documents/antigravity/CPF_Recherche/services/db.py) avec des index spécialisés :

  • Index unique sur le Hash : Accélère les écritures et empêche tout doublon physique d'une formation.
  • Index multiclés (Multikey Index) sur `dates` : Idéal pour charger instantanément les listes de filtres par date ou restreindre une recherche à une période précise.
  • Index textuel (`$text`) : Indexation linguistique avec troncature des mots en français sur les titres et les descriptions d'objectifs, permettant la recherche par mots-clés flous.

4. La Finalité : De la Recherche Simple à l'Analyse Prédictive

L'application finale ne se cantonne pas à être un énième annuaire statique. Grâce aux pipelines d'agrégation chronologiques de MongoDB (présents dans notre moteur de recherche [search.py](file:///C:/Users/renau/OneDrive/Documents/antigravity/CPF_Recherche/services/search.py)), la plateforme devient un véritable outil de Business Intelligence (BI) pour le secteur de la formation.

Les utilisateurs peuvent suivre en direct l'évolution de l'intérêt pour certaines spécialisations. Par exemple, saisir le terme "Intelligence Artificielle" ou "Cybersécurité" permet d'afficher un graphique en barres matérialisant l'augmentation ou la diminution du nombre d'offres de formation associées à ces technologies ces derniers mois.

Cette traçabilité des données apporte une transparence inédite aux candidats comme aux recruteurs, en modélisant les tendances d'acquisition de compétences en temps réel.


Conclusion & Perspectives d'Évolution

CPF Recherche prouve qu'en exploitant intelligemment les capacités NoSQL de MongoDB et en optimisant l'ingestion de données avec Python, on peut redonner vie à des bases de données Open Data complexes et les rendre accessibles à tous de façon réactive.

La prochaine étape de développement consistera à croiser ces données d'offres historiques avec les statistiques des métiers en tension publiées par France Travail, pour orienter plus efficacement les utilisateurs vers les formations au plus fort taux de retour à l'emploi.