Lección · Módulo 1 · Estadística para IA

Inferencia bayesiana: actualizar lo que crees con evidencia

Empezás creyendo una cosa. Llegó un dato nuevo. ¿Cuánto debería cambiar tu creencia? La inferencia bayesiana es la receta matemática que responde esa pregunta — y es la base de filtros de spam, sistemas de recomendación y muchos modelos de IA modernos.

Mate MathPlay · Lección 1.4 · Estadística para modelos

10 minutosInteractivoVisualCon Python

Idea central: empezás con una creencia inicial (prior). Llegan datos. Terminás con una creencia actualizada (posterior). Bayes te dice exactamente cómo combinar las dos cosas. Cuanta más evidencia juntes, más "afilada" se vuelve tu creencia — más seguro estás del valor real.

1 El problema: una máquina nueva

Compraste una máquina nueva para producir piezas. La pregunta clave es: ¿qué porcentaje de las piezas pasa control de calidad? Llamemos a ese número (que no conoces) θ. Puede valer cualquier cosa entre 0 (todas fallan) y 1 (todas pasan).

El reflejo clásico es: "prendo la máquina, hago 1000 piezas y cuento". Pero la inferencia bayesiana te ofrece algo mejor: actualizá tu creencia después de cada pieza. Así podés tomar decisiones con muchos menos datos.

2 Tu creencia inicial: el prior

Como no sabés nada de la máquina al principio, asumís que cualquier valor de θ entre 0 y 1 es igualmente probable. Esa creencia se llama prior plano (o uniforme):

0 0.5 1 θ = probabilidad de pasar QA Prior: cualquier θ es igual de probable

Es una línea plana. Significa: "no sé nada todavía; cualquier valor de θ me parece igualmente plausible". Es el punto de partida más honesto cuando arrancás sin información.

3 Llega el primer dato: una pieza pasa

Encendés la máquina, sale la primera pieza, la chequeas: pasa. ¿Qué deberías creer ahora?

Intuitivamente, deberías inclinar tu creencia hacia valores más altos de θ. Después de todo, una pieza que pasa es más consistente con una máquina que produce muchas piezas buenas que con una que produce pocas. Pero no es prueba definitiva — también es posible que una máquina mala te haya dado 1 pieza buena por suerte.

Bayes captura ese razonamiento de forma exacta: la curva del posterior se inclina ligeramente hacia 1, sin saltar al 100%.

4 Llegan más datos: la curva se va afinando

Si después de probar 10 piezas pasaron 7, tu creencia debe centrarse alrededor de 0.7 — pero todavía con incertidumbre, porque 10 muestras son pocas. Si probaste 100 piezas y pasaron 70, la curva se vuelve mucho más nitida alrededor de 0.7 — ya estás casi seguro del valor real.

Más datos = curva más afilada = más certeza. Eso es exactamente lo que vas a ver y mover en el sandbox de más abajo.

5 La regla de Bayes: cómo se combina todo

La fórmula que combina prior, datos y posterior se llama regla de Bayes:

posterior ∝ prior × likelihood

El símbolo significa "es proporcional a" — basta con normalizar al final para que el área bajo la curva sume 1. Lo importante es entender los tres ingredientes:

Prior
P(θ)
Lo que creías antes de ver datos.
Posterior
P(θ | datos)
Tu creencia actualizada sobre θ después de ver los datos.

En palabras simples: "lo que crees ahora es proporcional a lo que creías antes, multiplicado por qué tan bien explica tu creencia los datos". Un prior que predecía bien los datos se ve "premiado" en el posterior; uno que los predecía mal se ve "castigado".

6 Tu turno: mové las observaciones y mirá el posterior

Tocá los sliders para cambiar n (cuántas piezas probaste) y k (cuántas pasaron). Vas a ver dos curvas: el prior plano (cyan punteado) y el posterior actualizado (azul sólido). Mirando cómo cambia el posterior te das cuenta de la magia: más datos = curva más nitida.

Prior: tu creencia inicial (plana, sin datos) Posterior: tu creencia actualizada después de los datos

Sandbox interactivo

