n | mean | sd | median | skew | |
---|---|---|---|---|---|
Observed | 500 | 3.07600 | 1.402197 | 3.000000 | -0.0304055 |
Synthetic | 500 | 3.08803 | 1.445419 | 3.094385 | 0.1730267 |
Dat zou een privacy-ramp zijn…
Thom Volker (t.b.volker@uu.nl)
MSc. in Methoden en Statistiek & Sociologie
PhD kandidaat bij Universiteit Utrecht en CBS
Deze presentatie staat online op
https://thomvolker.github.io/utiliteit
De broncode en resultaten zijn te vinden op
Neppe data, gegenereerde data, gesimuleerde data, digital twins
Creëer synthetische data met simpele/algemene modellen
Evalueer of de synthetische data de gewenste kwaliteit heeft
Indien nodig, voeg complexiteit toe (specifieke modellen, transformations, interacties)
Itereer tussen (2.) en (3.) totdat de synthetische data naar wens is
Synthetische data is altijd een compromis tussen het beschermen van privacy en het behouden van utiliteit
De vraag is: hoeveel informatie moeten we opofferen om de privacy van de respondenten te beschermen?
Of: welk privacy risico is aanvaardbaar om een zo bruikbaar mogelijke dataset te behouden?
Elke parameter in het model bevat informatie over de observaties in de echte data
Hoe meer parameters je gebruikt om synthetische data te generen, hoe hoger de utiliteit
Wanneer de informatie in de parameters gelijk is aan de informatie in de echte data, recreëren we de echte data
Op dat moment is er geen privacybescherming meer
Kunnen we de synthetische data voor dezelfde doeleinden gebruiken als de geobserveerde data?
Hebben de synthetische en geobserveerde data een vergelijkbare verdeling?
Geven analyses van de synthetische en geobserveerde data vergelijkbare resultaten?
Kunnen we de synthetische data onderscheiden van de echte data?
Fit-for-purpose utiliteitsmaten
Analyse-specifieke utiliteitsmaten
Algemene / globale utiliteitsmaten
Startpunt van utiliteitsevaluatie
De synthetische data moet geschikt zijn voor het doel waartoe het dient
Juiste variabele-typen: zijn categorische variabelen nog categorische variabelen?
Plausibiliteit: negatieve leeftijden, peuters met een masterdiploma
Visuele inspectie (vaak de belangrijkste methode)
Is dit “plausibele” synthetische data?
n | mean | sd | median | skew | |
---|---|---|---|---|---|
Observed | 500 | 3.07600 | 1.402197 | 3.000000 | -0.0304055 |
Synthetic | 500 | 3.08803 | 1.445419 | 3.094385 | 0.1730267 |
Want kwantitatieve maten kunnen misleidend zijn
Als je weet welke analyse uitgevoerd gaat worden, kun je synthetische data evalueren voor dit doel
Gemiddelde | 2.5% | 97.5% | |
---|---|---|---|
Observed | 3.076 | 2.953 | 3.199 |
Synthetic | 3.088 | 2.961 | 3.215 |
Betrouwbaarheidsinterval overlap: 0.952
Als je weet dat de gebruiker een lineair regressiemodel wil schatten:
Als je weet dat de gebruiker een predictiemodel wil toepassen:
N <- 1000
P <- 5
S <- diag(P) + 1
X <- rnorm(N*P) |> matrix(N) %*% chol(S)
Y <- X %*% c(0:4/5) + rnorm(N)
coef(lm(Y ~ X))
(Intercept) X1 X2 X3 X4 X5
-0.009522669 0.031481189 0.224779583 0.378608643 0.576827811 0.778974409
Vobs <- var(cbind(X, Y))
b <- solve(Vobs[1:5, 1:5]) %*% Vobs[1:5, 6]
b0 <- mean(Y) - colMeans(X) %*% b
c(b0, b)
[1] -0.009522669 0.031481189 0.224779583 0.378608643 0.576827811
[6] 0.778974409
Als de synthetische en de geobserveerde data gelijke verdelingen hebben, zouden ze vergelijkbare resultaten moeten geven
Plak synthetische en geobserveerde data onder elkaar
Voorspel voor elke observatie de kans \pi_i dat deze synthetisch is
Bereken pMSE als \sum^N_{i=1} (\pi_i - c)^2/N, met c = n_{\text{syn}} / (n_{\text{syn}} + n_{\text{obs}})
Vergelijk pMSE met verwachte waarde onder een correct generatief model
Intuitief en flexibel, makkelijk te berekenen
Maar soms te simpel
Model specificatie kan lastig zijn
De pMSE-ratio in ons voorbeeld: 3.62
Density ratios1 als kwaliteitsmaat
r(x) = \frac{p(\boldsymbol{X}_{\text{syn }})}{p(\boldsymbol{X}_{obs})}
R
-package densityratio
.Bereken een discrepantie maat voor de synthetische data (Kullback-Leibler divergence, Pearson divergence)
Vergelijk de Pearson divergence voor verschillende data sets
Optioneel: Toets de nulhypothese p(\boldsymbol{X}_{\text{syn}}) = p(\boldsymbol{X}_{\text{obs}}) d.m.v. een permutatietest.
Call:
ulsif(df_numerator = syn, df_denominator = obs)
Kernel Information:
Kernel type: Gaussian with L2 norm distances
Number of kernels: 200
Optimal sigma: 0.1294688
Optimal lambda: 0.1623777
Optimal kernel weights (loocv): num [1:201] 2.0966 0.3538 0.4966 -0.2634 0.0313 ...
Pearson divergence between P(nu) and P(de): 2.421
Pr(P(nu)=P(de)) < .001
Bonferroni-corrected for testing with r(x) = P(nu)/P(de) AND r*(x) = P(de)/P(nu).
(Multinomiale) logistische regressie voor categorische variabelen
Hoe specifieker hoe beter
Maar soms kan het niet specifiek, omdat je het doel niet kent
Dan blijft het belangrijk om met specifieke maten te evalueren
Maar kunnen algemene maten ook heel nuttig zijn
Vragen?
Nog meer vragen?
Voor iedere synthetische observatie wordt een density ratio waarde geschat
Synthetische outliers detecteren / verwijderen
Analyses op synthetische data herwegen
Aanname: subspace waarin de synthetische data goed gemodelleerd is, en een subspace waar de synthetische data niet goed gemodelleerd is
Doel: subspace herkennen waar de synthetische data niet goed gemodelleerd is, en hierop de density ratio schatten.
In alle bovengenoemde voorbeelden zijn dezelfde hyperparameters gebruikt
Kruisvalidatie zorgt ervoor dat de parameters in het density ratio model zo goed mogelijk gekozen worden.
\begin{aligned} r(\boldsymbol{X}) &= \frac{p(\boldsymbol{X}_{\text{syn}})}{p(\boldsymbol{X}_{\text{obs}})} \\ &= \frac{p(\boldsymbol{X} | Y = \text{synthetic})}{p(\boldsymbol{X}| Y = \text{observed})} = \frac{\frac{p(Y = \text{synthetic} | \boldsymbol{X})p(\boldsymbol{X})}{p(Y = \text{synthetic})}}{\frac{p(Y = \text{observed})p(\boldsymbol{X})}{p(Y = \text{observed})}} \\ &= \frac{p(Y = \text{observed})}{p(Y = \text{synthetic})} \frac{p(Y = \text{synthetic} | \boldsymbol{X})}{p(Y = \text{observed} | \boldsymbol{X})} \end{aligned}
\begin{aligned} KL(\boldsymbol{X}_{\text{syn}}, X_{\text{obs}}) = \int \log\Bigg(\frac{p(\boldsymbol{X}_{\text{syn}})}{p(\boldsymbol{X}_{\text{obs}})}\Bigg) p(\boldsymbol{X}_\text{syn}) \end{aligned}
Note that \int \log\Bigg(\frac{p(\boldsymbol{X}_{\text{syn}})}{p(\boldsymbol{X}_{\text{obs}})}\Bigg) p(\boldsymbol{X}_\text{syn}) can be approximated as \sum^{n_{\text{syn}}}_{i=1} \log(r(\boldsymbol{X}_\text{syn}))/n_{\text{syn}}.