পাঠ ১৩ · ৫৭-এর মধ্যে · মডিউল ৩
Home / Courses / Ethics in Computing & AI Safety / ডিফারেনশিয়াল প্রাইভেসি

ডিফারেনশিয়াল প্রাইভেসি

Differential privacy
১২ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • ডিফারেনশিয়াল প্রাইভেসির মূল ধারণা — সরাসরি ডেটা না বদলে, প্রশ্নের উত্তরে নয়েজ যোগ করা
  • Laplace মেকানিজম — কীভাবে সেনসিটিভিটি ও epsilon থেকে নয়েজের স্কেল হিসাব করা হয়
  • প্রজননযোগ্যতা (reproducibility) নিশ্চিত করতে random.seed()-এর ভূমিকা
  • Python দিয়ে সত্যিকারের প্রাইভেসি-বনাম-নির্ভুলতা ট্রেড-অফ — দুটি ভিন্ন epsilon মানে গড় বিচ্যুতি তুলনা

১ · নয়েজ যোগ করার ধারণা

ডিফারেনশিয়াল প্রাইভেসিDifferential Privacyএকটি গাণিতিক প্রাইভেসি-সংজ্ঞা — একটি প্রশ্নের ফলাফল প্রায় একই থাকবে, কোনো একজন নির্দিষ্ট ব্যক্তির রেকর্ড ডেটাসেটে থাকুক বা না থাকুক, কারণ ফলাফলে ক্যালিব্রেটেড এলোমেলো নয়েজ যোগ করা হয়। L12-এ আমরা দেখেছি k-anonymity ডেটা জেনারেলাইজ করে (এক্সাক্ট মানকে ব্র্যাকেটে রূপান্তর করে) প্রাইভেসি অর্জন করে। ডিফারেনশিয়াল প্রাইভেসি সম্পূর্ণ ভিন্ন পথে হাঁটে — এটি ডেটা নিজে বদলায় না, বরং প্রশ্নের উত্তরে সরাসরি সামান্য এলোমেলো নয়েজ যোগ করে দেয়। ফলে যদি কেউ একই প্রশ্ন বারবার জিজ্ঞাসা করে দেখতে চায় একজন নির্দিষ্ট ব্যক্তি ডেটাসেটে আছে কিনা (তার উপস্থিতি/অনুপস্থিতিতে উত্তর কতটা বদলায় তা দেখে), নয়েজের কারণে সেই পার্থক্য বোঝা কঠিন হয়ে যায়।

২ · Laplace মেকানিজম ও epsilon

সবচেয়ে প্রচলিত পদ্ধতিগুলোর একটি হলো Laplace মেকানিজম — একটি প্রশ্নের (যেমন একটি কাউন্ট) সেনসিটিভিটি (একজন ব্যক্তি যোগ/বাদ দিলে উত্তর সর্বোচ্চ কতটা বদলাতে পারে, একটি কাউন্টিং প্রশ্নের জন্য সাধারণত ১) এবং একটি প্রাইভেসি প্যারামিটার epsilon (ε) থেকে নয়েজের স্কেল হিসাব করা হয়:

$$ \text{scale} = \frac{\text{sensitivity}}{\varepsilon} $$

এরপর এই স্কেলের একটি Laplace-বিতরণ থেকে একটি এলোমেলো সংখ্যা তৈরি করে সত্যিকারের ফলাফলের সাথে যোগ করা হয়। ε ছোট মানে বড় স্কেল মানে বেশি নয়েজ (প্রাইভেসি বেশি, নির্ভুলতা কম); ε বড় মানে ছোট স্কেল মানে কম নয়েজ (নির্ভুলতা বেশি, প্রাইভেসি কম)।

ছোট ε (যেমন ০.১)
বড় নয়েজ স্কেল — শক্তিশালী প্রাইভেসি গ্যারান্টি, কিন্তু ফলাফল সত্যিকারের মান থেকে অনেক দূরে সরে যেতে পারে।
বড় ε (যেমন ১.০)
ছোট নয়েজ স্কেল — ফলাফল সত্যিকারের মানের কাছাকাছি থাকে, কিন্তু প্রাইভেসি গ্যারান্টি তুলনামূলকভাবে দুর্বল।
প্রজননযোগ্যতা
random.seed() ফিক্স করলে একই কোড বারবার চালালে একই নয়েজ তৈরি হয় — শিক্ষামূলক/পরীক্ষামূলক উদ্দেশ্যে ফলাফল যাচাইযোগ্য রাখতে এটি গুরুত্বপূর্ণ (বাস্তব ডিপ্লয়মেন্টে অবশ্যই সত্যিকারের র‍্যান্ডমনেস ব্যবহার করা হয়)।

৩ · কোড দিয়ে প্রাইভেসি-নির্ভুলতা ট্রেড-অফ

নিচের কোড সেলে ৫০ জনের একটি সিন্থেটিক জরিপে "হ্যাঁ" উত্তরের সত্যিকারের সংখ্যা গণনা করা হয়েছে, তারপর দুটি ভিন্ন epsilon মানে (১.০ ও ০.১) Laplace নয়েজ যোগ করে ২০০ বার পুনরাবৃত্তি করে গড় বিচ্যুতি (average absolute deviation) হিসাব করা হয়েছে — একবারের নয়েজ শুধু কাকতালীয় হতে পারে, কিন্তু বহুবারের গড় ট্রেড-অফটি নির্ভরযোগ্যভাবে দেখায়।