Mové los sliders para agregar observaciones. La curva azul es lo que ahora crees sobre θ.

n (total) 0
k (pasan) 0
Datos observados
0 / 0
k de n piezas
Promedio del posterior
0.500
tu mejor estimación de θ
Desv. del posterior
0.289
qué tan seguro estás

7 Por qué importa para IA

La inferencia bayesiana está en el corazón de muchos sistemas de IA que usas todos los días:

Bayesiano vs frecuentista (la pelea filosófica)

Hay otra escuela — la frecuentista — que dice "θ es un valor fijo, lo que cambia es nuestro estimador". El bayesiano dice "θ es una variable aleatoria con su propia distribución". Para fines prácticos, ambas escuelas dan respuestas similares cuando tienes muchos datos. Pero cuando tenés pocos datos, la bayesiana es más honesta sobre la incertidumbre.

8 Variante 1: MAP vs MLE (las dos formas de "estimar")

Cuando los datos llegan, hay dos formas clásicas de "extraer un número" del posterior:

Con pocos datos, el prior pesa mucho — MAP y MLE pueden dar respuestas distintas 0 0.5 1.0 θ = probabilidad de exito Prior informado Likelihood (solo datos) MLE Posterior MAP

Razonamiento intuitivo: el MAP "tira" el resultado hacia el prior. Si los datos dicen "θ = 0.69" pero el prior decía "θ alrededor de 0.45", el MAP sale al medio (digamos 0.60). El MLE ignora completamente lo que creías antes — solo mira los datos.

Cuando tenés muchos datos, ambos convergen al mismo número (el prior se vuelve irrelevante). Cuando tenés pocos datos, el prior te salva de conclusiones disparatadas.

Caso aplicado · estimación de leyes en zonas nuevas

Block nuevo con 3 testigos: ¿ley promedio?

Acabas de perforar 3 testigos en una zona nueva del yacimiento. Las leyes te dan 1.2%, 1.5% y 1.4% Cu. Si usás MLE puro, tu mejor estimación es (1.2 + 1.5 + 1.4) / 3 = 1.37% Cu.

Pero el geólogo te dice: "el yacimiento completo tiene ley promedio 0.8% ± 0.2% Cu, los testigos en esta zona caen siempre cerca de eso". Esa es información previa fuerte. MAP combina los 3 testigos con esa creencia y te da algo intermedio, como 0.95% Cu.

¿Cuál es más honesto? MAP, casi siempre. Con solo 3 testigos, el MLE está sobreajustando a un pequeño accidente local.

Pocos datos + conocimiento previo confiable → MAP gana

Block con 50 testigos en zona conocida

Ahora tenés 50 testigos en una zona ya explotada. El prior basado en el yacimiento general ya no aporta tanto — los 50 testigos contienen suficiente información local. MAP y MLE convergen al mismo número.

Muchos datos → MAP y MLE dan lo mismo, usá cualquiera

Tip práctico

Como regla: si tenés menos de 10 muestras y existe un prior creible (estudios anteriores, datos del mismo yacimiento), usá MAP. Si tenés 50+ muestras, MLE está bien y es más simple de explicar a auditorí>as.

9 Variante 2: frecuentista vs bayesiana (las dos escuelas)

Hay un debate filosófico histórico de 200 años entre estadísticos sobre cómo deben hacerse las inferencias. Resumen brutal:

Frecuentista "θ es un valor fijo desconocido" ¿Cuántas muestras necesito? Fijar n antes de ver datos Resultado: p-value "¿los datos son raros si θ = X?" Intervalo de confianza 95% 95% de los IC futuros incluirán θ No incluye prior Solo los datos hablan Conocimiento previo se ignora Bayesiana "θ tiene una distribución" Tomá las muestras que tenés El posterior se afila gradualmente Resultado: posterior completo Una distribución, no un número Intervalo de credibilidad 95% "θ está con 95% prob entre A y B" Incluye prior explícito Conocimiento previo entra al cálculo Resultado más honesto con pocos datos

