Ya hace dos días desde que puse el enunciado de un maravilloso problema de examen, tiempo más que de sobra para que cualquier alumno haya podido encontrar la solución 😉 Entonces, ¿qué?, ¿podremos esperar que en el siguiente episodio de Battlestar Galactica 2003 el cylon femenino y atractivísimo sea descubierto?
He aquí la respuesta (siéntense cómodamente, que lo explico todo con pelos y señales):
Como se comentaba en el mismo enunciado, nos encontrábamos ante una red bayesiana no sólo simplona, sino bastante clásica:

donde las tres variables aleatorias que aparecen encerradas en cada nodo son discretas (sólo dan valores de un conjunto finito de valores), de hecho, binarias (sólo dan “verdadero” (V) o “falso” (F)), de ahí que hayamos indicado las probabilidades asociadas a los nodos de la red con una P mayúscula, utilizándose habitualmente la p minúscula para probabilidades continuas. Así, P(hay\_componentes \mid cylon) se lee “la probabilidad de que los componentes seleccionados por Baltar estén en la muestra de sangre dado que el individuo que ha donado su susodicha es cylon”.
La primera variable de la red, cylon, nos dice si el individuo es cylon (V) o humano (F). La segunda, hay\_componentes, nos dice si la muestra de sangre tomada de ese individuo contiene realmente los componentes que el test podría detectar (V) o no (F). La última, test\_dice\_humano, es V si el test dice que el individuo es humano o F si dice que es cylon.
En el enunciado se nos da suficiente información para deducir las distribuciones de probabilidad asociadas a los nodos de la red. Para empezar, se nos dice que si tomamos a cualquier ciudadano de las Doce Colonias tenemos un 1% de probabilidad de haber acertado con un cylon, independientemente de todo lo demás. Eso es lo mismo que definir:
P(cylon)=\begin{cases}0.01 & \text{si } cylon=V \\ 0.99 & \text{si } cylon=F \\ \end{cases}Hay que hacer notar que esto es ambiguo en su sintaxis funcional; lo correcto sería:
P_{cylon}(X)=\begin{cases} 0.01 & \text{si } X=V \\ 0.99 & \text{si } X=F \\ \end{cases}Pero bueno, mientras no dé lugar a confusión es mucho más cómodo trabajar con la primera forma.
En el enunciado también nos dicen que, si el individuo es realmente cylon, la probabilidad de que tenga en su sangre los componentes seleccionados por Baltar es del 1% (99% de no tenerlos), mientras que si es humano, la probabilidad de tenerlos es del 40% (60% de no tenerlos). Es decir:
P(hay\_componentes \mid cylon)= \\ \begin{cases} 0.01 & \text{si } cylon=V \text{ y } hay\_componentes=V \\ 0.99 & \text{si } cylon=V \text{ y } hay\_componentes=F \\ 0.4 & \text{si } cylon=F \text{ y } hay\_componentes=V \\ 0.6 & \text{si } cylon=F \text{ y } hay\_componentes=F \\ \end{cases}Muchas veces es más visual poner esto como una tabla; yo he escogido la notación funcional para resaltar que por mucho que P tenga la semántica de una función de masa de probabilidad (condicionada), es sólo una función matemática de dos variables que cumple ciertas restricciones.
Finalmente, también nos dan la información necesaria para definir la última probabilidad. No voy a repetir esa parte del enunciado:
P(test\_dice\_humano \mid cylon, hay\_componentes)= \\ \begin{cases} 1.0 & \text{si } (test\_dice\_humano,cylon,hay\_comptes)=(F,F,F) \\ 0.1 & \text{si } (test\_dice\_humano,cylon,hay\_comptes)=(F,F,V) \\ 0.2 & \text{si } (test\_dice\_humano,cylon,hay\_comptes)=(F,V,F) \\ 0.01 & \text{si } (test\_dice\_humano,cylon,hay\_comptes)=(F,V,V) \\ 0.0 & \text{si } (test\_dice\_humano,cylon,hay\_comptes)=(V,F,F) \\ 0.9 & \text{si } (test\_dice\_humano,cylon,hay\_comptes)=(V,F,V) \\ 0.8 & \text{si } (test\_dice\_humano,cylon,hay\_comptes)=(V,V,F) \\ 0.99 & \text{si } (test\_dice\_humano,cylon,hay\_comptes)=(V,V,V) \\ \end{cases}Las tres distribuciones de probabilidad así definidas son todas las necesarias para que la red quede completamente definida a su vez (añadidas al propio grafo de la misma, que proporciona las dependencias).
En realidad, una red bayesiana queda definida completamente por la probabilidad conjunta de sus variables, esto es, por:
P(cylon, hay\_componentes, test\_dice\_humano)Esta probabilidad puede ponerse en función de las probabilidades fundamentales de la red, utilizando la regla de la cadena de la teoría de la probabilidad condicional:
P(cylon, hay\_componentes, test\_dice\_humano) = \\ P(cylon) \times \\ P(hay\_componentes \mid cylon) \times \\ P(test\_dice\_humano \mid hay\_componentes, cylon)Obviamente, podríamos haber usado cualquier otra cadena, por ejemplo:
P(cylon, hay\_componentes, test\_dice\_humano) = \\ P(hay\_componentes) \times \\ P(test\_dice\_humano \mid hay\_componentes) \times \\ P(cylon \mid test\_dice\_humano, hay\_componentes)que dadas las dependencias que se observan en el grafo de la red quedaría simplificada a:
P(cylon, hay\_componentes, test\_dice\_humano) = \\ P(hay\_componentes) \times \\ P(test\_dice\_humano \mid hay\_componentes) \times \\ P(cylon)Sin embargo, esta cadena es más difícil de usar para los cálculos, ya que aparecen probabilidades condicionadas que no conocemos (p.ej., P(test\_dice\_humano \mid hay\_componentes)) y que tendríamos que deducir. Para qué pegarse ese trabajo si se puede ser tan astuto como para escoger una cadena (la primera que hemos puesto) que use sólo las probabilidades conocidas ;).
Muy bien, pues ya tenemos toda la información que define a la red, y, por tanto, ya podemos responder a cualquier pregunta que nos hagan sobre la red, es decir, podemos calcular el valor de cualquier probabilidad condicionada sobre variables de la misma que tenga la forma:
P(\mathbf{B} \mid \mathbf{C})donde \mathbf{B} es cualquier conjunto de variables de la red, llamado el “conjunto de variables de búsqueda”, y \mathbf{C} es cualquier otro conjunto de variables de la red que no intersecte con el primero, llamado “conjunto de variables conocidas”. Si queda alguna variable de la red que no pertenezca a ninguno, formará parte de un tercer conjunto \mathbf{L} llamado de “variables libres”. Vamos, que P(\mathbf{B} \mid \mathbf{C}) es la expresión matemática de la pregunta “¿cuál es la probabilidad de que las variables de búsqueda tengan cierto valor dado que conozco las variables conocidas?”.
Por ejemplo, la pregunta de este examen era: “¿Qué probabilidad hay de que el test realizado dé como resultado cylon dado que el individuo seleccionado es realmente cylon?”, o sea:
P(test\_dice\_humano = F \mid cylon = V)Como se ve fácilmente en la red, P(test\_dice\_humano \mid cylon) no está dada, sino que tenemos que calcularla. En esta pregunta, \mathbf{C}=\{cylon\}, \mathbf{B}=\{test\_dice\_humano\} y, por descarte, \mathbf{L}=\{hay\_componentes\}.
Usando marginalización se tiene que:
P(\mathbf{B} \mid \mathbf{C}) = \sum_{\mathbf{L}} P(\mathbf{B}, \mathbf{L} \mid \mathbf{C})Multiplicando ambos términos por la probabilidad de las variables conocidas (asumiendo que no es cero) se mantiene la igualdad:
P(\mathbf{B} \mid \mathbf{C}) P(\mathbf{C}) = P(\mathbf{C}) \sum_{\mathbf{L}} P(\mathbf{B}, \mathbf{L} \mid \mathbf{C}) = \sum_{\mathbf{L}} P(\mathbf{B}, \mathbf{L} \mid \mathbf{C}) P(\mathbf{C})Usando la regla de la cadena en el término del sumatorio de la derecha se tiene:
P(\mathbf{B} \mid \mathbf{C}) P(\mathbf{C}) = \sum_{\mathbf{L}} P(\mathbf{B}, \mathbf{L}, \mathbf{C})es decir:
P(\mathbf{B} \mid \mathbf{C}) = \frac { \sum_{\mathbf{L}} P(\mathbf{B}, \mathbf{L}, \mathbf{C}) }{P(\mathbf{C})}Y esto está listo para usarse para calcular lo que se desea, que es P(\mathbf{B} \mid \mathbf{C}), porque P(\mathbf{B}, \mathbf{L}, \mathbf{C}) es conocida: es la probabilidad conjunta de todas las variables de la red. En nuestro caso, ya hemos visto que:
P(\mathbf{B}, \mathbf{L}, \mathbf{C})= \\ P(cylon) \times \\ P(hay\_componentes \mid cylon) \times \\ P(test\_dice\_humano \mid hay\_componentes, cylon)Por otra parte, para la pregunta que nos hacen, P(\mathbf{C})=P(cylon), así que lo tenemos todo dispuesto:
P(\mathbf{B} \mid \mathbf{C}) = \frac { \sum_{\mathbf{L}} P(\mathbf{B}, \mathbf{L}, \mathbf{C}) }{P(\mathbf{C})} = = \frac { \sum_{hay\_componentes} \left( \begin{matrix} P(cylon) \times \\ P(hay\_componentes \mid cylon) \times \\ P(test\_dice\_humano \mid hay\_componentes, cylon) \end{matrix} \right) }{P(cylon)} = = \sum_{hay\_componentes} \left( \begin{matrix} P(hay\_componentes \mid cylon) \times \\ P(test\_dice\_humano \mid hay\_componentes, cylon) \end{matrix} \right)(Asumiendo que P(cylon) \ne 0, cosa que se da para cualquier valor de la variable cylon).
Más concretamente, queremos saber:
P(test\_dice\_humano = F \mid cylon = V) = = \sum_{hay\_comptes} \left( \begin{matrix} P(hay\_comptes \mid cylon = V) \times \\ P(test\_dice\_humano = F \mid hay\_comptes, cylon = V) \end{matrix} \right)que puesto en números es:
\overbrace{(0.99 \times 0.2)}^{hay\_comptes=F}+ \overbrace{(0.01 \times 0.01)}^{hay\_comptes=V} = 0.1981Es decir, que las probabilidades de que en el siguiente capítulo veamos que se descubre a la cylon femenina y atractivísima son de alrededor del 20%. Yo que ustedes no me apostaba nada a que la descubren 😉





