{"id":10687,"date":"2016-11-22T16:57:23","date_gmt":"2016-11-22T15:57:23","guid":{"rendered":"https:\/\/www.etalab.gouv.fr\/?p=10687"},"modified":"2019-06-18T10:36:31","modified_gmt":"2019-06-18T08:36:31","slug":"rapprocher-deux-bases-donnees","status":"publish","type":"post","link":"https:\/\/preprod.etalab.gouv.fr\/rapprocher-deux-bases-donnees","title":{"rendered":"Billet technique : Comment rapprocher deux bases de donn\u00e9es"},"content":{"rendered":"\n
Le rapprochement de bases de donn\u00e9es est un sujet technique \net d\u00e9licat qui d\u00e9passe le cadre de l\u2019activit\u00e9 de l\u2019OCLTI, il se pose \u00e0 \nchaque fois que l\u2019on veut comparer et \u00e9tudier des bases de donn\u00e9es \npartageant de l\u2019information mais ne respectant pas la m\u00e8me nomenclature.\n C\u2019est un cas tr\u00e8s courant et le fait de pouvoir associer deux bases de \ndonn\u00e9es construites s\u00e9par\u00e9ment fait partie de la richesse du mouvement \nactuel autour de l\u2019utilisation des donn\u00e9es. Deux bases peuvent par \nexemple apporter une information compl\u00e9mentaire sur une liste \nd\u2019individus, il est int\u00e9ressant de fusionner ces deux bases. Cependant, \nun m\u00e8me individu peut \u00e8tre \u00e9crit de plusieurs fa\u00e7ons : M. Vincent \nDurrand ; Monsieur Durrand V. ; Vincent (Thomas) Durant ; Durrand \nVincent Thomas. Si les bases de donn\u00e9es sont de tailles raisonnables et \nles nomenclatures assez proches, une analyse humaine sera suffisante \nmais dans certains cas, le temps d\u2019analyse manuel sera tr\u00e8s long et \ns\u2019accompagnera in\u00e9vitablement d\u2019erreurs.<\/p>\n\n\n\n
L\u2019utilisation d\u2019algorithmes de matching de cha\u00eenes de caract\u00e8res<\/strong> peut alors apporter une r\u00e9ponse \u00e0 ce probl\u00e8me. L\u2019\u00e9quipe de l\u2019Administrateur g\u00e9n\u00e9ral des donn\u00e9es a d\u00e9cid\u00e9 d\u2019utiliser la librairie python Dedupe<\/a> pour le traiter.<\/p>\n\n\n\n Rapprocher deux bases de donn\u00e9es est un exercice souvent plus \ncompliqu\u00e9 qu\u2019il n\u2019y para\u00eet. Il faut un peu de virtuosit\u00e9 pour faire en \nsorte qu\u2019une machine rep\u00e8re les noms similaires aussi bien qu\u2019un \u00e8tre \nhumain.<\/p>\n\n\n\n En effet, m\u00e8me si elles traitent de sujets communs et ont une \nvariable commune (un nom de d\u00e9partement, un label, un nom, etc.) tr\u00e8s \nsouvent, aucun r\u00e9f\u00e9rentiel commun est appliqu\u00e9, cette variable commune \nn\u2019est pas codifi\u00e9e de la m\u00e8me fa\u00e7on dans les deux bases. Parfois, il \nn\u2019existe pas de r\u00e9f\u00e9rence suffisamment l\u00e9gitime et chacun utilise sa \npropre nomenclature. Parfois, c\u2019est lors de la saisie des donn\u00e9es que \ndes erreurs se produisent.<\/p>\n\n\n\n Par exemple, la fusion de deux bases de donn\u00e9es avec des noms de \nd\u00e9partements fran\u00e7ais sera un travail plus cons\u00e9quent si les \nd\u00e9partements ont \u00e9t\u00e9 \u00e9crits avec un nom en minuscule pr\u00e9c\u00e9d\u00e9 par le \nnum\u00e9ro du d\u00e9partement et un trait d\u2019union dans l\u2019une des bases (ex. \n65-Hautes-Pyr\u00e9n\u00e9es) et avec des noms en majuscule sans accent et sans \ntraits d\u2019unions dans l\u2019autre (HAUTES PYRENEES). Cet exemple est r\u00e9solu \nrapidement par un petit algorithme mais il demande une op\u00e9ration \nsp\u00e9cifique.<\/p>\n\n\n\n Cette op\u00e9ration peut s\u2019av\u00e9rer bien plus complexe lorsque l\u2019on doit \nutiliser une base de donn\u00e9es agr\u00e9geant plusieurs sources. Par exemple, \nune base de donn\u00e9es avec des contenus de m\u00e9dicaments comme la base publique des m\u00e9dicaments<\/a>\n m\u00e8lera plusieurs habitudes dans les champs litt\u00e9raux. Le label \u201cUne \nboite de six comprim\u00e9s\u201d utilisera parfois pour \u201ccomprim\u00e9s\u201d des \nabr\u00e9viations qui seront vari\u00e9es suivant les lignes (\u201ccomp\u201d, \u201ccomp.\u201d, \n\u201ccomps\u201d, \u201ccp\u201d, et\u201dc.\u201d). Autant un \u00e8tre humain (XXXr\u00e8d\u00e9XXX) est capable \nde comprendre que \u201cUne boite de six comprim\u00e9s\u201d et \u201c1 bte; 6 comp\u201d \nd\u00e9signent la m\u00e8me chose, autant cela peut troubler un programme \ninformatique qui doit traiter des milliers de lignes. Comment exprimer \u00e0\n une machine que l\u2019on souhaite obtenir la liste exhaustive de tous les \nm\u00e9dicaments vendus en boites de six comprim\u00e9s.<\/p>\n\n\n\n \u00c0 ces diff\u00e9rences de notation, s\u2019ajoute le fait que lorsque l\u2019on \nn\u2019utilise pas un r\u00e9f\u00e9rentiel d\u00e8s la saisie des donn\u00e9es, des erreurs \nhumaines peuvent s\u2019introduire et l\u2019on peut voir appara\u00eetre des \n\u201ccomprime\u201d, ou des \u201ccoprim\u00e9s\u201d. Enfin, les donn\u00e9es num\u00e9riques que l\u2019on \npeut manipuler sont parfois issues d\u2019une op\u00e9ration de num\u00e9risation au \ncours de laquelle des erreurs peuvent aussi \u00e8tre commises. Lors de \nl\u2019utilisation d\u2019une m\u00e9thode d\u2019https:\/\/fr.wikipedia.org\/wiki\/Reconnaissance_optique_de_caract%C3%A8res<\/a> : la lettre \u201ci\u201d peut \u00e8tre interpr\u00e9t\u00e9e comme une lettre \u201cl\u201d, un \u201c4\u201d comme un \u201c6\u201d, etc.<\/p>\n\n\n\n Dans le cadre de sa mission d\u2019aide \u00e9 la d\u00e9cision des agents publics, \nl\u2019\u00e9quipe de datascientists de l\u2019Administrateur g\u00e9n\u00e9ral des donn\u00e9es a \ntravaill\u00e9 tr\u00e8s concr\u00e8tement sur r\u00e9quisition judiciaire avec l\u2019Office \nCentral de Lutte contre le Travail Ill\u00e9gal (OCLTI) sur cet aspect \ntechnique.<\/p>\n\n\n\n L\u2019Office Central de Lutte contre le Travail Ill\u00e9gal (OCLTI)<\/a>\n a pour mission de lutter contre le travail ill\u00e9gal, la traite des \u00e8tres\n humains aux fins d\u2019exploitation au travail et la fraude en mati\u00e8re \nsociale dont des fraudes au d\u00e9tachement intra-europ\u00e9en de travailleurs \nqui peuvent concerner des centaines et parfois des milliers de \ntravailleurs.<\/p>\n\n\n\n Dans plusieurs de ses dossiers, l\u2019OCLTI doit rapprocher des bases de \ndonn\u00e9es pour identifier des victimes de fraude transnationale. Par \nexemple, \u00e0 partir d\u2019un listing de salari\u00e9, l\u2019OCLTI est amen\u00e9 \u00e0 v\u00e9rifier \nsi les employ\u00e9s sont bien inscrits \u00e0 la s\u00e9curit\u00e9 sociale en cherchant le\n nom de ces salari\u00e9s dans les bases de la s\u00e9curit\u00e9 sociale.<\/p>\n\n\n\n Cette collaboration s\u2019est faite concernant deux \u00e9tudes. Pour la premi\u00e8re, les deux bases \u00e9taient :<\/p>\n\n\n\n Ces deux bases \u00e9tant construites ind\u00e9pendamment, des individus \npeuvent \u00e8tre report\u00e9s diff\u00e9remment, des erreurs peuvent avoir \u00e9t\u00e9 \ncommises (Faute de frappe\/d\u2019orthographe ; Noms \u00e9 rallonge enregistr\u00e9s \npartiellement ; Deuxi\u00e8me pr\u00e9nom report\u00e9 ou non, etc.).<\/p>\n\n\n\n Cela emp\u00e8che de rapprocher les deux bases de donn\u00e9es de fa\u00e9on exacte \net ais\u00e9e. Pendant 3 semaines, l\u2019\u00e9quipe de l\u2019OCLTI a rapproch\u00e9 \u00e9 l\u2019aide \nd\u2019un tableur ces deux bases de donn\u00e9es et a identifi\u00e9 91 personnes \npr\u00e9sentes dans les deux bases.<\/p>\n\n\n\n Le besoin exprim\u00e9 par l\u2019OCLTI est de cr\u00e9er un outil automatique et \nefficace de matching de noms d\u2019individus (cha\u00e9ne de caract\u00e8res) entre \ndeux bases. Deux indicateurs permettent de juger des b\u00e9n\u00e9fices des \nm\u00e9thodes mises en \u00e9uvre par Etalab : le temps de calcul et le taux de \nd\u00e9tection. Le taux de d\u00e9tection de r\u00e9f\u00e9rence pour ce premier jeu de \ndonn\u00e9s est celui de l\u2019OCLTI, ce qui permet d\u2019\u00e9valuer le r\u00e9sultat obtenu \npar Etalab.<\/p>\n\n\n\nLe probl\u00e8me technique<\/h3>\n\n\n\n
Un cas concret pour moderniser l\u2019administration<\/h3>\n\n\n\n