Transparence Santé - SGMAP-AGD/anonymisation GitHub Wiki

Cette base est téléchargeable via le site data.gouv.fr.

Le fait qu'elle soit publique ne l'empêche pas d'être une base de données à caractère personnel. Il faut donc faire une déclaration à la CNIL pour la manipuler. L'objectif d'anonymiser ce jeu de données n'est donc pas de permettre son ouverture mais de permettre sa réutilisation sans avoir à faire de déclaration à la CNIL.

  • Attention à la licence. Un projet d'anonymisation est un traitement de données à caractère personnel et il faut le déclarer à la CNIL.
  • Le traitement de la base Équidés est semblable à l'approche exposée ci-dessous.

1 - Déclarer à la CNIL que l'on va utiliser ce jeu de données avec comme finalité de l'anonymiser.


2 - Séparer les données qui concerne les personnes physiques de celles qui concernent les personnes morales. Le fichier relatif aux établissements et associations peut être diffusé tel quel (voir l'avis de la cour de cassation sur la vie privée des personnes morales).


3 - Nettoyer la base. Dans ce jeu de données, les professionnels de santé sont désignés nominativement. On va au préalable supprimer les variables identifiantes.

  • Le prénom et le nom sont évidemment des éléments identifiants. Ces données sont directement identifiantes, elles doivent être supprimées.
  • Un autre identifiant est "benef_identifiant_valeur", on le supprime aussi. C'est une variable indirectement identifiante.
  • "benef_qualification" est un champ libre, c'est une variable qui prend des modalités trop précises et peu homogènes. On choisit de ne pas la retenir.
  • idem pour "benef_objet_social" et "benef_denomination_sociale".

La base présente aussi un certain nombre de doublons : des variables avec des libellés complets et leur équivalent codé. On choisit de ne retenir que les variables codées.

  • benef_specialite_code plutôt que benef_speicalite_libelle ;
  • identifiant_type_code plutôt que identifiant_type ;
  • entreprise_identifiant plutôt que denomination_sociale ;
  • benef_titre_code plutôt que benef_titre_libelle ;
  • le code postal plutôt que la ville ;
  • benef_qualite_code plutôt que benef_qualite ;
  • benef_categorie_code plutôt que categorie.

On recode certaines variables, de façon à les agréger pour les rendre moins identifiantes :

  • L'adresse est très identifiante. On ne garde le code postal qu'à condition de le transformer en un code départemental. En effet, le département est moins identifiant, surtout dans le cas où il n'y aurait qu'un professionnel de santé dans une ville, ayant bénéficié d'un avantage (auquel cas il serait tout de suite identifié si on gardait le code postal dans la base.
  • On transforme le montant des avantages en leur équivalent décile, afin d'homogénéiser les modalités et de rendre moins probable l'identification par la connaissance du seul montant (si Monsieur X tombe sur une facture, un ticket de caisse, un indice de la société Y, il pourrait reconnaître directement le bénéficiaire dans la base, si, imaginons, cette dernière ne présente qu'un avantage d'un montant de 58,28€).
  • On transforme la date de manière à ne retenir que l'année (même argument).

Enfin, on considère la nature de l'avantage comme une variable sensible, qui ne sera pas k-anonymisée (c'est l'information principale que l'on apprend de la base).

  • On veillera à la "propreté des variables" en effet, si on a un département codé "AIN" et un autre codé "Ain", on pourra à tort les considérer comme deux modalités distinctes. Il en suivra, lors du processus d'anonymisation, une perte d'information trop grande puisqu'on voudra avoir à la fois k personnes dans "AIN" et k personnes dans "Ain".
  • On fera attention au caractère atomique de l'information. Est-ce qu'on a une seule information dans une modalité. Par exemple si on a une modalité "cancer du doigt" et une modalité "cancer de l'orteil", on peut se retrouver dans une situation avec une variable sensible qui semble à tort bien contrôlée : Je ne sais pas si la personne dans la case à un cancer du doigt ou de l'orteil mais je sais qu'elle a un un cancer, ce qui n'est pas anodin.
  • Le problème ne se présente pas vraiment ici, mais on fera également attention à ne pas inutilement multiplier les modalités d'une variable. Dans l'exemple sur les équidés, disponible sur ce dépôt, la variable "Race" comporte deux modalités différentes "Race inconnue" et "inconnue". Il faut au préalable les fusionner, de même que l'on peut considérer remplacer "welsh A", "welsh B", "welsh C" par "welsh", tout simplement.

4 - Choisir ses variables
Il faut réfléchir aux variables qui peuvent être considérées comme des variables quasi-identifiantes. Quelle information est susceptible d'être connue par tout le monde, ou par une personne tierce ? Pour l'adresse, la ville, la qualité ou la spécialité, c'est évident. Qu'en est-il d'autres variables, comme la date de l'avantage, le montant ou encore sa nature ? Pour les deux premières, l'information peut être connue (un ticket de caisse, un rendez-vous, un ami au courant). Pour la nature, on considère que l'information n'est pas connue et on l'extrait donc des variables considérées lors de la k-anonymisation.


5 - Appliquer un algorithme de k-anonymisation
Une fois nos variables sélectionnés, on peut appliquer notre algorithme de k-anonymisation. Au préalable, il faut choisir un ordre de variables. En général, on place les variables les moins importantes en premières et les variables dont le coût de modification est le plus grand en dernière position.
Dans cet algorithme sont implémentées trois types de méthodes :

  • méthode "into_unknown" : lorsque l'algorithme repère une ligne non k-anonymisée, il remplace la modalité par une modalité définie au préalable (non renseigné par exemple). Si cette opération ne permet pas de construire un groupe de "non renseigné" suffisamment conséquent, l'algorithme renvoie une base remplie de valeurs "unknown".
  • méthode "remove" : lorsque l'algorithme repère une ligne non k-anonymisée, il supprime cette ligne.
  • méthode "regroup[...]"
    • méthode "regroup_with_smallest" : regroupe avec la modalité dont l'effectif est minimal.
    • méthode "regroup_with_biggest" : regroupe avec la modalité dont l'effectif est maximal.
  • méthode "with closest" : lorsque l'algorithme repère une ligne non k-anonymisée, il remplace la modalité donnée sous forme de nombre par "nombre1 ou nombre2", en rapprochant les nombres les plus proches (convient pour les années, par exemple).

5 - Compléter par les données INSEE
Afin d'enrichir notre travail, il peut être intéressant de compléter ces données des professionnels de santé ayant reçu un avantage avec celles des autres professionnels de santé. Pour ce faire, il suffit de télécharger la base INSEE de recensement des professionnels de santé par département. Ainsi, en fusionnant ces deux bases, on espère réduire le nombre de modalités modifiées - notamment concernant le département - lors de la k anonymisation.
Explication : si, dans le cas de la seule base Transparence Santé, j'ai seulement deux professionnels de santé du Pas-de-Calais qui ont reçu un avantage, alors je vais devoir fusionner le département Pas-de-Calais avec un autre département. Si, dans le cas d'une base obtenue à partir de la base Transparence Santé et des informations délivrées par l'INSEE, j'ai deux professionnels de santé du Pas-de-Calais qui ont reçu un avantage et trente autres professionnels de santé du Pas-de-Calais (qui n'ont pas reçu d'avantage), alors je n'aurai pas besoin de modifier la modalité "Pas-de-Calais".