الخصوصية التفاضلية: مقارنة المكتبات



هذه المقالة هي مقارنة تطبيقية وعملية. لا يشرح كل تفاصيل الخصوصية التفاضلية. إذا كنت ترغب في دراسة هذا السؤال بشكل أكثر عمقًا ، فارجع إلى الروابط الموجودة في نهاية المقالة.

وعد خصوصية تفاضلية (على نحو أدق، -ε التفاضلية الخصوصية ) هو توفير وسيلة قابلة للقياس لتحقيق التوازن بين الخصوصية و دقة البيانات عند نشر البيانات المجمعة في مجموعات البيانات الخاصة.

لنفترض أن لديك شريط تمرير الإعدادات:

  • خذها إلى اليسار - حافظ على الخصوصية الكاملة للأشخاص الذين توجد بياناتهم في مجموعة البيانات ، ولكن في نفس الوقت تضيف الكثير من الضوضاء إلى المعلومات ، مما يقلل من دقة الإحصائيات الإجمالية ؛
  • الانتقال إلى اليمين - ستحصل على الدقة الكاملة للإحصاءات المجمعة ، ولكن تكشف عن معلومات خاصة حول الأشخاص من مجموعة البيانات.

خلاصة القول هي أنه يمكن ترجمة شريط التمرير في أي مكان على المقياس ، واختيار التوازن لحالة استخدام معينة.

كيف يتم تحويل البيانات


تتيح لك الخصوصية التفاضلية find إيجاد توازن بين الخصوصية والدقة باستخدام قيمة موجبة of (إبسيلون). إذا كانت ε صغيرة ، فإننا نحافظ على مزيد من الخصوصية ، لكننا نضعف الدقة. إذا كانت ε كبيرة ، فإن الخصوصية تعاني من أجل الدقة. تختلف قيمة from من 0 إلى اللانهاية.

تطبق مكتبات الخصوصية التفاضلية تقنيات مختلفة تأخذ المعلمة epsilon كقيمة إدخال وتضيف ضوضاء عشوائية معكوسة إلى ε إلى القيم في مجموعة البيانات الأصلية . أي أنه كلما كان إبسيلون أصغر ، كلما تمت إضافة المزيد من الضوضاء.

تستخدم بعض المكتبات معلمات إضافية وتقدم أدوات تحكم عشوائية في الضوضاء ، على سبيل المثال ، كثافة الاحتمال التي يتم أخذ الأرقام العشوائية منها (توزيع لابلاس ، التوزيع الطبيعي ، إلخ).

تطبق بعض المكتبات أيضًا مفهوم ميزانية الخصوصية (ميزانية الخصوصية): في كل مرة يتم استدعاء الوظيفة ، تستخدم المكتبة مقدار الميزانية المخصصة مسبقًا التي يحددها المستخدم. الأساس النظري هو كما يلي: مع كل نشر للبيانات الجديدة ، من المرجح أن يقوم المهاجم باستخراج معلومات حول الأشخاص من مجموعة البيانات. وبمساعدة ميزانية الخصوصية ، قد تعرض المكتبة خطأً بدلاً من قيمة.

مقارنة مكتبات الخصوصية التفاضلية


قارن المكتبات الثلاث وعملها بمجموعة بيانات معينة باستخدام نفس الأساليب:


سنرى كيف يؤثر حجم مجموعة البيانات ومستوى الخصوصية المطلوب (إبسيلون) على الدقة. في كل حالة ، سنقوم بمقارنة النتائج التي تم الحصول عليها في مكتبات مختلفة.

اختبار مجموعة البيانات


سنقوم بشكل عشوائي بإنشاء مجموعة بيانات تحتوي على عمود بأوزان الأشخاص بالكيلوغرام. سنعتبر هذه المعلومات سرية ، يجب أن تبقى سرية. يتم تمثيل كل وزن كرقم حقيقي مزدوج القيمة.

تم إنشاء الأوزان وفقًا للتوزيع الطبيعي ، حيث يبلغ متوسط ​​الوزن في مجموعة البيانات 70 كجم والانحراف المعياري 30.

لأغراض الدراسة ، سنجعل من الممكن إنشاء مجموعات بيانات بأحجام مختلفة.

إليك رمز زيادة الوزن:

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)

بالنسبة لمجموعة بيانات بحجم 10،600 ، ستبدو البيانات التي تم إنشاؤها كما يلي:


