أمان البيانات والخصوصية في التحليل
بيانات الناس أمانة؛ كيف نحلّلها دون أن ننتهك خصوصيتهم؟ ⏱ نحو 45 دقيقة.
- تدرك أن تحليل بيانات الناس مسؤولية قانونية وأخلاقية.
- تطبّق مبدأ التقليل وإخفاء الهوية.
- تحذر إعادة التعرّف من الحقول شبه المعرّفة.
- تنشر نتائج مجمّعة لا صفوفًا فردية.
١البيانات مسؤولية لا مِلك
تحليل بيانات الناس يحمل واجبًا أخلاقيًّا وقانونيًّا. في المملكة يحكمه نظام حماية البيانات الشخصية PDPL: اجمع ما تحتاجه فقط، لغرضٍ معلوم، واحمِه، ولا تحتفظ به أطول من اللازم. التحليل الجيّد يحترم الخصوصية بالتصميم لا بعد الحادثة.
| المبدأ | المعنى في التحليل |
|---|---|
| التقليل | لا تجمع حقلًا لن تحلّله |
| الغرض | استخدم البيانات لما جُمِعت له |
| الحماية | قيّد الوصول وشفّر الحسّاس |
| إخفاء الهوية | حلّل بلا معرفة هوية الأفراد حيثما أمكن |
٢إخفاء الهوية: أزل المعرّفات
أكثر التحليلات لا تحتاج هويّة الأفراد، بل أنماطهم. فنزيل المعرّفات المباشرة (اسم، بريد، هاتف) قبل التحليل:
import pandas as pdusers = pd.DataFrame({ "name": ["سارة", "خالد", "نورة", "سعد"], "email": ["sara@mail.sa", "k@mail.sa", "n@mail.sa", "s@mail.sa"], "city": ["الرياض", "جدة", "الرياض", "جدة"], "age": [25, 31, 28, 40], "spend": [300, 150, 420, 90],})# أزل المعرّفات المباشرةanon = users.drop(columns=["name", "email"])print(anon)# التحليل يعمل دون أي هويّةprint("متوسط الإنفاق حسب المدينة:")print(anon.groupby("city")["spend"].mean())
حذفنا الاسم والبريد، وبقي التحليل كاملًا: متوسط الإنفاق حسب المدينة لا يحتاج معرفة من. هذا جوهر التقليل.
٣حذر: إعادة التعرّف
حذف الاسم لا يكفي دائمًا. تركيبةٌ من حقولٍ شبه معرّفة (مدينة + عمر + مهنة) قد تعيد التعرّف على فرد. مقياس بسيط: k-إخفاء — ألّا تقلّ كل تركيبة عن k أفراد:
import pandas as pdusers = pd.DataFrame({ "name": ["سارة", "خالد", "نورة", "سعد"], "email": ["sara@mail.sa", "k@mail.sa", "n@mail.sa", "s@mail.sa"], "city": ["الرياض", "جدة", "الرياض", "جدة"], "age": [25, 31, 28, 40], "spend": [300, 150, 420, 90],})# كم فردًا في كل تركيبة (مدينة)؟groups = users.groupby("city").size()print(groups)k = groups.min()print("أصغر مجموعة k =", k)print("آمن عند k>=2؟", bool(k >= 2))
توقّع وتحقّق
النظام المحلي لحماية البيانات الشخصية:
«لا تجمع حقلًا لن تحلّله» مبدأ:
إزالة الاسم والبريد قبل التحليل:
تركيبة مدينة+عمر قد تؤدّي إلى:
الخلاصة
- تحليل بيانات الناس يحكمه
PDPL: التقليل، والغرض، والحماية، وإخفاء الهوية. - أزل المعرّفات المباشرة؛ أكثر التحليل لا يحتاج معرفة الأفراد.
- حذف الاسم لا يكفي: تركيبة الحقول شبه المعرّفة قد تعيد التعرّف (
k-إخفاء). - انشر المجمّع لا الفردي، وعامل البيانات كأنها قد تُكشَف.
تحدٍّ برمجي: أخفِ الهوية
متقدمأزل المعرّفات المباشرة (الاسم والبريد)، ثم اطبع عدد الأعمدة الباقية، وحجم أصغر مجموعة مدينة (قيمة k).
- احذف
nameوemail. - اطبع عدد الأعمدة الباقية، ثم حجم أصغر تجمّع حسب
city.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
import pandas as pdusers = pd.DataFrame({ "name": ["سارة", "خالد", "نورة", "سعد"], "email": ["sara@mail.sa", "k@mail.sa", "n@mail.sa", "s@mail.sa"], "city": ["الرياض", "جدة", "الرياض", "جدة"], "age": [25, 31, 28, 40], "spend": [300, 150, 420, 90],})# أزل name و email، ثم اطبع عدد الأعمدة الباقية وأصغر مجموعة مدينة (k)
💡 تلميح 1
users.drop(columns=["name", "email"]).💡 تلميح 2
groupby("city").size().min().حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
import pandas as pdusers = pd.DataFrame({ "name": ["سارة", "خالد", "نورة", "سعد"], "email": ["sara@mail.sa", "k@mail.sa", "n@mail.sa", "s@mail.sa"], "city": ["الرياض", "جدة", "الرياض", "جدة"], "age": [25, 31, 28, 40], "spend": [300, 150, 420, 90],})anon = users.drop(columns=["name", "email"])print(anon.shape[1])print(int(anon.groupby("city").size().min()))