lección 3
Día 2 -- Anonimización avanzada para investigación médica
El Dr. Martin necesita un dataset para su estudio de adherencia. Implementas k-anonymity con k=5, generalización progresiva de quasi-identificadores y verificación automática antes de entregar.
⏱ 45 min
### Martes, 9:00 AM -- La peticion del Dr. Martin
Datasets de esta lección (en tu carpeta datos/): datos/pacientes.csv (usarás fecha_nacimiento, sexo, codigo_postal y provincia como quasi-identificadores a generalizar), datos/diagnosticos.csv (filtra codigo_cie10 entre I10 e I15 para la cohorte de hipertensión), datos/prescripciones.csv (medicamento, principio_activo) y datos/citas.csv (para calcular adherencia: nº de citas en los últimos 6 meses). El objetivo es construir el dataset anonimizado con k=5 a partir de estos ficheros.
Llegas al standup del martes y el Dr. Alejandro Martin ya está esperando. Normalmente no viene a los standups del equipo de datos, así que algo importante pasa. Laura le cede la palabra:
1Dr. Alejandro Martin 09:05 AM (en la call de standup)23"Buenos días. Perdonad que me cuele en vuestro standup pero necesito4ayuda urgente. Estoy preparando un estudio sobre adherencia al5tratamiento en pacientes con hipertension. El comite de etica me ha6aprobado el protocolo PERO con una condicion: los datos tienen que7cumplir k-anonymity con k mínimo de 5.89Lo que necesito:10- Datos de ~3000 pacientes con hipertension (diagnóstico I10-I15)11- Campos: rango_edad, sexo, provincia, diagnóstico, medicamento,12 adherencia_6_meses (si/no), num_consultas13- SIN ninguna posibilidad de reidentificar a nadie1415El paper lo tengo que mandar en 2 semanas. Si los datos no están16está semana, pierdo el deadline de la revista."1718Rosa Martinez 09:07 AM19"Alejandro, el comite ha aprobado k=5. Eso es lo que implementamos.20Ni un paciente menos por grupo. Si hay grupos con menos de 5, se21suprimen del dataset. Sin excepciones."2223Laura Sanchez 09:08 AM24"@tu esto es tuyo. Disena la generalizacion, implementa la verificacion25de k=5 y genera el dataset. Yo reviso antes de que salga nada."
El Dr. Martin necesita datos para investigación -- con restricciones de privacidad estrictas
### Qué es k-anonymity y por qué k=5
k-anonymity es una propiedad de un dataset que garantiza que cualquier combinación de quasi-identificadores aparece en al menos k registros diferentes. Es decir: si miras el dataset anonimizado y encuentras a alguien con "45-49 años, hombre, Valencia, hipertensión", tiene que haber AL MENOS 5 personas con exactamente esas mismas características. Así, aunque sepas que Juan Garcia tiene 47 años, es de Valencia y tiene hipertensión, no puedes señalarlo en el dataset porque hay al menos 4 personas más con el mismo perfil.
El valor de k=5 no es arbitrario. El comité de ética de MediTrack lo decidió basándose en recomendaciones de la AEPD y del ICO (UK): k=3 se considera el mínimo aceptable para datos genéricos; k=5 es el estándar para datos de salud; k=10 o superior se usa para datos de salud mental, VIH o adicciones. El Dr. Martin trabaja con hipertensión (común, no estigmatizada), así que k=5 es suficiente.
Los quasi-identificadores (QI) son campos que por sí solos no identifican a una persona, pero COMBINADOS pueden hacerlo. Edad exacta + código postal + sexo + diagnóstico = combinación potencialmente única. La técnica para conseguir k-anonymity es la GENERALIZACION: hacer los valores menos específicos hasta que cada combinación tenga al menos k registros.
1# Jerarquias de generalizacion para quasi-identificadores23# EDAD: fecha exacta -> edad exacta -> rango 5 años -> rango 10 años -> *4# Nivel 0: 1978-03-15 (fecha nacimiento)5# Nivel 1: 46 años6# Nivel 2: 45-49 años (rangos de 5)7# Nivel 3: 40-49 años (rangos de 10)8# Nivel 4: * (suprimido)910# CODIGO POSTAL: completo -> 3 primeros digitos -> provincia -> *11# Nivel 0: 4602112# Nivel 1: 460** (primeros 3 digitos = zona)13# Nivel 2: Valencia (provincia)14# Nivel 3: Comunidad Valenciana (CCAA)15# Nivel 4: * (suprimido)1617# SEXO: M/F/X -> * (solo 2-3 valores, no se generaliza parcialmente)18# Nivel 0: M19# Nivel 1: * (suprimido -- si no cumple k)2021# DIAGNOSTICO: subcategoria -> categoría -> grupo -> capitulo -> *22# Nivel 0: I10.9 (Hipertension esencial no especificada)23# Nivel 1: I10 (Hipertension esencial)24# Nivel 2: I10-I15 (Enfermedades hipertensivas)25# Nivel 3: I (Enfermedades del sistema circulatorio)26# Nivel 4: * (suprimido)2728# La ESTRATEGIA es generalizar lo MINIMO para conseguir k=5.29# Empiezas con nivel 0 (máximo detalle) y subes niveles en los QI30# que más "discriminan" hasta que todas las combinaciones tengan >= 5.
Jerarquías de generalización -- de lo específico a lo general
Consejo de senior: La generalización tiene un coste en UTILIDAD del dataset. Si generalizas demasiado, el Dr. Martin no puede distinguir entre pacientes de 45 y de 75 años -- y eso hace el estudio inútil. El arte de k-anonymity es encontrar el equilibrio: generalizar LO JUSTO para cumplir k=5 sin destruir el valor analítico. Por eso se empieza por el QI que menos impacto tiene en la investigación y se va subiendo.
### El algoritmo paso a paso
Laura te explica el approach que han usado antes: "Nosotros usamos un algoritmo greedy. Empiezas con generalización mínima (nivel 1 en todos los QI). Verificas si k=5 se cumple. Si hay grupos con menos de 5 registros, tienes dos opciones: generalizar más el QI que crea más grupos pequeños, o SUPRIMIR los registros de grupos pequeños. La supresión es último recurso porque pierdes datos."
- 01.Extraer datos originales de pacientes con diagnóstico I10-I15
- 02.Eliminar TODOS los identificadores directos (nombre, DNI, email, teléfono, dirección)
- 03.Aplicar generalización nivel 1 a todos los quasi-identificadores (edad -> rango 5, CP -> 3 dígitos)
- 04.Verificar k-anonymity: contar registros por cada combinación única de QI
- 05.Si hay grupos con < 5 registros: subir nivel de generalización del QI más problemático
- 06.Repetir hasta que TODAS las combinaciones tengan >= 5 registros
- 07.Si quedan outliers irreconciliables: suprimir esos registros (último recurso)
- 08.Verificación final: assert que min(group_size) >= 5
- 09.Generar informe de calidad: registros originales vs finales, % suprimido, niveles de generalización usados
### Debilidades de k-anonymity que debes conocer
Rosa te manda un mensaje privado: "Antes de que implementes, ten en cuenta que k-anonymity NO es perfecta. Tiene dos debilidades conocidas que el comite sabe y acepta para este estudio, pero que tu debes documentar:"
- Homogeneity attack: Si todos los registros de un grupo de k=5 tienen el MISMO valor sensible (ej: los 5 tienen medicamento X), un atacante sabe que la persona toma medicamento X aunque no sepa CUAL de los 5 es. Solución: l-diversity (no requerida en este estudio).
- Background knowledge attack: Si un atacante sabe información externa (ej: "Juan es de Valencia y tiene 47 años"), puede reducir candidatos. k=5 mitiga esto pero no lo elimina al 100%.
- Suppression bias: Si suprimes muchos outliers, el dataset resultante puede no ser representativo de la población real. El Dr. Martin debe saber cuántos registros se perdieron.
k-anonymity es NECESARIA pero no SUFICIENTE para privacidad total. Para datos altamente sensibles (VIH, salud mental, adicciones), se añade l-diversity (diversidad de valores sensibles dentro de cada grupo) o t-closeness (distribución de valores sensibles similar a la global). Para el estudio del Dr. Martin sobre hipertensión (patología común, no estigmatizada), k=5 es suficiente según el comité de ética.
### La conversación con el Dr. Martin
A las 11 de la mañana, el Dr. Martin te busca en la cafetería. Es un hombre grande, con barba canosa, que habla con las manos y se apasiona cuando explica su investigación:
1Dr. Martin: "Mira, lo que quiero estudiar es simple: de los pacientes2con hipertension que empezaron tratamiento hace 6 meses, cuantos3siguen viniendo a consulta y tomando su medicacion? La adherencia4al tratamiento es un problema ENORME en salud publica. Si el 40%5abandona a los 6 meses, necesitamos saber POR QUE."67Tu: "Entiendo. Para eso necesitas poder agrupar por paciente8anonimo a lo largo del tiempo -- saber que el paciente ANON-X9tuvo 3 consultas en 6 meses, aunque no sepas quien es."1011Dr. Martin: "Exacto. Necesito el vinculo longitudinal pero sin12saber la identidad. Y necesito suficiente granularidad en edad13y zona geografica para buscar patrones. Si me das todo como14'40-49 años, Espana' no puedo investigar nada útil."1516Tu: "Puedo empezar con rangos de 5 años y 3 primeros digitos del17CP. Si k=5 se cumple con eso, mantenemos esa granularidad. Si no,18subo de nivel solo en los QI problematicos."1920Dr. Martin: "Perfecto. Y anademe el sexo, medicamento prescrito21y si han tenido efectos adversos reportados. Eso es clave para22mi estudio."2324Tu: "El medicamento concreto puede ser un quasi-identificador en25algunos casos. Si solo hay 2 pacientes en Valencia con rango2660-64 que toman Lisinopril... Voy a verificar que incluyendo27medicamento se sigue cumpliendo k=5."2829Dr. Martin: (asiente) "Lo ves? Por eso necesitaba a alguien que30ENTIENDA de privacidad y de datos a la vez."
El Dr. Martin explica lo que necesita -- tu piensas en los riesgos
## ejercicios
Funciones de generalizacion de quasi-identificadores
Implementa las funciones de generalizacion para cada quasi-identificador con multiples niveles. Cada función debe aceptar el valor original y el nivel de generalizacion deseado, y devolver el valor generalizado. Incluye: edad, código postal, diagnóstico CIE-10 y fecha.
Verificador de k-anonymity
Implementa una clase KAnonymityVerifier que recibe un DataFrame y una lista de quasi-identificadores, y: 1) verifica si se cumple k-anonymity para un k dado, 2) identifica los grupos que violan la condicion, 3) sugiere que QI generalizar más, 4) genera un informe de calidad.
Generar dataset anonimizado para el Dr. Martin
Implementa el pipeline completo que: 1) extrae pacientes con hipertension, 2) aplica generalizacion progresiva, 3) verifica k=5, 4) suprime outliers si es necesario, 5) genera el CSV final con informe de calidad. Este es el entregable real al Dr. Martin.
Informe de calidad del dataset para el Dr. Martin
El Dr. Martin necesita saber que tan útil es el dataset anonimizado. Escribe una query SQL que genere un informe de calidad: distribución de edad, cobertura geografica, diversidad de diagnosticos, y comparacion con los datos originales (sin revelar PII). Este informe acompana al dataset.
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...