Le opinioni circa il diritto all’anonimato dei dati sono spesso oscillanti e, ancora più spesso, non basate su argomenti concreti.
La pandemia ha generato un gradevole twist al balletto delle opinioni, contrapponendo la salvezza dal virus e il diritto alla riservatezza.
Questo post vuole spostarsi di lato rispetto al tema e cercare raccontare come un concetto tecnico (e un po’ esoterico) come il k-anonimato sia declinabile in un caso concreto.
La disponibilità di dati open e la possibilità di fare una minima elaborazione degli stessi ci permetterà di rimanere dentro i confini della penisola-più-isole per esporre la nostra tesi (permettendoci così di non violare alcun DPCM).
Ipotizziamo che si voglia rilasciare un database relativo a una votazione (ad esempio, un’ipotetica votazione diretta del Presidente della Repubblica Dr. Sleepy Joe) con le seguenti informazioni:
Nome, Cognome, Data Nascita, Luogo Nascita, Voto, Ha una carica pubblica
Ora questo database non è anonimo. Una cosa che si può fare per poterlo rendere pubblico è rimuovere nome e cognome.
Ok, cosa abbiamo ottenuto? Il dato sembra “più anonimo”, ma di quanto?
Il nostro nuovo dato ha come dimensioni:
Data Nascita, Luogo Nascita, Voto, Ha una carica pubblica
Per capire quanto sia anonimo bisogna fare delle considerazioni che coinvolgono anche il dato in sé e non solo la sua rappresentazione.
Ci sono molti tipi di metriche di anonimato, ma quella che vogliamo analizzare è il k-anonimato. Un dataset è k-anonimo (con k valore intero positivo) se ad ogni identificativo corrispondono almeno k record.
Se prendiamo come esempio la tabella:
Nome, Cognome, Data Nascita, Luogo Nascita, Voto, Ha una carica pubblica
Mario, Rossi, 01/01/1950, New Milano, Joe, No
Giovanni, Bianchi, 01/01/1950, New Milano, Joe, No
Totò, Verdi, 01/01/1950, New Milano, Joe, No
………..
e consideriamo come elementi dell’identificativo le colonne:
Data Nascita, Luogo Nascita, Ha una carica pubblica
otteniamo che per il valore:
Data Nascita, Luogo Nascita, Ha una carica pubblica = 01/01/1950, New Milano, No
le tre righe mostrate (quelle di Mario, Giovanni e Totò) sono indistinguibili.
L’interesse per chi volesse rendere pubblici questi dati e, al contempo, mantenere un certo grado di anonimato è quello quindi di ridurre o trasformare le colonne in modo tale da non togliere troppa informazione mantenendo un valore di k più alto possibile (bisogna tener presente che ogni dato omesso toglie valore per eventuali analisi successive).
Certo, fino a questo punto il discorso è ancora un po’ astratto.
Nel caso concreto, per chiarire cosa comporta questo concetto, possiamo utilizzare i dati open del Ministero dell’Interno riguardanti le cariche elettive .
I dati riportano le cariche attuali a livello comunale e, nel caso specifico, il dato utilizzato per questo post è aggiornato al 4/11/2020 ed è contenuto in un file di formato .csv reso pubblico dal Ministero.
L’informazione è molta, le colonne sono:
Codice_regione;codice_provincia;codice_comune;denominazione_comune;sigla_provincia;popolazione_censita;titolo_accademico;cognome;nome;sesso;data_nascita;luogo_nascita;descrizione_carica;data_elezione;data_entrata_in_carica;partito;titolo_studio;professione
Nel caso del nostro aggiornamento, gli amministratori sono 105484 per un totale di 123311 cariche (sì, si possono avere più cariche).
Se riprendiamo il nostro database dei voti “anonimizzato”, cioè con solo le colonne:
Data Nascita, Luogo Nascita, Ha una carica pubblica
ci possiamo chiedere se e quante persone riusciamo a de-anonimizzare.
Nel caso la colonna finale abbia come valore SI, possiamo incrociare il dato degli eletti fornito dal Ministero dell’Interno e, potenzialmente, recuperare qualche nome e cognome.
Non c’è niente di più facile che valutare l’esito di questa fatica. Con un semplicissimo contatore si riesce a vedere che:
K, numero
1, 103112
2, 1022
3, 20
103112 righe sono univoche!
Questo significa che, ad esempio, se prendiamo la coppia:
Data Nascita, Luogo Nascita = 28/05/1958, MILANO (MI)
otteniamo un solo risultato (Sala Giuseppe, Sindaco di Milano).
Se noi incrociassimo il nostro database dei voti con il database delle cariche quindi avremmo 87684 nomi e cognomi associati al loro voto. Non male per un dato potenzialmente sensibile come quello del voto in un sottoinsieme di persone interessanti per molti portatori di interesse.
Se proviamo ad utilizzare sempre il luogo di nascita, ma associato solo all’anno di nascita, le righe univoche si riducono di molto ma, guardando i valori di k < 5 otteniamo:
K, numero
1, 27889
2, 6458
3, 3060
4, 1875
Divertente è valutare cosa succederebbe se avessimo a disposizione solo la data di nascita.
Guardando solo i valori di k <= 3 abbiamo:
K, numero
1, 2588
2, 2124
3, 2202
Non malaccio per un dato così generico: 2588 persone sarebbero deanonimizzabili senza ulteriori sforzi e per quelle con k= 2 o 3 il dato potrebbe essere comunque utile.
Se ipotizzassimo che 2 persone con la stessa data di nascita poi abbiano votato in modo identico, avremmo correttamente deanonimizzato anche loro.
Quale sarebbe la morale quindi? Forse nessuna. Però, in questo tipo di ragionamenti, è sempre utile avere esempi concreti.
Per fortuna, comunque, molti dati de-anonimizzabili sono protetti dal fatto che, molto spesso, non ci sia nessuno capace di sfruttarli una volta de-anonimizzati.
Sei interessati ai temi e alle potenzialità dell’analisi dati?
Contattaci a info@eliflab.com