R-ohjelmointi.org

Tilastotieteellistä ohjelmointia R-kielellä

Tilastolliset tietosuojamenetelmät R:ssä

Tilastollisten tietosuojamenetelmien tarkoituksena on estää esimerkiksi henkilö-, yritys- tai muun yksikkötasoisen tiedon paljastuminen. Paljastuminen voi koskea esimerkiksi yksikön identiteettiä (suora tunnistaminen) tai ominaisuuksia (epäsuora tunnistaminen). Epäsuora tunnistus voi lisäinformaation kanssa yhdistettynä johtaa myös yksikön suoraan tunnistamiseen. Tunnistus voi tapahtua jopa hyvin vähäisiä tietomääriä käyttäen (esimerkiksi syntymävuosi ja sukunimi), ja voi perustua myös esimerkiksi taulukoituihin tietoihin. Aineisto voidaan suojata kahdella tavalla, joko naamioimalla alkuperäistä aineistoa sopivasti tai luomalla sen perusteella täysin synteettinen, simuloitu aineisto. Tilanne voi tulla vastaan esimerkiksi viranomaistoiminnassa tai epidemiologisessa tutkimuksessa, jos joku projektin ulkopuolinen tutkija haluaisi saada aineiston analysoitavakseen vaikkapa artikkelin tulosten toistamiseksi.

Tietosuojan tilastolliseen hallintaan on kehitetty useita tietokoneohjelmia, esimerkiksi micro-Argus ja tau-Argus, mutta R:stäkin löytyy työkaluja, joista tärkeimpiä ovat laajennuspaketit sdcMicro ja sdcTable. Paketti sdcMicro on tarkoitettu yksikötasoisen tiedon suojaamiseen ja sdcTable puolestaan taulukkomuotoisille aineistoille. Seuraavassa havainnollistetaan vain paketin sdcMicro toimintaan, sillä useimmiten tutkijoiden käytössä on jonkinlaista yksikkötason tietoa, joka voi olla tarpeen suojata. Paketin mukana tulee micro-Arguksestakin löytyvä aineisto free1, jota esimerkissä käytetään.

# Ladataan data
data(free1)
 
# Perusta, yhden tai kahden yksikön ryppäiden lukumäärät
# Komennossa pitää määrittää ne muuttujat, jotka katsotaan keskeisiksi
# Tässä ne ovat sarakkeissa 1-3 (alue, sukupuoli ja ikä)
f <- freqCalc(free1, keyVars=1:3, w=30)
f
 
 --------------------------
2664 observation with fk=1
788 observation with fk=2
 --------------------------
 
# Lasketaan yksiköiden tunnistustodennäköisyyksiä
ind <- indivRisk(f)
ind
 
method=approx, qual=1
 ---------------------------
534 obs. with much higher risk than the main part
 
# Suojataan aineisto siten, ettei yksittäisiä yksiköitä
# voi enää tunnistaa. Laskenta voi kestää pitkään!
# Parametrin k arvolla määritetään, kuinka monta yksikköä
# kussakin suojatun aineiston ryhmässä saa olla.
free2<-localSupp2(free1, keyVars=1:3, w=30, k=3, method="fastSupp")
 
[1] "estimated time for method minimizeSupp: 2131 (in seconds)"
[1] "estimated time for method fastSupp: 1385 (in seconds)"
[1] "3-anonymity is not achieved. Re-apply localSupp2 on this result or use function localSupp2Wrapper "
 
# Täydellistä anonymiteettiä ei ilmoituksen mukaansaavutetty, 
# mutta vilkaistaan tulos silti
f2<-freqCalc(free2$xAnon, keyVars=1:3, w=30)
f2
 
 --------------------------
0 observation with fk=1 
0 observation with fk=2 
 --------------------------
 
# Myös kunkin ryhmän havaintojen määrä tukee tulosta
min(f2$fk)
[1] 21

Pienehköillä aineistoilla paikallinen suppressointi on vielä mahdollista, mutta suuria, kenties satoja tuhansia havaintoja sisältävien aineistojen käsittely tulee nopeasti mahdottomaksi, etenkin jos anonymisoinnin kannalta keskeisiä muuttujia on paljon. Laajennuspaketista löytyy paikallisen suppression lisäksi myös muita suojaamiseen soveltuvia menetelmiä, kuten mikroaggregointi, havaintoarvojen vaihto havaintojen kesken, kohinan lisääminen ja muuttujien arvojen uudelleenkoodaus, ja osa niistä toimii huomattavasti nopeammin kuin tässä esitelty paikallinen suppressointimenetelmä.

Aineiston suojaaminen on usein pitkällinen prosessi, jos sen haluaa tehdä hyvin, ja vaatii tyypillisesti useampien menetelmien käyttämistä yhtäaikaisesti ja kenties muuttujakohtaisesti sopivimman menetelmän valitsemista.