يجب أن يكون المتوسط ​​الفعلي حوالي 70 لأننا استخدمنا التوزيع الطبيعي مع mean=70. ومع ذلك ، هذه ليست قيمة دقيقة لأن الأوزان يتم إنشاؤها بشكل عشوائي. بالإضافة إلى ذلك ، لا توجد أوزان سلبية في مجموعة بياناتنا ، ويتم تقريب القيم النهائية إلى رقم واحد بعد العلامة العشرية. في هذه الحالة ، كان متوسط ​​القيمة الفعلية 70.34812570579449 ، وكان الانحراف المعياري 29.488380395675765.

يرجى ملاحظة أننا فعلنا كل هذا فقط لجعل مجموعة البيانات تبدو كمجموعة من البيانات الحقيقية. لن يؤثر توزيع القيم على التقديرات التي سنناقشها.

استخدام المكتبات


دعونا نلقي نظرة على طريقة لاستخدام المكتبات. سنقارنها دائمًا باستخدام نفس المعلمات. على سبيل المثال ، في جميع الحالات سيكون هناك نفس قيمة إبسيلون الإدخال. للقياسات ، سنستخدم متوسط ​​قيمة مجموعة البيانات. تنفذ جميع المكتبات المدروسة عمليات مثل المتوسط ​​والانحراف والمجموع وغيرها باستخدام آليات إضافة الضوضاء العشوائية. كثيرا ما تستخدم آلية لابلاس. يتم اختيار عملية البحث عن متوسط ​​القيمة بشكل تعسفي ، فهي تسمح لنا باختبار جميع العمليات باستخدام نفس الآلية.

نحسب متوسط ​​قيمة الخصوصية التفاضلية باستخدام مكتبة 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)

الشيء نفسه مع مكتبة 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);
}

يرجى ملاحظة أننا نستخدم ميزانية خصوصية كاملة تبلغ 1.0 لكل استخدام لمكتبة Google. ولا تقبل مكتبة IBM هذه المعلمة.

الآن نحسب متوسط ​​قيمة DP باستخدام diffpriv (اللغة 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
}

كيف تؤثر الخصوصية على الدقة


يمكن قياس دقة متوسط ​​القيمة ببساطة عن طريق حساب الفرق بين متوسط ​​DP والمتوسط ​​الفعلي.

دعونا نرى ما يحدث بدقة متوسط ​​الوزن عندما يتغير إبسيلون. نظرًا لأننا نضيف ضوضاء عشوائية ، فإننا سننفذ 100 تشغيل ونحسب متوسط ​​الخطأ المربع للتحقق مما إذا كانت المكتبة تولد قيمًا مشوهة.

يجب أن تثبت النتيجة أن الخطأ (الفرق بين المتوسط ​​الفعلي ومتوسط ​​DP) يتناسب عكسياً مع إبسيلون. إذا كان إبسيلون كبيرًا ، فيجب أن يكون الخطأ صغيرًا ، والعكس صحيح. لقد اختبرت قيم إبسيلون التي تتراوح من e ^ -10 إلى e ^ 10 (لاحظ المقياس اللوغاريتمي).

استخدم الاختبار مجموعة بيانات من حجم ثابت تعسفي من 10،600 خط.

خطأ تقليدي



في الواقع ، ينخفض ​​الخطأ مع زيادة إبسيلون. من المثير للاهتمام أن مكتبة Google لديها حد خطأ قياسي إذا كانت قيمة إبسيلون صغيرة جدًا. في المكتبات IBM و diffpriv لا يلاحظ هذا.

يكمن السبب في ذلك في مقتطف شفرة المصدر لمكتبة Google. في الآليات العددية. 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);
  }

في المتوسط ​​المقيد. ح:

   //  :    .
    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;

عندما يكون إبسيلون صغيرًا جدًا (أقل من 0.013 تقريبًا) ، سيكون التباين (يساوي 1 / إبسيلون) كبيرًا للغاية ، وستكون الضوضاء المضافة صفرًا. لذلك ، تقوم المكتبة بإرجاع متوسط ​​DP يعادل منتصف النطاق المستخدم للمتوسط. يتم تفسير ذلك من خلال بداية الخط الأحمر على الرسم البياني.

