Repéré en marge de #193.
Constat
Sur decp_prod.parquet, vue donneesActuelles : 17 095 marchés (0,9 %) portent plusieurs montants distincts pour un même couple (uid, modification_id), répartis sur 18 616 groupes. Ce n'est pas un artefact de l'historique des modifications : 13 915 de ces marchés n'ont qu'un seul modification_id.
Ce n'est pas du bruit d'arrondi
Écart entre le montant minimum et maximum d'un même groupe :
| écart |
groupes |
| facteur > 10 |
7 422 |
| facteur 2 à 10 |
6 486 |
| facteur < 2 |
2 914 |
| min = 0 |
1 613 |
| quasi identiques (< 1 %) |
181 |
Quatre causes, très inégales
| cas |
groupes |
marchés |
| source unique, plusieurs titulaires → montant par co-titulaire |
15 319 |
14 193 |
| sources multiples, plusieurs titulaires → mixte |
1 959 |
1 825 |
| source unique, 1 seul titulaire → conflit intra-source |
844 |
843 |
| sources multiples, 1 seul titulaire → doublon inter-sources |
494 |
494 |
Cas dominant (82 %) — un montant par co-titulaire. Exemple 2000711650016720232023A0460000 (scrap_marches-securises.fr, modification_id 0) : SA EPSILON 180 000 €, ARTICA TRAITEMENT 40 000 €.
C'est la question centrale à trancher : s'agit-il d'une répartition légitime du montant entre membres d'un groupement, ou d'une publication incohérente de la source ? Les deux réponses mènent à des corrections opposées. Si c'est une répartition, alors montant n'est pas un attribut du marché sur ces lignes, et tout dédoublonnage par uid qui retient une valeur arbitraire sous-estime le marché (180 000 au lieu de 220 000).
Doublon inter-sources. Exemple 247400013000142024M011, même modification_id, même titulaire 83443047200029 : 16 800 € via aws_marches-publics.info, 48 000 € via pes_marche_2024. Deux publications du même marché qui n'ont pas fusionné.
Concentration par source
| source |
marchés touchés |
marchés |
part |
| aws_marches-publics.info |
6 658 |
53 667 |
12,4 % |
| scrap_marches-publics.info |
3 886 |
80 185 |
4,8 % |
| megalis_bretagne |
1 450 |
45 778 |
3,2 % |
| e-marchespublics.com_dematis |
990 |
108 719 |
0,9 % |
| decp_colmo |
685 |
340 295 |
0,2 % |
Le problème est concentré sur les sources scrapées ; decp_colmo est quasiment indemne.
Impact en aval
colibre dédoublonne par marché avec group_by("uid").agg(montant.first()). Sur ces 17 095 marchés, la valeur retenue dépend de l'ordre des lignes, avec un écart supérieur à un facteur 10 dans 7 422 cas.
Pistes
- trancher le cas « montant par co-titulaire » (répartition vs incohérence), en confrontant quelques marchés à leur publication d'origine
- pour les doublons inter-sources, définir une règle de priorité entre
sourceDataset lors de la fusion
- pour les conflits intra-source à titulaire unique (844 groupes), vérifier s'il s'agit de lots distincts mal aplatis
Repéré en marge de #193.
Constat
Sur
decp_prod.parquet, vuedonneesActuelles: 17 095 marchés (0,9 %) portent plusieurs montants distincts pour un même couple(uid, modification_id), répartis sur 18 616 groupes. Ce n'est pas un artefact de l'historique des modifications : 13 915 de ces marchés n'ont qu'un seulmodification_id.Ce n'est pas du bruit d'arrondi
Écart entre le montant minimum et maximum d'un même groupe :
Quatre causes, très inégales
Cas dominant (82 %) — un montant par co-titulaire. Exemple
2000711650016720232023A0460000(scrap_marches-securises.fr,modification_id0) : SA EPSILON 180 000 €, ARTICA TRAITEMENT 40 000 €.C'est la question centrale à trancher : s'agit-il d'une répartition légitime du montant entre membres d'un groupement, ou d'une publication incohérente de la source ? Les deux réponses mènent à des corrections opposées. Si c'est une répartition, alors
montantn'est pas un attribut du marché sur ces lignes, et tout dédoublonnage paruidqui retient une valeur arbitraire sous-estime le marché (180 000 au lieu de 220 000).Doublon inter-sources. Exemple
247400013000142024M011, mêmemodification_id, même titulaire83443047200029: 16 800 € viaaws_marches-publics.info, 48 000 € viapes_marche_2024. Deux publications du même marché qui n'ont pas fusionné.Concentration par source
Le problème est concentré sur les sources scrapées ;
decp_colmoest quasiment indemne.Impact en aval
colibre dédoublonne par marché avec
group_by("uid").agg(montant.first()). Sur ces 17 095 marchés, la valeur retenue dépend de l'ordre des lignes, avec un écart supérieur à un facteur 10 dans 7 422 cas.Pistes
sourceDatasetlors de la fusion