Simulación de actualización bayesiana con lanzamiento de moneda

Simula el proceso de lanzar una moneda repetidamente y utiliza la fórmula de Bayes para actualizar en tiempo real la distribución de creencias sobre si la moneda está manipulada.

Al completar este caso, comprenderás:El núcleo del método bayesiano: cada vez que se observa un nuevo dato, se actualiza la creencia con la función de verosimilitud.


Introducción desde la vida real

¿Es confiable el nuevo colega?

El primer día, no conoces al nuevo colega (prior: podría ser confiable o no, 50% cada uno). La primera semana, completa las tareas a tiempo cada vez (nueva evidencia), empiezas a pensar que «probablemente es confiable». La segunda semana, vuelve a completarlas a tiempo (más evidencia), tu juicio se vuelve más seguro.

Tu juicio es la probabilidad posterior: el resultado de corregir continuamente el juicio inicial con nueva evidencia. Esta es la intuición de la actualización bayesiana.


Comprensión intuitiva

Tenemos una moneda, pero no sabemos cuál es su probabilidad de cara. Prior: antes de lanzarla, consideramos que cualquier probabilidad de cara (de 0 a 1) es posible. Verosimilitud: cada vez que vemos un resultado, actualizamos usando «si la probabilidad de cara es theta, la posibilidad de ver este resultado». Posterior: la distribución de creencias actualizada: cuantos más datos, más se concentra la distribución cerca del valor real.


Definición matemática

\[ P(\theta \mid \text{data}) = \frac{P(\text{data} \mid \theta) \cdot P(\theta)}{P(\text{data})} \] \[ \text{posterior}_t \propto \text{verosimilitud}(\text{resultado } t \mid \theta) \times \text{posterior}_{t-1} \]

Práctica con Python

Ejemplo

import numpy as np
np.random.seed(1)

true_p = 0.75  # Probabilidad real de cara de la moneda (fingimos no saberla)
theta_grid = np.linspace(0, 1, 200)

# Prior: todas las theta son igualmente probables
prior = np.ones_like(theta_grid)
prior /= prior.sum()

# Simular 40 lanzamientos de moneda
flips = np.random.binomial(1, true_p, size=40)

posterior = prior.copy()
print("EJEMPLO Proceso de actualización bayesiana (theta real=0.75):\n")
for i, outcome in enumerate(flips, start=1):
    likelihood = theta_grid if outcome == 1 else (1 - theta_grid)
    posterior = posterior * likelihood
    posterior /= posterior.sum()

    if i % 10 == 0:
        est = theta_grid[np.argmax(posterior)]
        print(f" Después de {i:2d} lanzamientos, theta más probable = {est:.3f}")

# Comparación de incertidumbre
prior_std = np.sqrt(np.sum(theta_grid**2 * prior) - np.sum(theta_grid * prior)**2)
post_std = np.sqrt(np.sum(theta_grid**2 * posterior) - np.sum(theta_grid * posterior)**2)
print(f"\nEJEMPLO Desviación estándar previa: {prior_std:.4f} -> Desviación estándar posterior: {post_std:.4f} (se redujo {prior_std/post_std:.1f} veces)")
EJEMPLO 贝叶斯更新过程 (真实 theta=0.75):

  抛 10 次后,最可能的 theta=0.754
  抛 20 次后,最可能的 theta=0.769
  抛 30 次后,最可能的 theta=0.759
  抛 40 次后,最可能的 theta=0.774

EJEMPLO 先验标准差: 0.2890 -> 后验标准差: 0.0642 (缩小了 4.5 倍)

Escenarios de aplicación en IA

EscenarioFunción del método bayesiano
Clasificación Naive BayesFórmula de Bayes + suposición de independencia de características → clasificador clásico
Optimización bayesianaUsar prior + datos observados → proceso gaussiano posterior → guiar la búsqueda de hiperparámetros
Inferencia variacionalAproximar una posterior compleja con una distribución simple: la base matemática de VAE
Otras extensiones