Python
import random

random.seed(42)  # প্রজননযোগ্যতার জন্য ফিক্সড সিড

# একটি সিন্থেটিক, ইলাস্ট্রেটিভ জরিপ -- ৫০ জনের একটি sensitive হ্যাঁ/না উত্তর
survey = [True, False, True, True, False, False, True, False, True, True,
          False, False, True, True, True, False, False, True, False, True,
          True, False, True, False, False, True, True, False, True, True,
          False, True, False, False, True, True, False, True, False, True,
          True, False, False, True, True, False, True, True, False, True]

true_count = sum(1 for answer in survey if answer)
print(f"জরিপে মোট মানুষ: {len(survey)}, সত্যিকারের 'হ্যাঁ' সংখ্যা: {true_count}")

def laplace_noise(scale):
    """Laplace(0, scale) থেকে একটি নমুনা -- দুটি স্বাধীন Exponential(1/scale)
    ভেরিয়েবলের বিয়োগফল হিসেবে (এটি একটি গাণিতিকভাবে বৈধ নির্মাণ)।"""
    u1 = random.expovariate(1 / scale)
    u2 = random.expovariate(1 / scale)
    return u1 - u2

sensitivity = 1  # একজন মানুষ যোগ/বাদ দিলে কাউন্ট সর্বোচ্চ ১ বদলাতে পারে
trials = 200

print(f"\n{'epsilon':>8} | {'scale':>6} | {'একবারের নয়েজি ফলাফল':>22} | {'গড় বিচ্যুতি ({}বার)'.format(trials):>22}")
for epsilon in (1.0, 0.1):
    scale = sensitivity / epsilon
    one_shot_noisy = true_count + laplace_noise(scale)

    deviations = []
    for _ in range(trials):
        noisy = true_count + laplace_noise(scale)
        deviations.append(abs(noisy - true_count))
    avg_deviation = sum(deviations) / len(deviations)

    print(f"{epsilon:>8} | {scale:>6} | {one_shot_noisy:>22.2f} | {avg_deviation:>22.3f}")

    
ফিক্সড সিড (random.seed(42)) থাকায় এই কোডটি প্রতিবার একই সংখ্যা দেবে — সত্যিকারের কাউন্ট ২৮ (৫০ জনের মধ্যে)। epsilon=1.0-এ নয়েজ স্কেল মাত্র ১.০, ফলে ২০০ বারের গড় বিচ্যুতি প্রায় ১.০৫৫ — অর্থাৎ নয়েজি ফলাফল প্রায় সবসময় সত্যিকারের মানের ১-২ এর মধ্যে থাকে, যথেষ্ট নির্ভুল। কিন্তু epsilon=0.1-এ নয়েজ স্কেল ১০.০, আর ২০০ বারের গড় বিচ্যুতি প্রায় ১০.৫২৪ — অর্থাৎ ফলাফল সত্যিকারের মান থেকে গড়ে প্রায় ১০ জন দূরে সরে যায়, যা এই ছোট ৫০ জনের নমুনার জন্য যথেষ্ট বড় একটি বিচ্যুতি। এটিই প্রাইভেসি-নির্ভুলতা ট্রেড-অফের সংখ্যাগত প্রমাণ — একই দিক থেকে দুটি সংখ্যাই "নয়েজ যোগ করা" কিন্তু ফলাফলের ব্যবহারযোগ্যতায় বিশাল পার্থক্য।
মূল কথা · Key takeaway

ডিফারেনশিয়াল প্রাইভেসি কোনো "সব সমস্যার সমাধান" নয় — এটি একটি টিউনযোগ্য ডায়াল (epsilon) যা সংস্থাকে সচেতনভাবে প্রাইভেসি ও নির্ভুলতার মধ্যে একটি ভারসাম্য বেছে নিতে বাধ্য করে, এবং সেই ভারসাম্যকে একটি নির্দিষ্ট সংখ্যায় প্রকাশ করে (k-anonymity-র বাইনারি "যথেষ্ট নিরাপদ/নয়" এর তুলনায় এটি একটি ধারাবাহিক স্কেল)। একাধিক প্রশ্নের উত্তরে বারবার নয়েজ যোগ করলে প্রাইভেসি বাজেট (cumulative epsilon) ধীরে ধীরে ফুরিয়ে যায় — এটি ব্যবহারিক ডিফারেনশিয়াল-প্রাইভেসি সিস্টেম ডিজাইনের একটি গুরুত্বপূর্ণ চ্যালেঞ্জ।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ উপরের কোডে "একবারের নয়েজি ফলাফল" (one_shot_noisy) কলামের বদলে শুধু "গড় বিচ্যুতি" কলাম কেন বেশি নির্ভরযোগ্য প্রমাণ?

