Privasi diferensial: membandingkan perpustakaan



Artikel ini adalah perbandingan praktis dan terapan. Itu tidak menjelaskan semua detail privasi diferensial. Jika Anda ingin mempelajari pertanyaan ini lebih dalam, lihat tautan di akhir artikel.

Janji privasi diferensial (lebih tepatnya, privasi diferensial-s ) adalah untuk menyediakan cara yang terukur untuk menyeimbangkan privasi dan keakuratan data saat mengumpulkan data secara publik dalam kumpulan data pribadi.

Katakanlah Anda memiliki slider pengaturan:

  • bawa ke kiri - jaga privasi lengkap orang-orang yang datanya ada dalam dataset, tetapi pada saat yang sama menambahkan banyak suara ke informasi, mengurangi keakuratan statistik agregat;
  • pindah ke kanan - Anda mendapatkan akurasi statistik agregat yang sempurna, tetapi ungkapkan informasi pribadi tentang orang-orang dari dataset.

Intinya adalah bahwa slider dapat diterjemahkan di mana saja pada skala, memilih keseimbangan untuk kasus penggunaan tertentu.

Bagaimana data dikonversi


Privasi ε-diferensial memungkinkan Anda menemukan keseimbangan antara privasi dan akurasi menggunakan nilai positif ε (epsilon). Jika ε kecil, maka kami mempertahankan lebih banyak privasi, tetapi merusak akurasi. Jika ε besar, maka privasi menderita demi akurasi. Nilai ε bervariasi dari 0 hingga tak terbatas.

Pustaka privasi diferensial menerapkan teknik berbeda yang menggunakan parameter epsilon sebagai nilai input dan menambahkan pembalik derau acak ke ε ke nilai dalam dataset asli . Artinya, semakin kecil epsilon, semakin banyak suara yang ditambahkan.

Beberapa perpustakaan menggunakan parameter tambahan dan menawarkan alat kontrol derau acak, misalnya, kepadatan probabilitas dari mana angka acak diambil (distribusi Laplace, distribusi normal, dll.).

Beberapa perpustakaan juga menerapkan konsep anggaran privasi (anggaran privasi): setiap kali fungsi dipanggil, perpustakaan menggunakan jumlah anggaran yang dialokasikan sebelumnya yang ditetapkan oleh pengguna. Dasar teoretisnya adalah sebagai berikut: dengan setiap publikasi data baru, kemungkinan besar penyerang akan mengekstraksi informasi tentang orang-orang dari dataset. Dan dengan bantuan anggaran privasi, perpustakaan dapat mengembalikan kesalahan alih-alih nilai.

Perbandingan Perpustakaan Privasi Diferensial


Bandingkan tiga perpustakaan dan pekerjaan mereka dengan dataset yang diberikan menggunakan metode yang sama:


Kita akan melihat bagaimana ukuran dataset dan tingkat privasi yang diinginkan (epsilon) memengaruhi akurasi. Dalam setiap kasus, kami akan membandingkan hasil yang diperoleh di perpustakaan yang berbeda.

Dataset uji


Kami akan secara acak menghasilkan dataset yang berisi kolom dengan bobot orang dalam kilogram. Kami akan menganggap informasi ini rahasia, harus dirahasiakan. Setiap bobot direpresentasikan sebagai bilangan real nilai ganda.

Bobot dihasilkan sesuai dengan distribusi normal, di mana berat rata-rata dalam dataset adalah 70 kg dan standar deviasi adalah 30.

Untuk tujuan penelitian ini, kami akan memungkinkan untuk menghasilkan set data dengan ukuran yang berbeda.

Berikut adalah kode pembangkitan bobot:

import random

def generate_weight_dataset(dataset_size):
    outpath = f"weights_{dataset_size}.csv"
    mu = 70  # mean
    sigma = 30  # standard deviation
    with open(outpath, "w+") as fout:
        for i in range(dataset_size):
            random_weight = random.normalvariate(mu, sigma)  # normal distribution
            random_weight = abs(random_weight)  # make sure weights are positive
            random_weight = round(random_weight, 1)  # round to 1 decimal digit
            line = f"{random_weight}"
            print(line, file=fout)

Untuk dataset berukuran 10.600, data yang dihasilkan akan terlihat seperti ini:


Rata-rata aktual seharusnya sekitar 70 karena kami menggunakan distribusi normal dengan mean=70. Namun, ini bukan nilai yang tepat karena bobot dihasilkan secara acak. Selain itu, tidak ada bobot negatif dalam dataset kami, dan nilai akhir dibulatkan menjadi satu digit setelah titik desimal. Dalam hal ini, nilai rata-rata aktual adalah 70,34812570579449, dan standar deviasi adalah 29,488380395675765.

Harap perhatikan bahwa kami melakukan semua ini hanya untuk membuat dataset tampak seperti kumpulan data nyata. Distribusi nilai tidak akan mempengaruhi estimasi yang akan kita diskusikan.

