# Clustering & Déduplication - 🗺️ **Contexte**: on ingère de la donnée d’acteurs de l’économie circulaire de [plusieurs sources](https://data.ademe.fr/) - 🔴 **Problème**: certains acteurs sont en doublon, polluant l'application utilisteur - 🟢 **Solution**: faire un travail pour réduire les doublons et améliorer la cohérence des données - 🤔 **Comment**: voir ci-dessous ## ⚠️ Limitations connues - **On ne séparent pas les enfants d’un cluster existant**: choix de notre part, pour l’instant on veut uniquement ajouter des nouveaux enfants. Pour changer il faudra [CLUSTERING & DEDUP: re-clusteriser les enfants existants](https://www.notion.so/CLUSTERING-DEDUP-re-clusteriser-les-enfants-existants-1956523d57d7801abe3bc132ec7e33b0?pvs=21). Pour l’instant: - 🟢 **avantage**: pas de risque d’endommager des clusters existants - 🟠 **inconvénient**: pas d’opportunité de re-clustering les mauvais cluster existants - **Pas de re-clustering enfants = pas de contexte enfant**: conséquence du dessus, les enfants n’ont pas leur donnée récupérée ni normalisée, ce qui peut poser des problèmes de contexte, donc on à fait https://github.com/incubateur-ademe/quefairedemesobjets/pull/1379 en attendant ## 📜 Définition - 📦 **Clustering:** fait de **regrouper** des acteurs via leur **similarité** - 1️⃣ **Déduplication**: convertir un **cluster** en **1 seul acteur** pour ne **plus avoir de doublons** - 🎏 **Etat final idéal d’un acteur**: on se concentre sur les acteurs statut=ACTIF
Etat 🇫🇷 | Code 🇬🇧 | Définition | Correspond à une source en particulier | Visible sur la carte |
---|---|---|---|---|
parent(s) | parent(s) | acteur qui a 1 ou plusieurs enfants rattachés à lui | 🟠 NON on créé un parent “artificiel” pour que celui-ci vive de manière détachée de ses enfants = plus robuste à travers le temps, pas besoin de changer le parent à chaque fois que les enfants changent |
🟢 OUI |
enfant(s) | child / children | acteur rattaché à 1 parent (1 est le maximum) | 🟢 OUI C’est de cette source que vient l’acteur |
🟠 NON C’est le parent qui est affiché |
orphelin(s) | orphan(s) | acteur rattaché à 0 parent | 🟢 OUI C’est de cette source que vient l’acteur |
🟢 OUI |
modèle de changement | Etat avant | Etat après | Scénario | Conséquences dans revision | Conséquences dans displayed |
---|---|---|---|---|---|
acteur_create_as_parent | Orphelin | Parent | ➕ Nouveau parent pour nouveau cluster | ➕ Parent à créer ➕ Donnée enrichie au mieux |
pareil que révision |
acteur_keep_as_parent | Parent | Parent | 1️⃣ 1 seul parent existant -> à garder | 🟰 Toujours parent du cluster ➕ Donnée enrichie au mieux |
pareil que révision |
acteur_keep_as_parent | Parent | Parent | 🎖️ 2+ parents dans cluster -> celui avec + d'enfants -> à garder | 🟰 Toujours parent du cluster ➕ Donnée enrichie au mieux |
pareil que révision |
acteur_delete_as_parent | Parent | N’existera plus | 🔴 2+ parents dans cluster -> non choisi -> à supprimer | 🛑 Devrait être automatiquement supprimé suite à la mise à jour de ces enfants (voir PR1247) | 🛑 Devrait disparaitre de displayed |
acteur_verify_in_revision | Enfant | Enfant | 🟰 Pointe déjà vers nouveau parent → rien à faire | Aucune | Aucune |
acteur_update_parent_id | Enfant | Enfant | 🔀 Pointait vers un parent qui n’a pas été choisi → à pointer vers nouveau parent | 🔀 Mettre à jour parent_id pour pointer vers nouveau parent | Aucune |
acteur_update_parent_id | Orphelin | Enfant | 🔀 à pointer vers un parent | 🔀 Mettre à jour parent_id pour pointer vers nouveau parent | 🛑 Devrait disparaitre de displayed |
Orphelin | Orphelin | Ne fais toujours pas parti d’un cluster (pas de changement) | Aucune | Aucune |