cedricbatailler / maskr

Other
0 stars 2 forks source link

Big issue: comment conserver le "sens" de la df originale dans la df encryptée ? #14

Closed lnalborczyk closed 6 years ago

lnalborczyk commented 6 years ago

Il s'agit surement du plus gros problème à résoudre. Comment permettre à l'utilisateur de travailler sur un dataset encrypté (i.e., codage des variables, exploration des relations, traitement des outliers, etc.), tout en conservant le "sens" du jeu de données original, i.e., les valeurs initiales, mais en les gardant invisibles pour l'utilisateur ?

Propositions de solutions :

1) Ecrire des "méthodes" pour nos objets encryptés. Par exemple plot.encrypted ou lm.encrypted afin que le décryptage se fasse automatiquement quand l'utilisateur appelle ces fonctions. A définir ici pour quelles fonctions ce comportement est souhaitable (ou pas).

Problème pour lmpar exemple: il faudrait définir des méthodes pour le dataset "relié" aux termes de la formula entrée en argument de lm... pas possible non ?

2) Est-ce qu'il est possible d'assigner "deux" valeurs à un même objet ? Par exemple la variable encryptée, visible par l'utilisateur, et la "vraie" variable, invisible pour l'utilisateur mais qui est utilisé lors d'appels de fonctions extérieures (e.g., lm) ?

Pour le moment j'assigne l'ancien de jeu de donnée en attribut de la nouvelle df encryptée, et une solution temporaire consisterait à écrire de nouvelles fonctions, mais ce n'est pas satisfaisant...

Exemple:

library(maskr)
data(mtcars)
mtcars_encrypted <- encrypt(mtcars, cyl)
attributes(mtcars_encrypted)

lm_enc <- function(formula, data, ...){

  data_old <- get(attributes(mtcars_encrypted)$old)
  lm(formula, data_old, ...)

}

lm_enc(mpg ~ cyl, mtcars_encrypted)

Call:
lm(formula = formula, data = data_old)

Coefficients:
(Intercept)          cyl  
     37.885       -2.876  
cedricbatailler commented 6 years ago

J'ai un peu de mal à voir pourquoi fitter un objet crypté serait problématique ?

lnalborczyk commented 6 years ago

Et bien ça change la nature de la variable (si c'était une variable continue à l'origine, par exemple) ou les relations d'ordre entre les niveaux du facteur d'origine (si c'était un facteur à l'origine).

En continuant sur l'exemple précédent, on voit que cyl, originellement continu, est maintenant traité comme un facteur par lm...

lm(mpg ~ cyl, mtcars_encrypted)

Call:
lm(formula = mpg ~ cyl, data = mtcars_encrypted)

Coefficients:
                                (Intercept)  cyla2c8a16059d76dc5ad185daa3b03fff0b239525e  
                                     26.664                                       -6.921  
cylea2714e8917d306f224b6afc96cade3a91c60cd2  
                                    -11.564  
cedricbatailler commented 6 years ago

Voir #16, #17, je pense que ça pourrait résoudre le problème et que ça laisse de la place à l'amélioration par la suite