Anonymisation des données
Pour l'anonymisation des données nous utilisons la généralisation, en groupant les parcours identiques et en mélangeant les attributs supplémentaires des individus. Puis nous appliquons une variante de la k-anonymisation, avec k = 5, où toutes les cohortes et (presque) toutes les valeurs d'attributs sont conservées mais lorsque les valeurs sont en nombre inférieur à k on ne donne pas leur nombre. Nous détaillons le procédé ici.
l'objectif est de protéger les individus d'un risque d'inférence d'attributs ou de parcours.
Les parcours
Pour construire les parcours nous avons besoin d'un pseudonyme identifiant les individus aux cours de leurs inscriptions et de leurs réussites dans différent établissements. Nous utilisons pour cela le condensat calculé à partir de l'INE, hash_ine
.
Une fois les parcours reconstruits ces condensats sont oubliés et les parcours identiques sont regroupés. Les attributs des individus sont alors mis en commun sans lien entre eux.
Prenons un exemple. Bob, Alice et Oscar ont un même parcours universitaire, appelons le P, et ce sont les seuls avec ce parcours. Supposns que Bob, Alice et Oscar ont les attributs suivants.
hash ine | sexe | mention au bac | année du bac |
---|---|---|---|
Bob | M | AB | 2019 |
Alice | F | TB | 2019 |
Oscar | M | B | 2017 |
Pour ce parcours P nous comptons :
- 3 individus
- 2 M, 1 F
- les mentions au bac : 1 AB, 1 B, 1 TB
- années du bac 1 2017, 2 2019.
C'est la seule information retenue. Autrement dit il n'est plus possible de savoir, par exemple, que c'est une femme qui a eu la mention très bien.
K-anonymisation
Pour la k-anonymisation, le procédé est plus complexe. Nous remplaçons chaque cardinalité inférieure à k (k = 5) par un code signifiant « il y a en a moins de 5 ». Par facilité, on choisit la valeur 0 pour représenter ce code. Donc la valeur 0 veut dire moins de 5.
Pour le parcours P précédent, nous aurions donc 0 individus, ayant pour attributs 0 M et 0 F, pour mentions 0 AB, 0 TB et 0 B et pour année du bac zéro 2019 et zéro 2017.
Amélioration de la k-anonymisation
En réalité, si l'effectif total du groupe est inférieur à 5 nous oublions ses attributs (autres que le parcours lui-même). Le cas précédent nous donnera donc l'information : il y a au moins un individu et au maximum quatre ayant suivi le parcours P, sans donner aucun autre attribut que le parcours. Il est important, notamment pour l'orientation, de pouvoir conserver les parcours rares d'autant que plus les parcours sont longs moins ils concernent d'individus.
Il reste le problème dit du secret secondaire.
Supposons qu'il y ait eu 4 personnes comme Bob avec le parcours P et une comme Alice. Le groupe aurait été alors composé de
- 7 individus
- 5 M, 2 F
- 4 AB, 1 B, 2 TB
- 6 2019, 1 2017 La k-anonymisation nous aurait alors présenté un groupe composé de :
- 7 individus
- 5 M, 0 F
- 0 AB, 0 B, 0 TB
- 6 2019, 0 2017 Nous aurions alors pu déduire que :
- il y a 2 F (seule possibilité 5 + 2 = 7)
- il y a un seul 2017 (6 + 1 = 7)
Le problème que nous rencontrons, dit du secret secondaire, est qu'il n'est pas suffisant d'effacer un terme d'une somme dont on connait le total pour empêcher de connaître ce terme.
Nous avons donc fait le choix d'appliquer un traitement supplémentaire aux données qui consiste à effacer un peu plus de cardinalités au cours de la k-anonymisation. Dans une somme dont on connaît le total, si un terme doit être masqué, il faut en choisir d'autres à masquer également pour éviter que la valeur du terme masqué ne puisse être inférée. Comme nous ne masquons pas complétement les termes mais que nous mettons leur valeur à 0, cette opération supplémentaire peut exiger d'effacer réellement des attributs. Par exemple si dans un groupe de 5 personnes, chacun d'entre elle a obtenu le bac une année différente, nous ne conservons pas l'attribut année du bac.
À titre d'exemple, cette opération transforme les multi-ensembles de la façon suivante :
[a -> 5, b -> 5, c -> 2]
devient[a -> 5, b -> 0, c -> 0]
[a -> 5, b -> 5, c -> 1]
devient[a -> 5, b -> 0, c -> 0]
[a -> 5, b -> 4, c -> 2]
devient[a -> 5, b -> 0, c -> 0]
[a -> 5, b -> 1, c -> 1]
devient[a -> 0, b -> 0, c -> 0]
[a -> 0, b -> 0, c -> 0, d -> 0, e -> 0]
devient vide.