Menggunakan perpustakaan


Mari kita lihat cara menggunakan perpustakaan. Kami akan selalu membandingkannya menggunakan parameter yang sama. Misalnya, dalam semua kasus akan ada nilai input epsilon yang sama. Untuk pengukuran, kami akan menggunakan nilai rata-rata dataset. Semua perpustakaan dianggap menerapkan operasi seperti rata-rata, penyimpangan, jumlah dan lain-lain menggunakan mekanisme penambahan kebisingan acak. Sering menggunakan mekanisme Laplace. Operasi pencarian nilai rata-rata dipilih secara sewenang-wenang, ini memungkinkan kami untuk menguji semua operasi menggunakan mekanisme yang sama.

Kami menghitung nilai rata-rata privasi diferensial menggunakan perpustakaan IBM (Python):

import diffprivlib.tools.utils

def dp_mean(weights, epsilon, upper):
    dp_mean = diffprivlib.tools.utils.mean(weights, epsilon=epsilon, range=upper)
    return dp_mean

upper = max(weights)
epsilon = 1.0
dpm = dp_mean(weights, epsilon, upper)

Sama dengan perpustakaan Google (C ++):

double dp_mean(std::list<double> weights, double epsilon, double lower, double upper) {
    std::unique_ptr<differential_privacy::BoundedMean<double>> mean_algorithm = 
    differential_privacy::BoundedMean<double>::Builder()
    .SetEpsilon(epsilon)
    .SetLower(0.0)
    .SetUpper(upper)
    .Build()
    .ValueOrDie();

    for (auto weight : weights) {
        mean_algorithm->AddEntry(weight);
    }
    double privacy_budget = 1.0;
    auto output = mean_algorithm->PartialResult(privacy_budget).ValueOrDie();
    return differential_privacy::GetValue<double>(output);
}

Harap perhatikan bahwa kami menggunakan seluruh anggaran privasi 1,0 untuk setiap penggunaan Perpustakaan Google. Dan perpustakaan IBM tidak menerima parameter ini.

Sekarang kami menghitung nilai rata-rata DP menggunakan diffpriv (bahasa R):

library(diffpriv)

dp_mean <- function(xs, epsilon) {
  ## a target function we'd like to run on private data X, releasing the result
  target <- function(X) mean(X)

  ## target seeks to release a numeric, so we'll use the Laplace mechanism---a
  ## standard generic mechanism for privatizing numeric responses
  n <- length(xs)
  mech <- DPMechLaplace(target = target, sensitivity = 1/n, dims = 1)

  r <- releaseResponse(mech, privacyParams = DPParamsEps(epsilon = epsilon), X = xs)
  r$response
}

Bagaimana privasi memengaruhi akurasi


Keakuratan nilai rata-rata dapat diukur dengan hanya menghitung perbedaan antara rata-rata DP dan rata-rata aktual.

Mari kita lihat apa yang terjadi dengan akurasi berat rata-rata ketika epsilon berubah. Karena kami menambahkan noise acak, kami akan menjalankan 100 run dan menghitung mean square error untuk memeriksa apakah perpustakaan menghasilkan nilai yang terdistorsi.

Hasilnya harus menunjukkan bahwa kesalahan (perbedaan antara rata-rata aktual dan rata-rata DP) berbanding terbalik dengan epsilon. Jika epsilon besar, maka kesalahannya harus kecil, dan sebaliknya. Saya menguji nilai epsilon mulai dari e ^ -10 hingga e ^ 10 (perhatikan skala logaritmik).

Tes ini menggunakan dataset ukuran konstan sewenang-wenang dari 10.600 baris.

Kesalahan standar



Memang, kesalahan berkurang dengan meningkatnya epsilon. Menariknya, perpustakaan Google memiliki batas kesalahan standar jika nilai epsilon sangat kecil. Di perpustakaan IBM dan diffpriv ini tidak diamati.

Alasannya terletak pada cuplikan kode sumber perpustakaan Google. Dalam numerical-mechans.h:

 //      . 
 //   privacy_budget   .  
  //     (0, 1],        .
  // ,         
  //    ,           0.5 ( 0.4,  0.6  ..).
  virtual double AddNoise(double result, double privacy_budget) {
    if (privacy_budget <= 0) {
      privacy_budget = std::numeric_limits<double>::min();
    }
    //  snapping-,  
    // (2012, "On Significance of the Least Significant Bits For Differential Privacy").
    double noise = distro_->Sample(1.0 / privacy_budget);
    double noised_result =
        Clamp<double>(LowerBound<double>(), UpperBound<double>(), result) +
        noise;
    double nearest_power = GetNextPowerOfTwo(diversity_ / privacy_budget);
    double remainder =
        (nearest_power == 0.0) ? 0.0 : fmod(noised_result, nearest_power);
    double rounded_result = noised_result - remainder;
    return ClampDouble<double>(LowerBound<double>(), UpperBound<double>(),
                               rounded_result);
  }

