Saltar al contenido

# regresion-logistica-bayesiana-con-pymc

Regresión Logística Bayesiana con PyMC

Volver a la portada del curso
Lectura (Markdown)

Evaluación de Modelos Bayesianos

Sección 4 · Validación y Proyecto Final

Evaluación de modelos bayesianos

Que el muestreador termine sin errores no significa que el modelo sea bueno. Evaluar un modelo bayesiano tiene tres capas: confirmar que la posterior se calculó bien (diagnósticos), comprobar que el modelo reproduce los datos (predictiva posterior) y estimar qué tan bien predice datos nuevos (validación con LOO). Esta lección recorre las tres con el modelo de créditos.

1. Diagnósticos del muestreo

  • $\hat{R}$ (r_hat): compara la varianza entre cadenas con la varianza dentro de cada cadena. Debe ser menor que 1.01; en nuestro modelo, el máximo es 1.002.
  • ESS (ess_bulk, ess_tail): número de muestras efectivamente independientes. Más de 400 es un buen umbral; aquí son más de 4,300.
  • Divergencias: deben ser 0. Si aparecen, sube target_accept (por ejemplo, a 0.95) o reparametriza el modelo.

2. Comprobación predictiva posterior

Si el modelo es adecuado, los datos que simula deben parecerse a los observados:

with modelo:
    pm.sample_posterior_predictive(idata, extend_inferencedata=True, random_seed=42)

az.plot_ppc(idata)
tasa_sim = idata.posterior_predictive["impago"].mean().item()
print(round(tasa_sim, 3))   # 0.298 frente a 0.2975 observada

Con datos binarios, la tasa global casi siempre cuadra. Una comprobación más exigente es la calibración: agrupa las observaciones por probabilidad predicha y compara cada grupo con su frecuencia real. En el proyecto del curso, los 92 pacientes con probabilidad predicha menor que 0.1 tienen una media predicha de 0.019 y una frecuencia observada de 0.011; los 48 con probabilidad mayor que 0.9 tienen 0.983 predicho y 0.979 observado.

3. Validación cruzada aproximada: LOO-PSIS

La pregunta clave es cuánto se equivoca el modelo con datos que no vio. La métrica bayesiana estándar es la densidad predictiva logarítmica esperada (elpd), estimada dejando fuera una observación a la vez:

$$\text{elpd}_{\text{loo}} = \sum_{i=1}^{n} \log p(y_i \mid y_{-i})$$

Reajustar el modelo 800 veces sería carísimo. ArviZ lo aproxima con Pareto smoothed importance sampling (PSIS) a partir de un solo ajuste, siempre que guardes la log-verosimilitud punto a punto:

with modelo:
    pm.compute_log_likelihood(idata)

print(az.loo(idata))

El modelo de créditos obtiene elpd_loo = −409.45 (error estándar 14.30) y p_loo = 3.87, el número efectivo de parámetros, coherente con nuestros 4 parámetros. El diagnóstico Pareto k indica si la aproximación es confiable para cada observación: valores por encima de 0.7 señalan puntos muy influyentes donde PSIS falla; aquí las 800 observaciones quedan por debajo (el máximo es 0.182). WAIC, el criterio alternativo de az.waic, da prácticamente lo mismo (−409.44), pero LOO-PSIS es preferible porque trae su propio diagnóstico.

4. Comparar modelos

az.compare ordena modelos por elpd y estima la incertidumbre de la diferencia:

comparacion = az.compare({"completo": idata, "sin_antiguedad": idata_2})
print(comparacion[["elpd_loo", "elpd_diff", "dse", "weight"]])

Quitar la antigüedad empeora el elpd en 33.14 puntos, con un error estándar de la diferencia (dse) de 8.08. Una regla práctica: si la diferencia supera unas dos veces su error estándar, la preferencia es clara; aquí son más de cuatro veces. Los pesos de apilamiento quedan en 0.978 para el modelo completo y 0.022 para el reducido.

5. Métricas de clasificación

Con un conjunto de prueba puedes promediar las probabilidades posteriores de cada caso y calcular métricas clásicas: exactitud, AUC (capacidad de ordenar casos de mayor a menor riesgo) y la puntuación de Brier, el error cuadrático medio de las probabilidades, que premia la calibración. En el proyecto, el modelo de cuatro variables logra exactitud 0.936, AUC 0.987 y Brier 0.047 sobre 171 pacientes de prueba.

Trampas comunes

  • Olvidar la log-verosimilitud. pm.sample no la guarda por defecto; sin pm.compute_log_likelihood, az.loo falla.
  • Comparar modelos ajustados con datos distintos. LOO solo compara modelos sobre las mismas observaciones de la misma variable respuesta.
  • Ignorar valores de Pareto k altos. Si varios superan 0.7, haz validación cruzada K-fold real.
  • Elegir por exactitud con umbral 0.5. Depende del umbral y desperdicia la información de las probabilidades; prefiere elpd, Brier y la calibración.

Cierre

Diagnósticos para confiar en el cálculo, predictiva posterior para confiar en el modelo y LOO para estimar el desempeño fuera de muestra. Con las tres capas tienes argumentos sólidos para defender un modelo.

Recursos