يحتوي Diffpriv على خطأ مربع متوسط ​​أصغر ، مما يعني دقة أفضل مقارنة بمكتبتين أخريين عند استخدام نفس إبسيلون. للتأكد من أن diffpriv لديه نفس مستوى الخصوصية مثل المنافسين ، يجب تطبيق قيمة إبسيلون أقل.

الانحراف المعياري


يبدو الانحراف المعياري للخطأ في 100 مرة كما يلي:


في مكتبة Google ، مع قيمة إبسيلون صغيرة ، يكون الانحراف ثابتًا تقريبًا ، ثم يلحق بسرعة بمكتبة IBM. بشكل عام ، لدى diffpriv انحراف معياري أصغر من الآخرين.

كيف يؤثر حجم مجموعة البيانات على الدقة


نحن نتحدث عن التأثير على دقة متوسط ​​قيمة موانئ دبي.

من مخاطر مجموعة البيانات الصغيرة أن يكون للأفراد تأثير كبير على القيمة الإجمالية ، وهي المتوسط. وبالتالي ، إذا كان هناك شخص واحد فقط في مجموعة البيانات ، فسيكون متوسط ​​القيمة الدقيق تمامًا مساويًا للوزن الدقيق لذلك الشخص. دعونا نرى كيف تساعد المكتبات على تجنب الكشف عن المعلومات الفردية عند تغيير حجم مجموعات البيانات.

سنستخدم قيمة ثابتة اعتباطية من إبسيلون 1.0.

خطأ تقليدي



كلما انخفض حجم مجموعة البيانات ، زاد خطأ مربع الوسط والعكس صحيح. كان متوقعا. إذا كان هناك عدد قليل من الأشخاص ، فأنا أريد إضافة المزيد من الضوضاء لتجنب الكشف عن البيانات الخاصة. العيب هو أنه بالنسبة لمجموعات البيانات الصغيرة ، قد تصبح القيم المجمعة غير ذات صلة تمامًا بسبب الدقة المنخفضة جدًا.

أما بالنسبة إلى diffpriv ، فإن الخطأ القياسي يعتمد بشكل أكبر على التغييرات في حجم مجموعة البيانات. ومع ذلك ، لا يزال النمط ملحوظًا ، كما هو الحال في المكتبتين الأخريين: مع نمو مجموعة البيانات ، ينخفض ​​خطأ مربع الوسط. ولكن هذا ينطبق فقط على مجموعات البيانات التي تصل إلى حوالي 30.000 خط. ثم يتغير الخطأ قليلا. أيضًا ، انتبه إلى السقوط غير الطبيعي في حجم الخطأ عندما يكون حجم مجموعة البيانات 17 912.

الانحراف المعياري


قد تسأل كيف تغير حجم الضوضاء المضافة لأكثر من 100 تشغيل لحجم مجموعة بيانات معين؟ للإجابة على ذلك ، دعنا نرسم الانحراف المعياري للخطأ لـ 100 تشغيل لكل حجم بيانات.


مع مجموعات البيانات الصغيرة ، يكون الاختلاف في الخطأ أعلى. ومع ذلك ، فإن مكتبة Google لديها ذروة بمجموعة بيانات من الحجم 6. مجموعات البيانات الأصغر والأكبر لديها تقلبات أقل. لا تراقب مكتبة IBM هذا ، الرسم البياني أقرب إلى الخطي.

مرة أخرى ، فإن الانحراف المعياري بشكل عام لديه انحراف معياري أقل.

استنتاج


لقد رأينا أن الإجراءات المتخذة في ثلاث مكتبات مختلفة للخصوصية التفاضلية تتماشى مع التوقعات الأولية. ومع ذلك ، تؤدي عمليات التنفيذ المختلفة إلى نتائج مختلفة ، خاصة في حالات الحدود ، كما هو الحال مع قيم إبسيلون صغيرة جدًا ومكتبة Google. من الناحية العملية ، لا ينبغي أن يتدخل هذا ، لأن المستخدمين لن يستخدموا مجموعات بيانات كبيرة جدًا وصغيرة جدًا ، بالإضافة إلى قيم إبسيلون صغيرة جدًا. ومع ذلك ، في مثل هذه الحالات ، قد تصدر المكتبة تحذيرًا.

يختلف سلوك diffpriv بشكل ملحوظ عن المكتبتين الأخريين ، لذا نوصي باختيار قيمة إبسيلون بعناية.

المراجع



All Articles