কারণ একটি এলোমেলো নয়েজের একবারের নমুনা কাকতালীয়ভাবে ছোট বা বড় হতে পারে — শুধু একবারের রান দেখে বলা যায় না নয়েজ "সাধারণত" কতটা বড়। ২০০ বার পুনরাবৃত্তি করে গড় নেওয়া হলে র‍্যান্ডম ওঠানামা গড়ে মিলিয়ে যায়, আর অবশিষ্ট থাকে নয়েজের প্রকৃত, নির্ভরযোগ্য "সাধারণ আকার" — যা scale মানের সাথে সরাসরি সম্পর্কিত (Laplace(0, b)-এর গড় পরম মান তাত্ত্বিকভাবে ঠিক b-এর কাছাকাছি)।

প্র ০২ যদি একই epsilon বাজেট দিয়ে একই ডেটাসেটে ১০০টি ভিন্ন প্রশ্নের উত্তর দিতে হয়, তাহলে সামগ্রিক প্রাইভেসি সুরক্ষার কী হবে?

প্রতিটি প্রশ্নের উত্তরে আলাদাভাবে epsilon নয়েজ যোগ করা হলেও, ১০০টি উত্তর একসাথে বিশ্লেষণ করে আক্রমণকারী অনেক বেশি তথ্য বের করে ফেলতে পারেন (প্রতিটি উত্তরের নয়েজ আলাদা এলোমেলো হওয়ায় গড় করলে সত্যিকারের প্যাটার্ন ফুটে ওঠে) — এই কারণে ডিফারেনশিয়াল প্রাইভেসিতে একটি "প্রাইভেসি বাজেট" ধারণা থাকে, যেখানে একাধিক প্রশ্নের epsilon-গুলো যোগ হতে থাকে এবং একটি সর্বোচ্চ সীমার পর নতুন প্রশ্নের অনুমতি দেওয়া হয় না।

প্র ০৩ উপরের কোডে যদি sensitivity-কে ১ থেকে বাড়িয়ে ৫ করা হয় (ধরুন প্রতিটি ব্যক্তি সর্বোচ্চ ৫ পয়েন্ট প্রভাব ফেলতে পারেন এমন একটি ভিন্ন প্রশ্নের জন্য), নয়েজের স্কেলের কী হবে?

scale = sensitivity / epsilon সূত্র অনুযায়ী, একই epsilon-এ sensitivity পাঁচ গুণ বাড়লে scale-ও ঠিক পাঁচ গুণ বেড়ে যাবে (যেমন epsilon=1.0-এ scale ১.০ থেকে ৫.০ হয়ে যাবে) — অর্থাৎ একই প্রাইভেসি গ্যারান্টি বজায় রাখতে, বেশি "সংবেদনশীল" (বেশি প্রভাবশালী) প্রশ্নের জন্য বেশি নয়েজ প্রয়োজন হয়।

অনুশীলন

  1. চিন্তা করুন: একটি কোম্পানি দাবি করে তাদের ডেটা "ডিফারেনশিয়ালি প্রাইভেট" কিন্তু তারা epsilon-এর মান প্রকাশ করে না। এই দাবিটি মূল্যায়ন করার সময় কেন epsilon-এর সংখ্যাটি জানা গুরুত্বপূর্ণ?

    কারণ "ডিফারেনশিয়ালি প্রাইভেট" শব্দটি নিজে কোনো নির্দিষ্ট শক্তির গ্যারান্টি দেয় না — একটি অত্যন্ত বড় epsilon (যেমন ১০০) দিয়েও টেকনিক্যালি "ডিফারেনশিয়াল প্রাইভেসি" প্রয়োগ করা যায়, কিন্তু তাতে নয়েজ এত কম হবে যে প্রকৃত প্রাইভেসি সুরক্ষা প্রায় শূন্য। epsilon-এর সংখ্যাটি ছাড়া দাবিটি অর্থহীন — এটি অনেকটা "আমরা এনক্রিপশন ব্যবহার করি" বলার মতো, কিন্তু কোন অ্যালগরিদম বা কী-সাইজ তা না বলার মতো।

  2. পরীক্ষা করুন: উপরের কোড সেলে epsilon-এর তালিকায় 0.5 যোগ করুন (for epsilon in (1.0, 0.5, 0.1):) এবং Run চেপে দেখুন গড় বিচ্যুতি ১.০ ও ০.১-এর মধ্যে কোথায় পড়ে।

    epsilon=0.5-এ scale = 1/0.5 = 2.0 হবে — যা epsilon=1.0-এর স্কেল (১.০) এর দ্বিগুণ কিন্তু epsilon=0.1-এর স্কেল (১০.০) এর তুলনায় অনেক ছোট। ফলে গড় বিচ্যুতিও এই দুটির মাঝামাঝি একটি মান দেখাবে (তাত্ত্বিকভাবে scale-এর কাছাকাছি, অর্থাৎ প্রায় ২-এর আশেপাশে) — নিশ্চিত করে যে নয়েজের পরিমাণ epsilon-এর সাথে সরলরৈখিকভাবে (ব্যস্তানুপাতিকভাবে) সম্পর্কিত।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
অ্যানোনিমাইজেশন ও k-anonymity