Problématique
Les systèmes bancaires assurent un panel fort large de missions. Lorsqu’une transaction (par exemple, un virement entre deux particuliers) doit être réalisée, différentes entités collaborent afin de s’assurer que l’argent « quitte » un compte pour en « rejoindre » un autre.
Mais on attend de plus en plus de ses entités qu’elles remplissent d’autres rôles, tels que la lutte contre la fraude, le blanchiment d’argent et le financement du terrorisme.
Un des nombreux mécanismes pouvant s’avérer utile pour servir ses clients, consiste pour une banque à s’assurer que le destinataire d’une transaction est bien celui qu’ils croient. Il s’agit d’éviter une simple erreur de numéro de compte ou encore qu’un escroc ne reçoivent des fonds en lieu et place d’un destinataire légitime.
Conceptuellement, le problème est relativement simple. On peut comparer le nom du destinataire avec celui officiellement associé au compte récipiendaire, ou alternativement s’assurer que ce nom soit identique à celui typiquement associé à ce compte, sur base d’un historique des transactions.
Le problème se corse lorsque, pour des raisons de confidentialité et de protection de la vie privée, le système de vérification ne peut accéder au nom du destinataire proprement dit. Il faut donc anonymiser ce nom.
Un hachage ne suffit pas
Une technique classique d’anonymisation consiste à appliquer une fonction de hachage au nom de la personne. Par définition, cette fonction transformera le nom en une valeur très difficilement prévisible. Pour un nom donné, la valeur produite sera toujours la même, tandis que deux noms différents produiront très probablement des valeurs différentes. Il suffit alors de ne plus comparer les noms eux-mêmes, mais les valeurs résultant de l’application de la fonction de hachage.
Malheureusement, cette approche souffre d’un grave défaut dans notre cas: la moindre altération du nom du destinataire modifie radicalement la valeur produite par la fonction de hachage. Il suffit que l’émetteur inverse le nom et le prénom, fasse une faute de frappe ou préfixe le nom d’un « M. » pour que les noms de destinataires soient considérés comme distincts.
Une fonction de hachage conventionnelle ne convient pas: il faudrait une fonction qui, pour des noms similaires, produise des valeurs proches.
Similarité de noms
Qu’entend-nous par similarité de noms? Les petites altérations orthographiques, voir phonétiques, ne devraient pas beaucoup changer un prénom ou un nom de famille. Certains prénoms sont également considérés comme synonymes. Ainsi un Américain prénommé Robert se fera couramment appelé Bob. Comme indiqué plus haut, l’ajout d’un titre ou l’inversion du prénom et du nom devraient également être considérés comme peu importants.
La distance de Levenshtein est souvent utilisée pour quantifier l’écart entre deux chaînes de caractères. Il s’agit de compter le nombre de modifications devant être opérées afin de passer d’un nom à un autre. Dans notre cas, ces modifications pourraient consister en une substitution phonétique, en l’ajout ou la suppression de lettres, ou encore en l’inversion de l’ordre des mots.
La distance de Levenshtein est donc une manière, parmi d’autres, de formaliser la notion de similarité entre deux noms.
Locality sensitive hashing
Le terme locality sensitive hashing (LSH) désigne un ensemble d’algorithmes de hachage dont l’objectif est de fournir, pour des entrées similaires, des valeurs proches. Pile ce qu’il nous faut!
Ces algorithmes placent chaque entrée dans un « panier » et tentent de faire en sorte que les entrées similaires finissent dans le même panier.
Mise en œuvre
Malheureusement, il n’existe pas, à ma connaissance, d’algorithme LSH qui repose sur la distance de Levenstein. En effet, cette distance est non-linéaire, ce qui complique la répartition des entrées dans des paniers selon leur similarité.
Il existe cependant des variations et des alternatives à cette distance qui permettent leur exploitation par des algorithmes LSH.
Utilisation de n-grammes
Une de ces alternatives consiste à décomposer le nom en une séquence de n lettres, en décalant chaque fois la fenêtre de découpage d’une lettre. Ainsi, « Mathieu Goeminne » donnera, pour n=2, la séquence [ma, at, th, hi, ie, eu, go, oe, em, mi, in, nn, ne]. (Je ne tiens pas compte ici des bigrammes incomplets à cause d’une fin de mot).
On peut quantifier la similarité entre deux séquences par la distance de Jaccard, qui divise le nombre d’éléments communs entre les deux séquences par le nombre d’éléments qu’on peut trouver dans l’une ou l’autre séquence (ou les deux). Ainsi, si on compare le premier nom avec « Goemine Matthieu » (dont la séquence pour n=2 est [go, oe, em, mi, in, ne, ma, at, tt, th, hi, ie, eu]), on remarque qu’ils ont 12 éléments en communs et qu’ils en ont 14 en tout, soit une distance de 12/14 en dépit de l’ajout d’une lettre, de la suppression d’une autre, et de l’inversion du prénom et du nom. L’importance des variations phonétiques peut être réduite par l’application d’algorithmes tels que le double soundex.
Contrairement à celle de Levenshtein, la distance de Jaccard se prête bien à une utilisation dans le cadre d’un hachage LSH. « Mathieu Goeminne » et « Goemine Matthieu » ont ainsi de bonnes chances de se retrouver dans le même panier.
Conclusion
Les contraintes, notamment en termes de respect de la vie privée, complexifient le traitement de données sensibles, qui sans cela pourrait sembler relativement simples.
L’application de techniques d’anonymisation qui préservent les propriétés des données nécessaires à leur exploitation tout en préservant les droits de leurs détenteurs est un sujet activement développé, tant du point de vue théorique que pratique, étant donné son importance dans la vie quotidienne.