Dalam dibatasi-mean.h:

   //  :    .
    double normalized_sum = sum_mechanism_->AddNoise(
        sum - raw_count_ * midpoint_, remaining_budget);
    double average = normalized_sum / noised_count + midpoint_;
    AddToOutput<double>(&output, Clamp<double>(lower_, upper_, average));
    return output;

Ketika epsilon sangat kecil (sekitar kurang dari 0,013), perbedaan (sama dengan 1 / epsilon) akan sangat besar, dan kebisingan yang ditambahkan akan menjadi nol. Oleh karena itu, perpustakaan mengembalikan DP rata-rata yang setara dengan tengah kisaran yang digunakan untuk rata-rata. Ini dijelaskan oleh awal garis merah pada grafik.

Diffpriv memiliki kesalahan kuadrat rata-rata yang lebih kecil, yang berarti akurasi lebih baik dibandingkan dengan dua perpustakaan lain saat menggunakan epsilon yang sama. Untuk memberikan diffpriv dengan tingkat privasi yang sama dengan pesaing, Anda perlu menggunakan nilai epsilon yang lebih rendah.

Simpangan baku


Deviasi standar kesalahan untuk 100 kali jalan terlihat seperti ini:


Di perpustakaan Google, dengan nilai epsilon kecil, deviasinya kira-kira konstan, dan kemudian dengan cepat mengejar ketinggalan dengan perpustakaan IBM. Secara umum, diffpriv memiliki standar deviasi yang lebih kecil daripada yang lain.

Bagaimana ukuran dataset mempengaruhi akurasi


Kita berbicara tentang efek pada keakuratan nilai rata-rata DP.

Salah satu risiko dari dataset kecil adalah bahwa individu memiliki dampak besar pada nilai agregat, yang merupakan rata-rata. Jadi, jika hanya ada satu orang dalam dataset, maka nilai rata-rata yang benar-benar akurat akan sama dengan bobot yang tepat dari orang itu. Mari kita lihat bagaimana perpustakaan membantu untuk menghindari pengungkapan informasi individu ketika mengubah ukuran dataset.

Kami akan menggunakan nilai konstanta arbitrer dari epsilon 1.0.

Kesalahan standar



Ketika ukuran dataset menurun, kesalahan mean-square meningkat, dan sebaliknya. Itu yang diharapkan. Jika ada beberapa orang, maka saya ingin menambahkan lebih banyak suara untuk menghindari pengungkapan data pribadi. Kerugiannya adalah bahwa untuk kumpulan data kecil, nilai gabungan dapat menjadi sama sekali tidak relevan karena akurasi yang sangat rendah.

Sedangkan untuk diffpriv, kesalahan standar jauh lebih tergantung pada perubahan ukuran dataset. Namun, polanya masih terlihat, seperti pada dua pustaka lainnya: saat dataset bertambah, kesalahan mean-square menurun. Tetapi ini hanya berlaku untuk dataset hingga sekitar 30.000 baris. Kemudian kesalahan berubah sedikit. Juga, perhatikan penurunan abnormal dalam ukuran kesalahan ketika ukuran dataset 17.912.

Simpangan baku


Anda mungkin bertanya bagaimana ukuran noise yang ditambahkan berubah lebih dari 100 berjalan untuk ukuran dataset yang diberikan? Untuk menjawab ini, mari kita plot standar deviasi kesalahan untuk 100 berjalan untuk setiap ukuran data.


Dengan dataset kecil, variasi kesalahan lebih tinggi. Namun, Perpustakaan Google memiliki puncak dengan dataset ukuran 6. Dataset yang lebih kecil dan lebih besar memiliki lebih sedikit fluktuasi. Pustaka IBM tidak mengamati ini, grafiknya lebih dekat ke linear.

Sekali lagi, diffpriv umumnya memiliki standar deviasi yang lebih rendah.

Kesimpulan


Kami melihat bahwa langkah-langkah yang diambil di tiga perpustakaan berbeda privasi sejalan dengan harapan awal. Namun, implementasi yang berbeda menghasilkan hasil yang berbeda, terutama dalam kasus batas, seperti halnya dengan nilai epsilon yang sangat kecil dan perpustakaan Google. Dalam praktiknya, ini seharusnya tidak mengganggu, karena pengguna tidak akan menggunakan dataset yang sangat besar dan sangat kecil, serta nilai epsilon yang sangat kecil. Namun, dalam situasi seperti itu, perpustakaan dapat mengeluarkan peringatan.

Perilaku diffpriv sangat berbeda dari dua perpustakaan lainnya, jadi kami sarankan Anda memilih nilai epsilon dengan hati-hati.

Referensi



All Articles