Imagina que despiertas con dolor de cabeza y tu primer pensamiento es lo peor. ¿Realmente deberías preocuparte? El pensamiento probabilístico y el teorema de Bayes te dan herramientas concretas para responder esa pregunta con datos, no con miedo. A continuación se explica paso a paso cómo traducir una tabla de síntomas y enfermedades a código Python funcional, obteniendo resultados que probablemente te sorprendan.
¿Qué datos necesitamos para aplicar el teorema de Bayes a síntomas médicos?
El punto de partida es una tabla de contingencia que cruza dos variables: tener o no tener cáncer y mostrar o no mostrar síntomas [0:12]. De una muestra de 100 000 personas, solo una persona realmente tiene la enfermedad. Diez personas muestran síntomas pero no tienen cáncer, y el resto no presenta síntomas ni enfermedad.
Con esos números se extraen las probabilidades que el teorema de Bayes necesita como insumos:
Prior o probabilidad previa de tener cáncer: 1 entre 100 000.
Probabilidad de síntoma dado cáncer (likelihood): en estos datos es 1, porque todos los enfermos muestran síntomas.
Probabilidad de síntoma dado que no hay cáncer: 10 entre 99 999.
Probabilidad de no tener cáncer: 1 menos el prior.
El prior [1:30] representa tu creencia inicial antes de observar evidencia. Es el punto de arranque del razonamiento bayesiano y se actualiza cada vez que incorporas nueva información.
¿Cómo se traduce el teorema de Bayes a código Python?
La implementación es directa. Se crea una función calcularBayes que recibe tres parámetros y retorna el resultado de la fórmula [1:22]:
La variable prob_sintoma se calcula usando la ley de probabilidad total: se suman los productos de cada likelihood por su respectivo prior [3:30]. Este paso es indispensable porque representa la probabilidad marginal de la evidencia, es decir, qué tan común es observar el síntoma en toda la población, sin importar si hay enfermedad o no.
¿Qué pasa si introduces un error en los datos?
Durante la ejecución en consola apareció un primer resultado de 50 %, lo cual era alarmante [5:13]. El error fue un nueve extra en el denominador, que inflaba la muestra a casi un millón de personas. Al corregir el valor a 99 999, el resultado bajó al 9 % [5:50]. Este tropiezo muestra lo importante que es verificar cada dato antes de interpretar resultados.
¿Por qué el resultado del 9 % es tan relevante?
El 9 % significa que, aun teniendo un síntoma, la probabilidad real de padecer cáncer es baja [6:02]. El instinto suele llevarnos a pensar lo peor, pero el análisis bayesiano demuestra que la presencia de un síntoma, por sí sola, no equivale a un diagnóstico.
¿Cómo se actualiza la probabilidad con nueva evidencia?
Aquí aparece una de las propiedades más poderosas del teorema de Bayes: es recursivo [6:30]. Una vez que visitas al doctor y recibes resultados de exámenes, ese 9 % se convierte en tu nuevo prior. La evidencia adicional —análisis de sangre, estudios de imagen— se incorpora repitiendo el mismo cálculo.
Tu prior original era la tasa poblacional: 0.001 %.
Después de observar síntomas, tu prior actualizado sube a 9 %.
Cada nuevo test médico vuelve a ajustar esa cifra hacia arriba o hacia abajo.
Este proceso de actualización bayesiana refleja cómo deberíamos razonar en la vida diaria: partir de una creencia, observar datos y ajustar nuestras conclusiones de forma iterativa en lugar de saltar a extremos.
Desarrollar este tipo de pensamiento probabilístico requiere práctica, pero otorga una ventaja enorme para tomar decisiones informadas. Si quieres profundizar, comparte tu propia implementación o tus dudas en los comentarios para seguir construyendo sobre estas ideas.
Con la ayuda de los videos que compartieron los compañeros, hice el diagrama de árbol para verlo mas gráficamente, ademas de agregar los nombres de las variables que utilizo David.
asombroso, que buen diagrama!
Excelente aporte rulobars, muy explicito el diagrama.
La verdad este tema no me quedo tan claro, entonces busque un poco de información adicional y encontre este video donde en solo 5 minutos logre entender bien el teorema de Bayes, les comparto para el que le pueda servir también.
Saludos
Excelente. Muchas Gracias
El ejemplo que desarrollan en ese video me parece a mí que se ve mucho más claro que el de ésta clase.
Esta seria la solucion paso a paso:
Gracias por compartirlo
No son los muy bellos apuntes de majo (disculpen el diseño no es mi mejor habilidad), pero ahí les va el Eikosograma para visualizarlo, les recomiendo también hacer a mano el ejercicio para entender
+(prob_positivo_dado_no_tiene_covid*prob_no_tener_covid_bogotá) probabilidad_positivo_covid =calcular_bayes(probabilidad_tener_covid_bogotá,prob_positivo_dado_tiene_covid,prob_positivo)print(round(probabilidad_positivo_covid,10))
A mi me ayudo mucho entender primero matemáticamente el teorema de Bayes, después trasladarlo a código es muy sencillo, les comparto este link donde explican este teorema.
https://www.youtube.com/watch?v=Fi6G48j0IZ4
Está genial la explicacion.
Muchas gracias!
Yo sí me asusté con ese 50% que le salió haha
El error de sintaxis en el minuto 07:56 fue que se utilizo "/" (slash) en lugar de "" (backslash).
probabilidadTenerSintoma=(probabilidadSintomaDadaEnfermedad*probabilidadEnfermedad)\
+(probabilidadSintomaDadoNoEnfermedad*probabilidadNoEnfermedad) # "\" es en Python lo que "..." es en Matlab
En la medicina que se enseña hoy en día en las estudiantes médicos cada vez es más frecuente que se aborden temas como Pensamiento Probabilístico, o incluso Computacional con respecto a la evaluación diagnóstica, el pronóstico y los posibles tratamientos que es posible administrar a los distintos pacientes
El Teorema de Bayes es un conocimiento pilar para la corriente que predomina hoy en día entre los médicos jóvenes: La Medicina Basada en Evidencias (Evidence Based Medicine)
Se los cuento de primera mano porque el semestre pasado nos acaban de atiborrar de conocimientos y pruebas de conocimientos sobre el tema y de hecho es una de las cosas que me inspiró siendo médico en formación a incursionar en el campo del Desarrollo de Software para dar solución a muchos de los problemas que hoy aquejan a la mayoría de los pacientes que veo n.n
Se puede hacer un ejemplo que no incluya el cancer? por que hay gente que es sufre de cancerofobia y de verdad el tema esta bueno pero no lo puedo ver por que no me gusta esa palabra, gracias por lo otros videos que no incluyen la palabra...
Por qué utilizar T. de Bayes si con los datos que tenemos podemos deducir que prob_cancer_dado_sintoma = 1 /11 = 0.0909
Sabes que es 1/11 por que tienes los datos. En casos reales estos datos no seran tan claros o solo seran probabilidades abstractas o porcentajes.
Entonces Bayes se usa porque permite acercarse a la realidad ejecutando las mismas cuentas sin intervencion humana a medida que llegan nuevos datos.
Ejemplo con los calculos dados
si se ejecutara un segundo test
esta vez el Prior P(A) probabilidad de cancer que era 0.0001 , esta vez sera el Posterior anterior P(A|B) = 0.09
para el codigo seria que
para el segundo test
prob_cancer = 0.09
entonces usando el teorema de bayes ahora sabes que la probabilidad de tener cancer dado sintomas, un primer test positvo, y un segundo test positivo es 0.99 o 99% .
de esta forma al ejecutar el teorema de bayes de forma recursiva se pueden acercar cada vez mas a la realidad con la llega de nuevos datos.
recomiendo bastante este video de Veritasium
La ventaje de usar la teoria Bayesiana es el hecho de que podamos mejorar cada probabilidad mientras mas datos tengamos
Al igual que algunos comentarios de la comunidad, recomiendo primero vean videos de como se resuleve matematicamente, ya que verlo en codigo se vuelve un tanto confunso.
El divisor de linea en pyrhon es en reaidad ''
¿Por qué no se calculó prob_sintoma empleanto el T. de Bayes sino con la otra fórmula? ¿Cuándo usar cuál?
En esa parte, se obtiene la probabilidad de que tenga cáncer dado un síntoma y que no tenga cáncer dado un síntoma... En otras palabras, lo que será 'prob_B' en 'def calc_bayes'
pues en este caso era la variable que nos faltaba porque el resto ya lo teníamos. ademas era mas fácil determinar la P(síntomas)=P(cancer)P(síntoma|cancer) + P(no cancer)P(síntoma|no cancer). como probabilidades condicionadas ademas que todas estas variables para determinar P(síntoma) las daba la tabla.
Por si a alguien le interesa :) El error que le dio al profe en la primera ejecución es porque tenía un slash normal (/), y el truco que enseñó si funciona (continuar una línea de código muy larga debajo), sólo que se debe usar backslash (\).
¡Saludos!
Comparto mi código por si a alguien se le facilita mas verlo en términos de H y E, como es mi caso
def cal_bayes(prior_H, prob_E_given_H, prob_E):return prior_H * prob_E_given_H / prob_E
if __name__ =='__main__': prior_H =1/100000 prob_not_H =1- prior_H
prob_E_given_H =1 # todas las personas con cancer tienen síntomas osea:100% prob_E_given_not_H =10/99999 # 10 de 99999 tienen síntomas y no cancer
prob_E = prior_H * prob_E_given_H + prob_not_H * prob_E_given_not_H # todos los casos de síntomas
print("La probabilidad de tener cancer dado síntomas es: \n",cal_bayes(prior_H, prob_E_given_H, prob_E))
mi profesora de probabilidad me mataría por no escribir de manera rigurosa jajajaj pero así me lo enseñaron en mi escuela y creo que queda mucho más claro
me inventé también otro ejemplo para comprobar
ahora lo hice en código como el profe Aroesti enseña, estos son los resultados
la probabilidad de tener cáncer dado un síntoma es 9.091%la probabilidad de la palabra perro está en el email dado que sea spam es 8.333%