O al menos sin compartirlos a desconocidos. Los procesos de consenso en redes permiten hacer cálculos de forma descentralizada trabajando con información local (privada) y compartiéndolo solo con los contactos directos.

En estos días se ha hablado mucho del modelo chino y coreano y de cómo estos países han logrado controlar la expación del SARS-CoV-2 (en adelante coronavirus, que ya es casi como de la familia). Una de las medidas estrella ha sido una aplicación móvil que ha usado el gobierno de Corea del Sur para hacer un seguimiento de la infección y controlar a los pacientes. Usando un código de color para identificar el riesgo y con medidas estrictas para las personas infectadas, han conseguido frenar la fase de crecimiento de la enfermedad, y por lo visto mejor que nosotros.

Pero una de las principales críticas es el uso que se haga de esos datos. Esos países tienen fama de usar los datos públicos para controlar a sus habitantes y, en casos como este, de emergencia nacional, la gente suele estar dispuesta a sacrificar sus libertades. Por ejemplo, en una encuesta sobre el uso de datos móviles y de salud que lanzó Victoriano Izquierdo en Twitter, el 75% estaba dispuesto a permitirlo (yo soy del otro 25%)

Esto me llevó a pensar ¿es posible conseguir esa misma información sin la necesidad de compartir la información sensible, como son los datos sanitarios? Y entonces es cuando se me encendió la lucecita y caí en que se puede utilizar todo el trabajo de mi tesis, y en concreto, la parte que tiene que ver con votaciones distribuidas, que ya conté por aquí (por cierto, a ver si me pongo, que os había prometido una serie de entradas sobre todo eso).

Procesos de consenso en redes

No voy a contar otra vez con detalle todo el proceso de consenso (si te interesa está en las entradas anteriores), pero lo recordaré para recién llegados. El consenso es una forma de distribuir información en una red que permite hacer cálculos de forma distribuida, utilizando la información propia y la que proviene de los vecinos directos. A partir de un proceso iterativo: calcular-compartir-calcular-compartir… al final se llega a un estado en el que los valores que tiene la red ya no cambian y has completado el cálculo.

Imagínate que quieres saber la edad media de los usuarios de Twitter. Hay dos posibilidades: o lo calcula Twitter (que es la única que tiene todos los datos, como el gobierno de Corea del Sur) o uso esta estrategia de consenso. ¿Qué hay que hacer? Es sencillo

  1. cada persona pasa su edad a sus contactos (como son sus amistades, en principio no hay problema)
  2. cada persona, recalcula la edad de la red de la siguiente manera: edad(t+1) = edad(t) + \varepsilon \sum edadvecino_j(t) – edad(t) que se podría traducir como «mi edad más la suma de las diferencias de mi edad con las de mis contactos»

y todo esto se repite hasta que la edad no cambia. Está demostrado que esto converge (se detiene tras un número suficientemente alto de iteraciones) y que el resultado final es la media de las edades iniciales. Y todo esto sin nadie que controle ni tenga todos los datos. Además, date cuenta de que, excepto en el primer intercambio, en el que le pasas tu edad real a tus contactos, el resto empieza a ser información agregada de la que no se puede asilar los datos de una persona en particular.

¿Cómo se aplica para el caso del coronavirus?

Siguiendo este mismo procedimiento, si en lugar de la edad cada persona intercambia su situación de riesgo, el resultado que obtenemos es el riesgo medio de toda la población. Sin duda es útil, pero eso no da la información de la aplicación coreana sobre el riesgo en una determinada zona. Para eso hace falta poder segregar a las personas por sectores y agrupar los datos de cada uno. Y para ello se puede utilizar la misma estrategia que para las votaciones, con un ligero cambio.

Lo primero, hay que dividir el área que queremos estudiar en una rejilla. No habría problema en usar otros límites, aunque sean irregulares: municipios, barrios, manzanas…

Rejilla que divide la ciudad de Valencia en zonas en una rejilla de 10×10

Lo que va a intercambiar cada persona es una lista de valores, tantos como casillas. En este caso, como es de 10×10, tenemos una lista de 100 valores. El primer valor (el equivalente a la edad) es el índice de riesgo que tiene la persona en la casilla que le corresponde a su ubicación, y todo lo demás a cero. Voy a asumir que el valor de riesgo es un número entre 0 (ningún riesgo – blanco) y 1 (riesgo máximo – negro).

Una persona dentro de la zona que pertenece a la casilla (2,10) con un nivel de riesgo de 0,2