La qualité des données est un enjeu central dans l’exploitation des bases de données publiques. Dans le cadre du projet EurosForDocs, qui vise à apporter de la transparence sur les liens financiers entre entreprises du médicament et professionnels de santé, cet enjeu est particulièrement critique. La fiabilité des analyses repose sur notre capacité à identifier sans ambiguïté chaque professionnel de santé recevant une rémunération ou un avantage.
Le RPPS (Répertoire Partagé des Professionnels de Santé) est un répertoire étatique national qui recence l’ensemble des professionnels de santé en France et leur attribue un numéro unique et public. Ce numéros est par exemple visible dans la partie “Informations légales” page d’un praticien sur Doctolib, ou sur une ordonnance. En théorie, le numéro RPPS devrait garantir une association fiable entre une déclaration de rémunération d’un entreprise et un professionnel de santé. Il est donc essentiel de s’assurer que cette information soit la plus juste possible. Cependant, en pratique, les erreurs de saisie sont fréquentes. Il n’est pas rare qu’un même professionnel se voit attribuer plusieurs numéros RPPS par une même entreprise, créant ainsi des conflits qui faussent l’analyse.
Cet article présente une méthodologie pour détecter et corriger ces incohérences à grande échelle. Nous y détaillons une approche de fuzzy matching qui consiste à mesurer la similarité entre les données déclarées et celles d’une source officielle. Selon le niveau de similarité mesuré, on peut alors corriger les données. Cette méthode permet d’automatiser le nettoyage des identifiants et d’améliorer significativement la qualité de la base de données.
Pour une vision plus générale des enjeux de qualité des données du projet EurosForDocs, vous pouvez consulter cet article.
Le problème : des identifiants uniques qui ne le sont pas #
Le numéro RPPS est la clé de voûte du système de déclaration. Chaque professionnel de santé devrait être associé à un numéro unique pour garantir une identification fiable à travers différentes déclarations de différentes entreprises.
Toutefois, la réalité des données est plus complexe. Nous constatons de nombreux cas pour lesquels une même entreprise déclare plusieurs rémunérations avec les même nom, prénom, profession et code postal de bénéficiaire (ce qui semble indiquer la même personne) mais avec des numéros RPPS différents. Cette situation crée une ambiguïté : s’agit-il d’une erreur de saisie ou de deux professionnels distincts mais homonymes ?
Pour lever le doute, la procédure consiste à comparer les informations officielles liées à chaque numéro RPPS déclaré avec les autres informations déclarées par l’entreprise. Cette démarche permet d’identifier des numéros RPPS absurdes par rapport aux informations déclarées, et de déterminer le numéro qui semble le plus pertinent par rapport à la déclaration.
Prenons un exemple concret :
Un laboratoire déclare un bénéficiaire, “Jean Crochet”, en lui associant deux numéros RPPS : 10002956406 et 10003257325.
- Le répertoire RPPS confirme que le numéros
...406appartient bien au Dr. Jean Crochet, médecin exerçant dans le département déclaré. Les informations sont cohérentes. - En revanche, le numéro
...325est attribué au Dr. Nathalie Bourgeois, une autre praticienne. Les informations sont clairement incohérentes.
Ce simple croisement suffit à invalider le second numéro RPPS et à résoudre l’ambiguïté. Le défi n’est pas conceptuel mais opérationnel : avec plus de 12 500 cas similaires identifiés, et de nouveaux cas pouvant apparaître quotidiennement, un traitement manuel est inenvisageable. Il est donc nécessaire de développer une méthode automatisée pour appliquer ce raisonnement de manière systématique et fiabiliser la base de données.
Une approche souple : la similarité textuelle #
La simple vérification des identifiants se heurte rapidement à une autre réalité : les informations déclarées (nom, prénom) sont souvent proches mais pas strictement identiques à celles du répertoire. Une coquille, une inversion entre nom et prénom, ou l’utilisation d’un nom d’usage peuvent suffire à invalider à tort un rapprochement.
Par exemple, un médecin “Jean-Luc Vilatte” est déclaré avec deux numéros RPPS. Le répertoire officiel indique qu’un numéro appartient à “Jean-Luc Vallet” et l’autre à “Jean-Luc Villate”. Une comparaison stricte rejetterait les deux options. Cependant, de nombreux algorithmes proposent différentes manières de mesurer de la similarité entre deux chaines de caractère. Le projet EurosForDocs a choisi de travailler avec la métrique de Jaro-Winkler. La définition exacte de cette métrique n’étant pas l’objectif de cet article, les lecteurs curieux pourront se référer à cet article. En utilisant cette métrique, on mesure pour “Villate” 97% de similarité envers “Vilate” mais seulement 74% envers “Vallet”. Cette métrique nous permet donc d’identifier le nom qui correspond le moins à la déclaration.
Plutôt que de chercher une correspondance exacte, notre méthode va donc créer un score de similarité entre les informations déclarées et les informations officielles. Ce score est défini comme la somme entre la similarité des prénoms et la similarité des noms. Un numéro RPPS absurde aura donc un score de similarité proche de zéro alors qu’une déclaration parfaite aura un score de 2 (100% pour chaque partie de l’identité). Cette approche, connue sous le nom de fuzzy matching, offre la flexibilité nécessaire pour gérer différents types d’erreurs de saisie.
Gérer les erreurs de saisie courantes #
Il est à noter que même dans le répertoire RPPS, un même professionnel peut apparaître sous plusieurs noms. Un cas typique est la présence de docteures qui apparaissent avec différentes combinaisons de leur nom de jeune fille et de leur nom d’épouse. Dans ce cas, nous calculons le score de similarité pour toutes les variations. Le meilleur score de chaque numéro RPPS servira à identifier le numéro le plus pertinent.
Mais il existe également différents types d’erreur de saisie qui donnent de mauvais scores de similarité et ne permettent pas de sélectionner correctement le numéro RPPS correct.
-
Les inversions nom/prénom : Il arrive que les champs noms et prénom soient inversés lors de la saisie. Pour neutraliser cet effet, nous calculons la similarité à la fois sur
nom/prénomet surprénom/nom(en plus des traditionnelsnom/nometprénom/prénom), et nous retenons le score le plus favorable. -
Les noms et prénoms composés : Un professionnel nommé “Loriot De Rouvray” peut être déclaré simplement comme “De Rouvray”. Utiliser directement la métrique de Jaro-Winkler ne donnerait que 42% de similarité; ce qui est très faible. Pour résoudre ce cas, nous utilisons une métrique personnalisée : on compte le nombre de mots en commun entre le nom déclaré et l’officiel, divisé par le plus petit nombre de mots dans l’un des deux noms. Ainsi, “De Rouvray” et “Loriot De Rouvray” obtiennent une similarité de 100%. En effet les deux noms ont deux mots en commun (“De” et “Rouvray”) et le plus petit nom contient également deux mots. La même logique s’applique aux prénoms, permettant de reconnaître “Jean” comme une version courte de “Jean-Luc”.
La similarité finale est alors une combinaison des différents facteurs décrits plus tôt. Le calcul se décompose en plusieurs étapes pour obtenir un score de similarité global.
L’objectif est de construire un score robuste qui prend en compte les différentes manières dont un nom et un prénom peuvent être saisis.
-
Évaluation de la similarité pour le nom et le prénom Pour le nom de famille, on calcule deux scores distincts : la métrique de Jaro-Winkler et le score de composition. On retient ensuite la valeur la plus élevée des deux. Cette opération est répétée pour le prénom. On dispose alors d’un score de similarité pour le nom, et d’un autre pour le prénom.
-
Calcul d’un score de “similarité directe” On additionne les deux scores obtenus à l’étape précédente. Ce total représente notre score de similarité lorsque l’on suppose que l’entreprise déclarante n’a pas inversé le nom et le prénom du bénéficiaire.
-
Prise en compte de l’inversion nom/prénom Pour gérer les cas où le nom et le prénom auraient été inversés lors de la saisie, on calcule un score de “similarité inversée”. Pour ce faire, on compare le nom de famille déclaré avec le prénom officiel, et inversement, en utilisant la métrique de Jaro-Winkler. Contrairement à la similarité directe, on ne prend pas en compte ici de score de composition pour ne permettre qu’une seule “erreur” de la part de l’entreprise déclarante et limiter le risque d’obtenir un bon score par chance.
-
Détermination du score final Le score de similarité final est simplement le maximum entre le score de similarité directe et le score de similarité inversée.
Affiner le score : variables contextuelles et seuil de confiance #
Si la similarité des noms et prénoms est un excellent indicateur, elle ne suffit pas toujours. Deux cas de figure nécessitent des ajustements pour garantir la fiabilité de la méthode : la gestion des homonymes et celle des données de très mauvaise qualité.
La gestion des homonymes : le besoin d’informations contextuelles #
La méthode atteint sa limite face à de vrais homonymes : deux professionnels distincts portant le même nom et prénom; c’est à dire ayant le même score de similarité. Pour les départager, il est indispensable d’utiliser des informations contextuelles supplémentaires :
- Le code postal
- La profession
- Le département d’exercice
Toutefois, ces variables doivent être utilisées avec précaution. Une correspondance sur le code postal ne doit pas surcompenser un nom et un prénom très différents. Nous les intégrons donc comme de légers bonus venant pondérer le score de similarité. Une égalité entre le code postal du répertoire des professionnels et celui de la déclaration augmente la métrique de similarité de 0.04. De même, une égalité des profession ajoute 0.02 à la similarité. Finalement une égalité du département d’exercice ajoute 0.01 à la similarité. Ces valeurs ont été choisies arbitrairement suite à l’exploration des données; l’objectif étant de départager deux candidats très similaires, mais insufisamment pour faire passer un nom complètement incohérent devant un nom plus pertinent uniquement grâce à un code postal ou une profession.
Le seuil de validité : se prémunir contre les données aberrantes #
Parfois, aucun des bénéficiaires liés aux numéros RPPS déclarés ne semblent convenir. Par exemple, une déclaration pour l’infirmière “Karine NOREILS” est associée à deux numéros RPPS qui, d’après le répertoire, correspondent à deux médecins : “Christophe Michiels” et “Bernard Duclos”. Les noms, prénoms et professions sont si éloignés qu’aucune correspondance n’est acceptable.
Pour éviter de créer des liens erronés dans de tels cas, nous avons défini un seuil de similarité minimum. Si le meilleur score obtenu n’atteint pas ce seuil (fixé arbitrairement à 1.7), aucune décision n’est prise. L’ambiguïté est conservée et le cas est signalé pour une analyse approfondie. Ce garde-fou est essentiel pour garantir que seules les corrections présentant un haut degré de confiance sont automatisées.
Mise en perspective et conclusion #
La méthodologie décrite ici est une application concrète des techniques de fuzzy matching à un problème de qualité de données. Elle illustre qu’une approche simple et pragmatique, combinant un algorithme de similarité standard avec des règles métier ciblées, permet de résoudre une grande partie des ambiguïtés de manière automatisée.
Sur l’ensemble des bénéficiaires présentant une ambiguïté de numéro RPPS, ce système nous permet d’en résoudre plus de 95% avec un haut degré de confiance. Les cas restants, souvent les plus complexes, sont signalés pour une analyse approfondie.
Cette approche montre l’importance d’adapter les outils de data science au contexte métier. Une connaissance fine des données et des sources d’erreurs potentielles (homonymes, noms composés) est indispensable pour construire une solution de nettoyage à la fois robuste et fiable.