Motivation
Je travaille avec des ensembles de données contenant des informations d'identification personnelle (PII) et ayant parfois besoin de partager une partie d'un ensemble de données avec des tiers, de manière à ne pas exposer les PII et ne pas engager la responsabilité de mon employeur. Notre approche habituelle consiste à retenir les données entièrement ou, dans certains cas, à en réduire la résolution; par exemple, remplacer une adresse exacte par le comté ou le secteur de recensement correspondant.
Cela signifie que certains types d'analyse et de traitement doivent être effectués en interne, même lorsqu'un tiers dispose de ressources et d'une expertise plus adaptées à la tâche. Étant donné que les données source ne sont pas divulguées, la manière dont nous procédons à cette analyse et à ce traitement manque de transparence. Par conséquent, la capacité de tout tiers à effectuer une AQ / CQ, à ajuster des paramètres ou à apporter des améliorations peut être très limitée.
Anonymisation des données confidentielles
L'une des tâches consiste à identifier les personnes par leur nom, dans les données soumises par l'utilisateur, tout en tenant compte des erreurs et des incohérences. Un particulier peut être enregistré à un endroit comme "Dave" et à un autre comme "David", les entités commerciales peuvent avoir de nombreuses abréviations différentes, et il y a toujours des fautes de frappe. J'ai développé des scripts en fonction d'un certain nombre de critères qui déterminent le moment où deux enregistrements portant des noms non identiques représentent le même individu et leur attribuent un ID commun.
À ce stade, nous pouvons rendre anonyme le jeu de données en retenant les noms et en les remplaçant par ce numéro d'identification personnel. Mais cela signifie que le destinataire n'a presque aucune information sur, par exemple, la force du match. Nous préférerions pouvoir transmettre le plus d’informations possible sans divulguer notre identité.
Ce qui ne marche pas
Par exemple, il serait intéressant de pouvoir chiffrer des chaînes tout en préservant la distance de montage. De cette manière, des tiers pourraient effectuer leur propre assurance qualité / contrôle de la qualité ou choisir de procéder eux-mêmes à un traitement ultérieur, sans jamais accéder à (ou être en mesure de procéder à une ingénierie inverse). Peut-être que nous faisons correspondre les chaînes en interne avec une distance d'édition <= 2 et que le destinataire souhaite examiner les implications du resserrement de cette tolérance pour une distance d'édition <= 1.
Mais la seule méthode que je connaisse pour cela est ROT13 (plus généralement, tout chiffre décalé ), qui compte à peine comme un chiffrement; c'est comme écrire les noms à l'envers et dire: "Promets-tu de ne pas retourner le papier?"
Une autre mauvaise solution serait de tout abréger. "Ellen Roberts" devient "ER" et ainsi de suite. C'est une mauvaise solution car, dans certains cas, les initiales, associées à des données publiques, révèlent l'identité d'une personne et, dans d'autres cas, elles sont trop ambiguës. "Benjamin Othello Ames" et "Bank of America" porteront les mêmes initiales, mais leurs noms sont différents. Donc, il ne fait aucune des choses que nous voulons.
Une alternative inélégante consiste à introduire des champs supplémentaires pour suivre certains attributs du nom, par exemple:
+-----+----+-------------------+-----------+--------+
| Row | ID | Name | WordChars | Origin |
+-----+----+-------------------+-----------+--------+
| 1 | 17 | "AMELIA BEDELIA" | (6, 7) | Eng |
+-----+----+-------------------+-----------+--------+
| 2 | 18 | "CHRISTOPH BAUER" | (9, 5) | Ger |
+-----+----+-------------------+-----------+--------+
| 3 | 18 | "C J BAUER" | (1, 1, 5) | Ger |
+-----+----+-------------------+-----------+--------+
| 4 | 19 | "FRANZ HELLER" | (5, 6) | Ger |
+-----+----+-------------------+-----------+--------+
J'appelle cela "inélégant" parce qu'il faut prévoir quelles qualités pourraient être intéressantes et que c'est relativement grossier. Si les noms sont supprimés, vous pouvez raisonnablement conclure quant à la force de la correspondance entre les lignes 2 et 3, ou à la distance entre les lignes 2 et 4 (c.-à-d. À quelle distance se trouve leur correspondance).
Conclusion
L'objectif est de transformer les chaînes de manière à préserver autant que possible les qualités utiles de la chaîne d'origine tout en obscurcissant la chaîne d'origine. Le déchiffrement devrait être impossible ou tellement peu pratique qu'il soit effectivement impossible, quelle que soit la taille de l'ensemble de données. En particulier, une méthode qui préserve la distance d'édition entre des chaînes arbitraires serait très utile.
J'ai trouvé quelques articles qui pourraient être pertinents, mais ils sont un peu au-dessus de ma tête: