El Teorema de Bayes es una de las ideas más poderosas y elegantes de la probabilidad. Nos permite calcular la probabilidad de que algo sea cierto cuando tenemos nueva información o evidencia.
La Intuición: Probabilidades Condicionales
Imagina un experimento con dos pasos:
- Lanzamos una moneda (con una probabilidad desconocida de salir cara).
- Si sale cara, tiramos un dado de seis caras.
Si sale cruz, tiramos uno de veinte caras.
Ahora, supón que el resultado del dado fue un 5. La pregunta es: ¿Cuál es la probabilidad de que la moneda haya salido cara, sabiendo que el dado dio 5?”
Este es un ejemplo clásico de probabilidad condicional inversa: queremos invertir el sentido del razonamiento, pasando de
$$P(\text{dado}=5 | \text{cara})$$
a
$$P(\text{cara} | \text{dado}=5)$$
Derivando el Teorema
A partir de las definiciones básicas de probabilidad y usando la interpretación geométrica de áreas bajo la curva, se llega a la fórmula general:
$$P(A|B) = \frac{P(B|A) P(A)}{P(B)}$$
Donde:
- \(P(A) \) es la probabilidad inicial o priori de que ocurra \( A \).
- \( P(B|A) \) es la verosimilitud: qué tan probable es observar \( B\) si \( A \) fuera cierto.
- \( P(B) \) es la probabilidad total de \( B \), considerando todos los casos posibles.
Aplicación: Ejemplo del Test de COVID
Supongamos un test que da positivo el 80 % de las veces en la población general. Sabemos que si una persona tiene COVID, la probabilidad de que el test dé positivo es 0.9. Antes de hacernos el test, creemos que hay un 70 % de probabilidad de estar infectados.
Aplicando Bayes:
$$P(\text{COVID}|\text{test positivo}) = \frac{0.9 \times 0.7}{0.8} = 0.7875$$
Es decir, la probabilidad real de tener COVID aumenta a 78.75 % tras recibir el resultado positivo.
Actualización Iterativa
Lo más interesante es que Bayes nos permite actualizar las probabilidades cada vez que obtenemos nueva evidencia. Por ejemplo, si un compañero de piso también da positivo, podemos recalcular con esa información y la probabilidad aumentará (en este caso, hasta cerca del 88 %).
Este proceso de revisión continua de nuestras creencias es la base de muchos algoritmos de aprendizaje automático, donde los modelos aprenden y se ajustan con cada nuevo dato.
Inferencia Bayesiana con Python
La idea central de la inferencia bayesiana
En lugar de estimar un solo valor (como hace la estadística clásica), Bayes nos da una distribución completa sobre los posibles valores de los parámetros. Así podemos medir incertidumbre y ajustar nuestras creencias conforme llegan nuevos datos.
$$\text{Posterior} = \frac{\text{Verosimilitud} \times \text{Prior}}{\text{Evidencia}}$$
Ejemplo práctico: Clasificador Bayesiano simple
Veamos un ejemplo básico con Naive Bayes, aplicado a correos electrónicos.
No necesitamos datos reales todavía — solo entender el razonamiento.
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer
# Datos de ejemplo
emails = [
"Oferta exclusiva gana dinero rápido", # spam
"Reunión de trabajo a las 10", # no spam
"Compra ahora descuento especial", # spam
"Adjunto informe mensual del proyecto" # no spam
]
labels = [1, 0, 1, 0] # 1 = spam, 0 = no spam
# Convertimos texto a matriz de frecuencias
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(emails)
# Entrenamos el modelo bayesiano
model = MultinomialNB()
model.fit(X, labels)
# Probamos con un nuevo mensaje
nuevo_email = ["oferta de trabajo con descuento"]
X_new = vectorizer.transform(nuevo_email)
prob_spam = model.predict_proba(X_new)
print("Probabilidad de SPAM:", prob_spam[0][1])
Este modelo aplica el Teorema de Bayes a cada palabra del mensaje y combina los resultados suponiendo independencia entre ellas (por eso se llama Naive o “ingenuo”).
Inferencia bayesiana “real” con PyMC o NumPyro
Cuando queremos estimar parámetros desconocidos, usamos librerías especializadas como PyMC:
import pymc as pm
import arviz as az
# Ejemplo: estimar la probabilidad de éxito de una moneda sesgada
with pm.Model() as modelo:
p = pm.Beta("p", alpha=2, beta=2) # Prior: distribución beta
observaciones = pm.Bernoulli("obs", p, observed=[1,0,1,1,0,1]) # Datos
trazas = pm.sample(2000, tune=1000)
az.plot_posterior(trazas)
Aquí usamos una distribución Beta como priori, y tras observar los datos (caras y cruces) obtenemos la distribución posterior de p : nuestra creencia actualizada sobre cuán sesgada está la moneda.
¿Por qué es importante?
La inferencia bayesiana permite:
- Actualizar modelos dinámicamente (ej. diagnóstico médico con nueva información).
- Expresar incertidumbre en vez de dar una sola respuesta.
- Combinar conocimiento previo con datos (por ejemplo, en modelos predictivos con pocos datos).
Por eso se usa en:
- Machine Learning probabilístico
- Sistemas de recomendación
- Medicina y biología
- Finanzas y predicción de riesgos
En resumen
| Concepto | Interpretación Bayesiana |
|---|---|
| Prior | Lo que creemos antes de ver los datos |
| Evidencia | Los datos observados |
| Posterior | Lo que creemos después de ver los datos |
| Verosimilitud | Qué tan probable es ver esos datos si la hipótesis fuera cierta |