Razonamiento intuitivo: el frecuentista piensa "θ existe en algún lado y debo descubrirlo desde cero con datos". El bayesiano piensa "siempre sé algo sobre θ, los datos me ayudan a precisarlo". Para problemas con poca información previa o muestras gigantes, dan resultados parecidos. Para problemas con pocas muestras pero conocimiento previo confiable, la bayesiana es más honesta.

Caso aplicado · el lenguaje del reporte

Reporte frecuentista (clásico geológico)

"Con 95% de confianza, la ley promedio del block está entre 1.15% y 1.42% Cu". Trampa: este lenguaje suele malinterpretarse. No significa "hay 95% de probabilidad de que θ esté en ese rango". Significa "si repito el experimento muchas veces, el 95% de los intervalos que construya van a contener θ".

Reporte bayesiano (cada vez más común)

"Con base en los testigos y el conocimiento previo del yacimiento, hay 95% de probabilidad de que la ley esté entre 1.12% y 1.39% Cu". Honesto: este sí se interpreta como suena.

Bayesiano = lenguaje más directo y menos engañoso

Cuál elegir en minería

  • Exploración temprana (pocos testigos): bayesiana, porque podés incorporar lo que se sabe del distrito geológico.
  • Operación maduro (muchos datos): cualquiera; más fácil presentar frecuentista a reguladores clásicos.
  • Decisiones secuenciales (donde cada testigo nuevo actualiza la creencia): bayesiana, naturalmente. Cada testigo es un "update".

10 Variante 3: Naive Bayes (un clasificador que usás todos los días)

Hasta aquí estimamos un solo parámetro. Pero Bayes también sirve para clasificar: dado un objeto con varias características, ¿a qué clase pertenece? Esa idea, simplificada de manera ingeniosa, se llama Naive Bayes.

La fórmula es Bayes directo, una vez para cada clase posible, y elegimos la clase con mayor probabilidad posterior:

P(clase | datos) ∝ P(clase) · P(dato1 | clase) · P(dato2 | clase) · · ·

El "naive" (ingenuo) viene de la suposición simplificadora: asume que las características son independientes entre sí. Eso casi nunca es cierto en la realidad, pero funciona sorprendentemente bien en práctica.

Naive Bayes: clasificar mineral por composición química Muestra desconocida Cu=0.8% S=4% Fe=12% P(óxido | muestra) = 0.05 Cu, S, Fe no encajan con óxido P(sulfuro | muestra) = 0.78 Alta S + Cu + Fe = sulfuro P(mixto | muestra) = 0.17 Podría ser, pero menos probable Predicción: SULFURO Bayes pregunta: "Dadas estas características, ¿qué clase es más probable?" Calculamos prob de cada clase. Elegimos la más alta. "Naive" porque asumimos que Cu, S, Fe son independientes entre sí dada la clase.

Es uno de los algoritmos más usados en la práctica industrial — rápido, simple, robusto a datos pequeños, y sorprendentemente preciso.

Caso aplicado · clasificación automática de tipo de mineral

Clasificar testigos: óxido / sulfuro / mixto

El laboratorio te entrega 1000 testigos con composición química (Cu, Fe, S, As, ph). Querés clasificarlos automáticamente en óxido, sulfuro o mixto sin tener que mirarlos uno por uno. Un Naive Bayes entrenado con 100 testigos ya clasificados (datos históricos) puede clasificar el resto con ~90% de acierto.

Cada clase tiene su distribución típica de Cu, S, Fe, As. Bayes calcula, para cada testigo nuevo, qué tan compatible es con cada clase y elige la más probable.

Naive Bayes = primer modelo que prueba todo equipo de análisis de mineral

Otros usos prácticos en operaciones

  • Detección de fallas: dada una secuencia de vibraciones, temperatura y consumo eléctrico, ¿es falla inminente, normal, o falsa alarma?
  • Clasificar tipo de roca: dadas las lecturas de un sensor en tiempo real, ¿es mineralizado, roca de caja o relleno?
  • Triage de mantenimiento: dada una orden de trabajo (texto), ¿es preventivo, correctivo crítico o no crítico?
Naive Bayes da el "primer clásico" para luego comparar con modelos más complejos

Tip práctico

