Python Data Science Program
📓 Abrir notebook en GitHub

Clase 225 — Privacidad diferencial: intro

Parte: 7 — Ética, Fairness y Privacidad · Fuente: Dwork & Roth, The Algorithmic Foundations of Differential Privacy (2014) caps. 2-3 + Dwork, McSherry, Nissim, Smith (TCC, 2006) Calibrating Noise to Sensitivity. ⏱️ Duración estimada: 75 min.

🎯 Objetivo

Entender privacidad diferencial (DP) como la única definición formal de privacidad con garantías matemáticas — no "anonimización" heurística que se rompe con un join. Implementar el mecanismo de Laplace desde cero, observar el trade-off privacy-utility vía el presupuesto ε (epsilon), y mirar conceptualmente DP-SGD (Abadi et al. 2016): cómo se entrena un modelo sin que un atacante pueda inferir si tu registro estuvo en el training set.

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

🗺️ Temas

# Tema Por qué importa
1 Anonimización falla (Netflix Prize, AOL search logs) k-anonymity / pseudonimización son rotas por linkage attacks. DP es la respuesta formal.
2 Definición (ε, δ)-DP y datasets vecinos El ε es la garantía; sin él, "privacidad" es marketing.
3 Sensibilidad Δf Calibra cuánto ruido hace falta. Conteo: Δf=1. Suma acotada a [0, B]: Δf=B.
4 Mecanismos Laplace y Gaussiano Laplace para ε-DP puro; Gaussiano para (ε, δ)-DP con δ chico.
5 Composición y post-processing Cada query gasta presupuesto; cualquier f(salida DP) sigue siendo DP.
6 DP-SGD (Abadi 2016) Clip per-sample + ruido gaussiano. Es el estándar para deep learning privado.

📖 Definiciones y características

📂 Dataset / recursos

🧪 Ejercicios

  1. Laplace básico: implementar laplace_mechanism(value, sensitivity, epsilon) y verificar empíricamente sobre 10_000 corridas que la varianza es 2·(Δf/ε)².
  2. Conteo privado: contar empleados con salario > 100k con ε ∈ {0.1, 1.0, 10.0}. Reportar error medio absoluto y discutir el trade-off.
  3. Mean privado con clipping: clip salarios a [0, B], sumar con Laplace (Δf=B/n, ε=1), dividir por n. Mostrar bias vs varianza al variar B.
  4. Histograma privado: 10 bins de salario, ruido Laplace independiente por bin (sensibilidad = 1 por bin). Comparar con histograma no privado.
  5. Composición: hacer 10 conteos con ε=0.1 cada uno → presupuesto total ε=1.0. Mostrar acumulación empírica del ruido.

📝 Homework verificable

Notebook con:

  1. Cargar Adult / Census Income (UCI, ~32K filas).
  2. Publicar un dashboard DP con 5 estadísticas (count, mean age, mean hours-per-week, count por género, count por education) bajo presupuesto total ε=1.0. Repartir el presupuesto entre queries y justificar.
  3. Entrenar un LogisticRegression clásico para predecir income > 50k, reportar accuracy.
  4. Re-entrenar con DP-SGD manual: clip per-sample gradient norm a C=1.0, sumar N(0, σ²) con σ=1.0. Reportar accuracy y comparar.
  5. Discutir: ¿cuánta utilidad perdés? ¿el modelo DP es publicable sin riesgo de membership inference?

Criterio de aceptación: el dashboard cumple ε=1.0 total (verificable sumando los ε_i), el modelo DP-SGD entrena sin error y la pérdida de accuracy vs no-DP es < 10 pp.

⚠️ Errores comunes

Síntoma / mensaje Causa y cómo arreglar
"Privatizo la salida pero el atacante reconstruye el dato" Olvidaste clippear la entrada — un outlier hace Δf explotar y el ruido no alcanza. Fix: clip a [a, b] ANTES de sumar.
Calculo Δf de una media como B (no B/n) Confundís sensibilidad de suma vs media. Fix: para mean con n fijo y valores en [0, B], Δf = B/n.
Hago 100 queries con ε=1 y digo "es ε=1-DP" Sin tracking, gastaste ε=100 por composición básica. Fix: dividir el budget total entre queries o usar Rényi DP / moments accountant.
ε=10 o ε=20 "porque así da mejor utility" ε≥10 da garantía prácticamente nula (e^10 ≈ 22000 veces más probable). Fix: empezar con ε∈[0.1, 1]; si la utility no alcanza, revisar el diseño, no inflar ε.
DP-SGD sin clippear per-sample Sin clipping, la sensibilidad del gradiente es ilimitada → garantía vacía. Fix: torch.nn.utils.clip_grad_norm_ por sample, no por batch.
Reutilizar el dataset privado para "validar" el modelo DP El proceso de validación también gasta budget. Fix: contar TODO acceso al dato sensible dentro del ε total.

❓ Preguntas frecuentes

❓ ¿Qué ε es "seguro"?

No hay un número universal. La US Census 2020 usó ε ≈ 19.6 (TopDown algorithm, criticado por flojo). Apple iOS reporta ε por feature (típicamente 2-8 por día). Recomendación práctica: empezar en ε=1, justificar cualquier valor mayor. ε≥10 es difícil de defender ante un comité de ética.

❓ ¿DP me protege de TODO ataque?

Te protege contra membership inference y reconstruction bajo el modelo de atacante con conocimiento auxiliar arbitrario. NO te protege contra: ataques al modelo no-DP entrenado paralelamente, side-channels (timing), o si el atacante tiene el dato original (no es encriptación).

❓ ¿Local DP vs Central DP?

Central DP: confiás en el curador (el servidor agrega ruido). Más utilidad. Local DP: cada usuario agrega ruido antes de mandar (Apple, RAPPOR de Google). Menos utilidad, pero no confiás en nadie. La elección depende del modelo de amenaza.

❓ ¿Vale la pena en deep learning?

Sí, con caveats. DP-SGD penaliza accuracy (5-15 pp típicos), y necesita batches grandes para que el ruido se promedie. Opacus / TF-Privacy automatizan todo. Es obligatorio si vas a publicar el modelo o usar datos médicos/financieros bajo regulación.

❓ ¿Y federated learning?

Federated learning (Clase 226) por sí solo NO es DP — el server ve gradientes que filtran información. Se combina con secure aggregation + DP para garantías reales (lo que hace Google Gboard).

🔗 Referencias

📥 Material descargable

➡️ Siguiente clase

Clase 226 — Federated learning: intro