Pour illustrer notre discussion de ce matin, Je génère un échantillon qui ressemble à notre exemple.
data=data.table("dp"=c(rep("DP1",36)),
"dr"=c(rep("DR1",3),rep("DR2",5),rep("DR3",20),rep(NA,8)),
"ghm"=c(rep("GHM1'",36)),
stringsAsFactors = F)
data[,.N,by=c("dp","dr","ghm")]
## dp dr ghm N
## 1: DP1 DR1 GHM1' 3
## 2: DP1 DR2 GHM1' 5
## 3: DP1 DR3 GHM1' 20
## 4: DP1 <NA> GHM1' 8
NA doit être prise en compte. Je vous monte les extrêmes alpha = 0 et alpha = 1 puis j’explique.alpha.value<-1
QI<-c(1,2,3)
QI.importance<-c(1,3,2)
k.value<-11
Je mets les données au format demandé par le package
sdc1<-createSdcObj(data.frame(data),
keyVars=QI, alpha=alpha.value)
sdc0<-createSdcObj(data.frame(data),
keyVars=QI, alpha=0)
On applique la méthode de “suppression locale” pour obtenir des classes k-anonymes
data_anon1<-kAnon(sdc1,k=k.value,importance=QI.importance)
data_anon0<-kAnon(sdc0,k=k.value,importance=QI.importance)
Stratégie alpha == 1 Il ne se passe rien parce qu’il y a déjà des NA (cf interprétation)
extractManipData(data_anon1)%>%data.table%>%.[,.N,by=c("dp","dr","ghm")]
## dp dr ghm N
## 1: DP1 DR1 GHM1' 3
## 2: DP1 DR2 GHM1' 5
## 3: DP1 DR3 GHM1' 20
## 4: DP1 <NA> GHM1' 8
Stratégie alpha == 0 On supprime le DR des lignes ayant moins de 10 observations
extractManipData(data_anon0)%>%data.table%>%.[,.N,by=c("dp","dr","ghm")]
## dp dr ghm N
## 1: DP1 <NA> GHM1' 16
## 2: DP1 DR3 GHM1' 20
Information complémentaire : - J’ai jeté un oeil aux résultats qu’obtient Matthias, je ne suis pas 100% sûr d’être sur les dernières simulations en date, mais la priorisation par QI.importance, la présence de 50% de NA dans DR et l’utilisation d’un alpha = 1 font qu’on ne touche pas aux DP et assez peu aux GHM, mais ça pose problème parce que les NA de DR ne représentent pas une incertitude mais la certitude qu’il n’y a pas de DR !
[mauvaise nouvelle] Les calculs pour PA ont été lancés avec alpha == 1, or les NA de DR (pour GHM je ne suis pas sûr) ne sont pas des incertitudes mais des “vraies” absences de diagnostic relié, on ne peut donc pas voir les NA comme du flou (comme des jokers). Donc il faut relancer avec alpha = 0, ce qui va supprimer beaucoup plus de lignes. C’est mentionné dans le rapport de PA qui explique que la stratégie R (sdcMicro) est trop permissive et qu’il faut creuser… Parce qu’avec Python ils ont fait l’équivalent alpha=0 qui était trop stricte selon eux.
Une autre [mauvaise nouvelle] associée c’est qu’avec la stratégie alpha = 1, DR à flouter en priorité (ce qui est bien) et beaucoup de NA dans DR, on a l’impression que DP et GHM sont peu floutés, il faudrait voir ce que ça donne avec alpha = 0.
La [bonne nouvelle] c’est que les stratégies de création de joker ne sont pas si alambiquées que je le pensais, c’est à dire que l’algorithme ne va pas flouter quelques observations de DR3 dans le but de conserver des observations de DR1 et DR2. Une telle stratégie aurait tendance à flouter moins de ligne mais comme on se le disait ce matin, elle rendrait les données illisibles.