Cuando llega un dataset nuevo de clasificación, siempre probá Naive Bayes primero. Da el baseline contra el que comparar modelos más sofisticados (random forest, XGBoost, redes neuronales). Si Naive Bayes ya da 92%, no vale la pena complicarse.

+ Más parientes del concepto

El mundo bayesiano tiene más herramientas que vale la pena conocer:

Otros pares conjugados (Normal-Normal, Gamma-Poisson)Ver

El truco Beta-Binomial que usamos es uno de muchos "pares conjugados". Normal-Normal estima la media de una variable normal con prior normal — el posterior también es normal. Gamma-Poisson estima la tasa de eventos por unidad de tiempo. Cada par te da actualizaciones analíticas exactas, sin necesidad de simulaciones.

MCMC (Markov Chain Monte Carlo)Ver

Cuando el posterior es muy complicado para resolver analíticamente, se aproxima por simulación. MCMC genera miles de muestras del posterior usando una cadena de Markov. Bibliotecas como PyMC, Stan o emcee implementan esto. Es la base de la estadística bayesiana moderna.

Bayes factor (alternativa al p-value)Ver

Compara cuá>n bien dos hipó>tesis explican los datos. BF = P(datos | H1) / P(datos | H2). Si BF = 10, la H1 explica los datos 10 veces mejor que H2. Es más interpretable que el p-value frecuentista y permite cuantificar evidencia a favor de la hipótesis nula (no solo en contra).

Redes bayesianasVer

Grafos dirigidos donde cada nodo es una variable y las flechas indican relaciones causales o de dependencia. Permiten razonar sobre causalidad de forma natural — calcular qué pasa si "intervenimos" sobre una variable. Tienen aplicaciones en diagnóstico médico, sistemas expertos y modelado de procesos industriales.

Ver el código en Python: cinco snippets, de Bayes a mano hasta clasificador completo Click para abrir

Empezamos con la regla de Bayes pura sin librerías y escalamos hasta un clasificador Naive Bayes funcional.

1. Bayes a mano (probabilidad discreta sin librerías):

01_bayes_a_mano.pyPYTHON
# Diagnostico simple: un test detecta una falla mecanica
# El test tiene 95% sensibilidad y 90% especificidad
# La falla afecta 1 de cada 100 maquinas

p_falla = 0.01
p_test_dado_falla = 0.95
p_test_dado_sano = 0.10  # 1 - especificidad

# El test sale positivo. Cual es la P(falla | test positivo)?
p_test = p_test_dado_falla * p_falla + p_test_dado_sano * (1 - p_falla)
p_falla_dado_test = (p_test_dado_falla * p_falla) / p_test

print("P(falla | test positivo) =", round(p_falla_dado_test, 4))
# Sorprende: aun con test positivo, P(falla) solo sube a ~0.09

2. Beta-Binomial con scipy (lo del sandbox, pero limpito):

02_beta_binomial.pyPYTHON
from scipy.stats import beta

alpha_prior, beta_prior = 1, 1   # uniforme
n, k = 100, 70                    # 70 exitos en 100 intentos

alpha_post = alpha_prior + k
beta_post = beta_prior + (n - k)

print("Media posterior:", round(beta.mean(alpha_post, beta_post), 3))
print("Desv:", round(beta.std(alpha_post, beta_post), 4))
ci = beta.interval(0.95, alpha_post, beta_post)
print(f"Intervalo de credibilidad 95%: [{ci[0]:.3f}, {ci[1]:.3f}]")

3. MAP vs MLE comparados:

03_map_vs_mle.pyPYTHON
import numpy as np
from scipy.stats import norm

# 3 muestras de ley en zona nueva
muestras = np.array([1.2, 1.5, 1.4])

# MLE: ignora prior, solo datos
mle = muestras.mean()
print("MLE:", round(mle, 3))

# MAP: usa un prior informado (otras zonas del yacimiento)
mu_prior = 0.8
sigma_prior = 0.2
sigma_dato = 0.15  # incertidumbre por muestra

# Para normal-normal conjugado, MAP es promedio ponderado
n = len(muestras)
prec_prior = 1 / sigma_prior**2
prec_likeli = n / sigma_dato**2
prec_post = prec_prior + prec_likeli

map_estim = (prec_prior * mu_prior + prec_likeli * muestras.mean()) / prec_post
print("MAP:", round(map_estim, 3))
print("Diferencia:", round(abs(mle - map_estim), 3), "(MLE es mas optimista)")

4. Naive Bayes desde cero:

04_naive_bayes_manual.pyPYTHON
import numpy as np
from scipy.stats import norm

# Tipos de mineral con sus distribuciones tipicas de Cu, S, Fe
clases = {
    "oxido":   {"Cu": (0.8, 0.2), "S": (0.5, 0.3), "Fe": (15, 3)},
    "sulfuro": {"Cu": (1.2, 0.3), "S": (8.0, 2.0), "Fe": (20, 4)},
    "mixto":   {"Cu": (1.0, 0.25), "S": (4.0, 1.5), "Fe": (17, 3)},
}
priors = {"oxido": 0.3, "sulfuro": 0.5, "mixto": 0.2}

def clasificar(muestra):
    posteriors = {}
    for clase, params in clases.items():
        like = 1.0
        for var, val in muestra.items():
            mu, sd = params[var]
            like *= norm.pdf(val, mu, sd)
        posteriors[clase] = like * priors[clase]
    # Normalizar
    total = sum(posteriors.values())
    return {k: v/total for k, v in posteriors.items()}

muestra = {"Cu": 0.8, "S": 4.0, "Fe": 12}
resultado = clasificar(muestra)
for clase, prob in sorted(resultado.items(), key=lambda x: -x[1]):
    print(f"P({clase}) = {prob:.3f}")

5. Naive Bayes con sklearn (lo mismo, 5 lineas):

05_naive_bayes_sklearn.pyPYTHON
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
import numpy as np

# Simulamos 200 testigos con 3 variables y 3 clases
np.random.seed(42)
X, y = [], []
for clase in [0, 1, 2]:  # 0=oxido, 1=sulfuro, 2=mixto
    centros = [[0.8, 0.5, 15], [1.2, 8.0, 20], [1.0, 4.0, 17]]
    muestras = np.random.normal(centros[clase], [0.25, 1.5, 3], (70, 3))
    X.extend(muestras); y.extend([clase] * 70)

X = np.array(X); y = np.array(y)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=42)

clf = GaussianNB()
clf.fit(X_tr, y_tr)

print("Precision:", round(clf.score(X_te, y_te), 3))
muestra = np.array([[0.9, 4.5, 18]])
proba = clf.predict_proba(muestra)
print("Probabilidades:", dict(zip(["oxido", "sulfuro", "mixto"], proba[0].round(3))))

11 Pregunta de chequeo

Probaste 20 piezas y todas pasaron QA. Con un prior plano, ¿cuál es la mejor estimación bayesiana de la probabilidad θ de que la próxima pase?

Cierre del Módulo 1

Con esto cerramos el Módulo 1 (Estadística para IA): varianza, covarianza, distribuciones y ahora cómo actualizar creencias. Tienes las cuatro herramientas que aparecen una y otra vez en cualquier modelo. El Módulo 2 arranca con álgebra lineal, que es el segundo idioma nativo de la IA — el que le permite hablar de millones de pesos a la vez.

LinkedIn WhatsApp

Regístrate al boletín MathPlay

De la idea al laboratorio que funciona: datos, simulación, visualización, IA y tecnología aplicada a problemas reales de industria y minería. Te escribo cuando hay algo nuevo que vale la pena compartir.

Sin calendario fijo. Sin spam.

Listo. Te escribo cuando haya algo nuevo.

CB
Mg. Ing. Cesar Bobadilla
Ingeniero consultor & docente · Perú

Desarrollo tecnología aplicada a industria y minería, y enseño a convertir datos, prototipos e inteligencia artificial en decisiones útiles. MathPlay conecta matemática, programación, visualización y casos reales de operación.

Dónde publicó
← Lección anterior: distribución normalSiguiente: matrices (Módulo 2) →Volver al módulo