programa
Algunas distribuciones de probabilidad son tan complejas que no puedes trabajar con ellas de forma directa.
Cuando modelas datos del mundo real, las matemáticas suelen romperse antes de llegar a algo útil. Es habitual que ciertas integrales parezcan manejables sobre el papel, pero se vuelvan intratables en cuanto añades un par de variables latentes. Esto es especialmente común en la inferencia bayesiana, donde la distribución posterior combina tus creencias previas con los datos observados, y el resultado no se puede resumir con una fórmula sencilla.
La idea básica de Markov Chain Monte Carlo es que, en lugar de atacar las matemáticas de frente, MCMC explora la distribución mediante simulación. Genera muestras que reflejan su forma sin necesidad de calcularla por completo.
En este artículo, cubro los conceptos clave detrás de MCMC, repaso los algoritmos más comunes y te enseño cómo ponerlo en práctica con Python.
¿Necesitas repasar matemáticas para Python? Lee nuestros artículos Demystifying Mathematical Concepts for Deep Learning para ver las matemáticas aplicadas en Numpy.
¿Qué es Markov Chain Monte Carlo?
Markov Chain Monte Carlo (MCMC) es una familia de algoritmos que generan muestras de distribuciones de probabilidad, incluso cuando esas distribuciones son demasiado complejas como para trabajar directamente con ellas.
El nombre se divide en dos partes. La cadena de Markov controla cómo se mueve el algoritmo por los posibles estados. Cada paso depende solo de dónde estás ahora, no de toda la historia de cómo llegaste hasta aquí. La parte de Monte Carlo significa que usas muestreo aleatorio para estimar cantidades de interés.
Combinadas, MCMC construye una cadena de muestras aleatorias que, con el tiempo, refleja la forma de tu distribución objetivo. Es, ante todo, una técnica de muestreo. No estás resolviendo las matemáticas de forma exacta, sino aproximándolas por simulación.
Por qué hace falta Markov Chain Monte Carlo
El problema con las distribuciones en datos reales es que distan mucho de ser tan limpias como las de los libros de texto.
En inferencia bayesiana, a menudo intentas calcular una distribución posterior: la probabilidad actualizada de los parámetros del modelo tras observar datos. La fórmula parece sencilla en papel: multiplicas la previa por la verosimilitud y luego divides por la verosimilitud marginal. Este último término requiere integrar sobre todos los valores posibles de los parámetros. En alta dimensión, esa integral es prácticamente imposible de calcular.
Y empeora a medida que crece tu modelo. Si añades más parámetros o más variables latentes, el cálculo exacto se convierte en un callejón sin salida. Te lo encontrarás en muchos escenarios habituales:
- Modelos jerárquicos bayesianos: cuando unos parámetros dependen de otros, creando distribuciones anidadas que no se integran limpiamente
- Posteriores de alta dimensión: cuando el número de parámetros hace inviable computacionalmente cualquier aproximación por rejilla
- Priors no conjugados: cuando la previa y la verosimilitud no se combinan en una distribución reconocible
MCMC es una buena salida en estos casos. En lugar de calcular la distribución, extrae muestras de ella. Esas muestras te dan todo lo que necesitas sin resolver la integral.
Las dos ideas detrás de MCMC
MCMC combina dos ideas que, por separado, son sencillas, pero juntas resultan muy potentes. Te las explico.
Cadenas de Markov
Una cadena de Markov es una secuencia de estados donde cada paso depende solo de dónde estás ahora.
Da igual por dónde hayas pasado antes. Solo el estado actual determina a dónde vas después. Esta propiedad de "no memoria", llamada formalmente propiedad de Markov, es lo que facilita las matemáticas y hace el algoritmo práctico.
La cadena avanza estado a estado y, con la configuración adecuada, acaba asentándose en una distribución estacionaria: un patrón estable en el que la probabilidad de estar en un estado dado deja de cambiar. Esa distribución estable es justo con la que MCMC está diseñada para trabajar.
Métodos de Monte Carlo
Los métodos de Monte Carlo usan muestreo aleatorio para estimar cantidades difíciles de calcular directamente.
La idea es extraer suficientes muestras aleatorias de una distribución y estimar su media, varianza u otra propiedad mirando solo las muestras. Cuantas más muestras saques, más se acercan tus estimaciones a los valores reales.
Por sí solos, los métodos de Monte Carlo requieren muestrear directamente de la distribución, que es justo el problema que queremos resolver. Las cadenas de Markov se encargan de esa parte.
Cómo funciona Markov Chain Monte Carlo
MCMC es un bucle con una decisión sencilla en cada paso.
- Empieza con un estado inicial: elige un punto de partida en tu espacio de parámetros, aunque sea una estimación tosca
- Propón un nuevo estado: usa un mecanismo de propuesta para sugerir a dónde moverte
- Decide si lo aceptas: compara el estado propuesto con el actual y acepta o rechaza en función de cuán probable sea cada uno bajo la distribución objetivo
- Repite: ejecuta este bucle miles de veces, recogiendo muestras por el camino
- Usa las muestras: estima medias, intervalos de credibilidad u otras cantidades de interés a partir de las muestras recogidas
El paso de aceptar o rechazar es donde ocurre la "magia".
Al aceptar con más frecuencia los estados mejores que los peores, la cadena gravita hacia las regiones de mayor probabilidad, sin necesidad de calcular la distribución completa.
Las primeras muestras dependen de dónde empezaste, así que se descartan. Tras suficientes iteraciones, la cadena olvida su punto de partida y las muestras restantes reflejan la forma real de tu distribución objetivo.
La distribución objetivo y la distribución estacionaria
MCMC se construye con el objetivo de generar muestras de una distribución objetivo de la que no puedes muestrear directamente.
La distribución objetivo es aquello sobre lo que quieres aprender, normalmente una posterior en inferencia bayesiana. Conoces su forma salvo por una constante de normalización, pero no puedes calcular directamente esa constante. MCMC no la necesita.
Cada algoritmo MCMC está diseñado para que su cadena de Markov tenga una distribución estacionaria que coincida con la objetivo. Una distribución estacionaria es aquella en la que la cadena se estabiliza tras suficientes pasos.
Deja correr la cadena y empezará a producir muestras que parecen salidas de tu distribución objetivo. La integral queda esquivada.
Algoritmos populares de Markov Chain Monte Carlo
En la práctica verás un puñado de algoritmos MCMC. Todos siguen el mismo bucle central, pero difieren en cómo proponen nuevos estados y en cómo usan la información de la distribución objetivo.
Algoritmo de Metropolis
El algoritmo de Metropolis es el más simple y el que lo inició todo.
En cada paso, propone un nuevo estado añadiendo ruido aleatorio al actual. Si el estado propuesto tiene mayor probabilidad bajo la distribución objetivo, se acepta siempre. Si es menor, se acepta con una probabilidad proporcional al cociente de las dos probabilidades; en caso contrario, la cadena se queda donde está.
Este mecanismo de aceptación/rechazo hace que la cadena pase más tiempo en regiones de alta probabilidad sin calcular nunca la distribución completa.
Metropolis usa una distribución de propuesta simétrica, es decir, es igual de probable proponer un paso en cualquier dirección. Tiende a fallar a medida que crecen los modelos.
Algoritmo de Metropolis-Hastings
El algoritmo de Metropolis-Hastings (MH) generaliza Metropolis permitiendo distribuciones de propuesta asimétricas.
MH ajusta la probabilidad de aceptación para reflejar que algunas propuestas son más probables que otras. Puedes adaptar la propuesta a la forma de tu objetivo, lo que mejora la exploración y acelera la convergencia.
La mayoría de métodos MCMC modernos son extensiones de MH o se basan en los mismos principios. Si entiendes Metropolis-Hastings, entiendes los cimientos del campo.
Muestreo de Gibbs
Gibbs actualiza una variable cada vez en lugar de proponer un estado nuevo para todos los parámetros a la vez.
En cada paso, muestrea cada variable de su distribución condicional, es decir, la distribución de esa variable dado el valor actual de las demás. Cuando has recorrido todas las variables, has completado una iteración completa.
Así se evita por completo el paso de aceptar/rechazar, ya que cada muestreo condicional se acepta siempre. Es útil cuando la distribución conjunta completa es difícil de muestrear pero las condicionales son tratables, algo común en modelos jerárquicos bayesianos.
Hamiltonian Monte Carlo
Hamiltonian Monte Carlo (HMC) fue el primer algoritmo que hizo práctica la inferencia bayesiana moderna a escala.
En lugar de proponer estados nuevos al azar, HMC usa información de gradiente de la distribución objetivo para proponer estados alejados de la posición actual pero aún con alta probabilidad de ser aceptados. Se mueve por el espacio de parámetros mucho mejor que los métodos de paseo aleatorio. Hay menos propuestas rechazadas y mejor exploración en distribuciones de alta dimensión.
Los métodos de paseo aleatorio como Metropolis no escalan bien al crecer el número de parámetros. HMC no sufre ese problema en el mismo grado.
HMC es el motor detrás de Stan, una de las plataformas de programación probabilística más usadas. El No-U-Turn Sampler (NUTS), una extensión adaptativa de HMC usada en PyMC, elimina la necesidad de ajustar manualmente el tamaño de paso y el número de pasos.
Markov Chain Monte Carlo en estadística bayesiana
Si hay un área donde MCMC ha tenido más impacto es la inferencia bayesiana.
La estadística bayesiana gira en torno a la distribución posterior, la probabilidad actualizada de los parámetros del modelo tras ver datos. Calcularla implica multiplicar la previa por la verosimilitud y normalizar. Esa normalización requiere una integral que rara vez es tratable.
MCMC elimina por completo este paso. Solo evalúas la posterior no normalizada en un punto dado y dejas que la cadena haga el resto.
Un ejemplo sencillo: estás estimando el sesgo de una moneda. Partes de la creencia previa de que probablemente es justa y observas una secuencia de lanzamientos. Para una moneda simple, la posterior tiene forma cerrada. Si añades una estructura jerárquica, es decir, estimar el sesgo de cien monedas a la vez, calcularla se vuelve imposible.
Con MCMC, ejecutas la cadena, recoges muestras de la posterior y con ellas calculas lo que necesitas.
Entender burn-in, convergencia y mixing
Estos tres conceptos suelen confundir a quienes se inician en MCMC. Si los interpretas mal, obtendrás resultados, pero no sabrás por qué no son fiables.
Burn-in
Cuando arranca una cadena de Markov, no tiene ni idea de dónde están las regiones de alta probabilidad de tu distribución objetivo.
Esas primeras muestras están influidas por tu punto de partida, no por la distribución objetivo. El burn-in consiste en descartarlas. Ejecutas la cadena cierto número de iteraciones, tiras esas muestras y te quedas solo con lo que viene después, cuando la cadena ya ha encontrado una buena zona de inicio.
No hay una regla universal para la duración del burn-in. Depende de tu modelo, del punto de partida y de cómo mezcle la cadena. En la práctica, se diagnostica visualmente con trace plots en lugar de fijar un número a priori.
Convergencia
La convergencia significa que la cadena ha dejado de estar influida por su inicio y ahora extrae muestras que reflejan la distribución objetivo.
Una cadena que no ha convergido produce muestras sesgadas. La media que calcules no coincidirá con la media posterior real, sino con la zona en la que la cadena se haya quedado atascada.
La convergencia se evalúa a posteriori mediante diagnósticos. Ejecutar varias cadenas desde puntos de partida distintos y comprobar si coinciden es una de las formas más fiables de detectar fallos de convergencia.
Mixing
Una cadena que converge pero mezcla mal sigue siendo problemática.
El mixing describe lo bien que la cadena explora la distribución objetivo. Una cadena que mezcla bien se mueve con libertad, visita regiones de alta y baja probabilidad y produce muestras aproximadamente independientes entre sí. Una cadena con mal mixing se queda en una región durante muchas iteraciones y produce muestras muy correlacionadas que no representan la distribución completa.
El mal mixing suele verse en un trace plot que parece un río lento y serpenteante en lugar de una banda horizontal ruidosa. Si ves eso, tu muestreador necesita ajuste: una mejor distribución de propuesta o incluso cambiar de algoritmo.

Gráfico comparativo de mixing
Cómo evaluar resultados de MCMC
Ahora te muestro cuatro formas de evaluar MCMC y cuándo usar cada una.
Trace plots
Un trace plot muestra el valor muestreado de un parámetro en cada iteración. Es lo primero que debes mirar tras ejecutar MCMC.
Un trace plot saludable se parece a ruido blanco alrededor de una media estable. No deberías ver tendencias, tramos largos y planos ni derivas lentas. Si la cadena vaga o se queda en una región durante muchas iteraciones, es un problema de mixing y tus muestras no son fiables.

Trace plots visualizados
Autocorrelación
Las muestras de MCMC nunca son completamente independientes. Cada muestra está influida por la anterior. La autocorrelación mide cuán fuertemente están correlacionadas las muestras a lo largo de las iteraciones.
Una autocorrelación alta significa que tus muestras aportan menos información de la que su número sugiere. Dos mil muestras correlacionadas pueden equivaler a doscientas independientes. La mayoría de librerías MCMC incluyen gráficos de autocorrelación para ver lo rápido que cae la correlación conforme las muestras se separan.

Gráficos de autocorrelación
Tamaño de muestra efectivo
El tamaño de muestra efectivo (ESS) traduce esa autocorrelación a un número práctico: a cuántas muestras independientes equivale tu cadena.
Si has extraído 5.000 muestras pero el ESS es 200, estás trabajando con la potencia estadística de 200 extracciones independientes. Un ESS bajo implica que necesitas ejecutar la cadena más tiempo, ajustar el sampler o ambas cosas. En la práctica, se suele apuntar a un ESS de al menos varios cientos por parámetro antes de fiarse de las estimaciones.
Diagnósticos de convergencia
Si ejecutas varias cadenas, puedes comprobar formalmente si han convergido a la misma distribución. El diagnóstico de Gelman-Rubin, reportado como R-hat, compara la varianza dentro de cada cadena con la varianza entre cadenas.
Un R-hat cercano a 1,0 indica que las cadenas coinciden, lo cual es buena señal. Valores por encima de 1,01 o 1,05 (según el umbral de tu librería) sugieren que las cadenas no han convergido y necesitas más iteraciones. La mayoría de librerías modernas como PyMC calculan R-hat automáticamente y avisan si es demasiado alto.
Markov Chain Monte Carlo en Python
Python cuenta con varias librerías para MCMC, cada una con una filosofía diferente.
- PyMC: la opción más accesible para la mayoría de data scientists. Defines tu modelo con sintaxis Python y PyMC se encarga del muestreo por debajo usando NUTS (una versión adaptativa de HMC). Es la referencia para modelado bayesiano en Python.
- CmdStanPy / PyStan: interfaces en Python para Stan, un lenguaje de programación probabilística dedicado. Stan compila tu modelo a C++ antes de ejecutarlo, lo que lo hace rápido y adecuado para modelos jerárquicos complejos. La contrapartida es una curva de aprendizaje mayor.
- NumPy: no hay una librería MCMC dedicada, pero puedes implementar algoritmos como Metropolis-Hastings desde cero. Útil para entender qué pasa por debajo antes de pasar a herramientas de más alto nivel.
Para la mayoría de trabajos prácticos, empezarías con PyMC. Es lo que usaré, así que si sigues el tutorial, asegúrate de instalar primero la librería:
pip install pymc
Para mantenerlo simple, me ciño a un ejemplo fácil: estimar el sesgo de una moneda a partir de una secuencia de lanzamientos.
Paso 1: define el modelo
import pymc as pm
import numpy as np
# 1 = heads, 0 = tails
observed_flips = np.array([1, 0, 1, 1, 0, 1, 1, 1, 0, 1])
with pm.Model() as coin_model:
# Prior: we believe the coin is probably fair
bias = pm.Beta("bias", alpha=2, beta=2)
# Likelihood: observed flips given the bias
flips = pm.Bernoulli("flips", p=bias, observed=observed_flips)
La previa pm.Beta codifica una creencia débil de que la moneda es justa. La verosimilitud pm.Bernoulli conecta el modelo con los datos observados.
Paso 2: ejecuta el muestreador
with coin_model:
trace = pm.sample(2000, tune=1000, return_inferencedata=True)

Salida al ejecutar el muestreador
tune establece el número de pasos de burn-in: esas muestras se descartan. sample extrae 2000 muestras posteriores por cadena después del ajuste.
Paso 3: inspecciona la posterior
import arviz as az
az.plot_trace(trace, var_names=["bias"])
az.summary(trace, var_names=["bias"])

Trace plot del modelo y resultados del resumen
az.summary() te da la media posterior, la desviación estándar y el R-hat de cada parámetro. Si R-hat está cerca de 1,0, las cadenas han convergido. az.plot_trace() dibuja el trace y la distribución posterior en paralelo para cada parámetro.
Para este conjunto de datos —7 caras de 10 lanzamientos— la media posterior es 0,642 con una desviación estándar de 0,124. Refleja la evidencia de los datos sin alejarse mucho de la previa de moneda justa. R-hat es 1,00 y el ESS está muy por encima de 2000, así que las cadenas han convergido y las muestras son fiables.
Errores comunes con MCMC
MCMC es fácil de ejecutar, pero también fácil de usar mal. Estos son los errores que más se repiten.
- Asumir convergencia demasiado pronto: que el muestreador termine sin errores no significa que haya convergido. Revisa siempre R-hat y los trace plots antes de fiarte. Una cadena puede parecer estable y aun así estar atrapada en una región del espacio de parámetros.
- Ignorar el burn-in: las primeras muestras están sesgadas hacia tu punto de partida, no hacia la distribución objetivo. Descártalas. La mayoría de librerías lo gestionan automáticamente con el parámetro
tune, pero comprueba que no estés incluyendo esas muestras por error en tu análisis. - Mal mixing: una cadena que avanza demasiado despacio produce muestras muy correlacionadas que aportan menos información de la que su número sugiere. Si tu trace plot parece una deriva lenta en lugar de una banda horizontal ruidosa, necesitas ajustar la propuesta o cambiar a un algoritmo mejor. Pasar de Metropolis a NUTS suele solucionarlo de raíz.
- Demasiadas pocas muestras: un tamaño de muestra efectivo (ESS) bajo implica estimaciones poco fiables, incluso si la cadena ha convergido técnicamente. Si tu ESS es una fracción pequeña del total de extracciones, ejecuta la cadena más tiempo o mejora el mixing antes de sacar conclusiones.
MCMC frente a otros métodos de muestreo
MCMC no es la única forma de aproximar una distribución. Así se compara con las alternativas.
- Rejection sampling genera propuestas desde una distribución más simple y las acepta según lo bien que encajen con el objetivo. Es exacto cuando funciona, pero las tasas de aceptación se desploman en alta dimensión.
- Importance sampling pondera muestras de una propuesta para aproximar esperanzas bajo el objetivo. Es rápido y funciona bien en baja dimensión, pero la varianza de los pesos se dispara al aumentar la dimensionalidad. En la práctica, unas pocas muestras acaban llevándose casi todo el peso y las estimaciones se vuelven poco fiables.
- Inferencia variacional (VI) ajusta una distribución más simple para aproximar la objetivo minimizando una medida de divergencia. VI es mucho más rápida que MCMC y escala a grandes conjuntos de datos, pero introduce error de aproximación. La distribución ajustada puede pasar por alto estructura de la posterior que MCMC sí captaría.
La versión corta:

MCMC frente a alternativas
MCMC es la opción adecuada cuando la precisión importa más que la velocidad. Si necesitas escalar a grandes volúmenes de datos o ejecutar inferencia en tiempo real, la inferencia variacional puede compensar la pérdida de precisión.
Conclusión
MCMC es una de esas herramientas que intimidan desde fuera pero que encajan en cuanto entiendes lo que realmente hace: construir una cadena de muestras que va reflejando poco a poco la forma de una distribución que no puedes calcular directamente.
También se entiende mucho mejor si la partes en dos: cadenas de Markov y métodos de Monte Carlo.
Su papel en la estadística bayesiana es difícil de exagerar. Distribuciones posteriores que de otro modo serían inalcanzables pasan a ser abordables en cuanto cuentas con un buen muestreador. Por eso MCMC está en el corazón de librerías de programación probabilística como PyMC y Stan.
Pero antes de lanzarte a implementar, asienta la intuición. Entiende por qué la cadena necesita burn-in, qué significa realmente mezclar y cómo leer un trace plot. El código es la parte fácil: las librerías de Python esconden la complejidad tras funciones sencillas.
Si quieres dominar el machine learning, apúntate a nuestro itinerario Machine Learning Scientist in Python. 85 horas de contenido te ayudarán a estar listo para trabajar en 2026.
Preguntas frecuentes sobre MCMC
¿Para qué se usa Markov Chain Monte Carlo?
MCMC se utiliza para extraer muestras de distribuciones de probabilidad demasiado complejas como para trabajar directamente con ellas. Es más común en estadística bayesiana, donde estima distribuciones posteriores sin requerir soluciones en forma cerrada. También lo encontrarás en simulaciones de física, biología computacional y en cualquier campo donde la inferencia exacta no sea viable.
¿En qué se diferencia MCMC del muestreo aleatorio convencional?
El muestreo aleatorio convencional asume que puedes extraer directamente de tu distribución objetivo. MCMC lo sortea construyendo una cadena de muestras que converge gradualmente a dicha distribución. No necesitas conocer la distribución completa, solo evaluarla en puntos concretos. La contrapartida es que las muestras de MCMC están correlacionadas, por lo que necesitas más de ellas para obtener estimaciones fiables.
¿Cómo sabes si un muestreador MCMC ha convergido?
La comprobación más común es el diagnóstico de Gelman-Rubin, reportado como R-hat. Valores cercanos a 1,0 indican que las cadenas han convergido a la misma distribución. Los trace plots y el tamaño de muestra efectivo (ESS) también son útiles. Un trace plot saludable parece ruido aleatorio alrededor de una media estable, y un ESS alto indica que tus muestras aportan suficiente información para confiar en las estimaciones.
¿Cuál es la diferencia entre Metropolis-Hastings y Hamiltonian Monte Carlo?
Metropolis-Hastings propone nuevos estados añadiendo ruido aleatorio a la posición actual, lo que puede ser lento cuando la distribución objetivo tiene geometría compleja. Hamiltonian Monte Carlo utiliza información de gradiente para proponer estados alejados de la posición actual pero con alta probabilidad de ser aceptados, lo que mejora mucho la exploración en alta dimensión. Para la mayoría de flujos de trabajo bayesianos modernos, HMC —y su versión adaptativa, NUTS— es la opción preferida.
¿Cuándo deberías usar inferencia variacional en lugar de MCMC?
Cuando la velocidad y la escalabilidad importan más que la precisión. MCMC produce muestras de alta calidad pero escala mal a conjuntos de datos grandes y modelos de alta dimensión. La inferencia variacional ajusta una distribución más simple para aproximar la posterior: es mucho más rápida, pero introduce un error de aproximación que MCMC evita. Si prototipas a escala o necesitas inferencia en tiempo real, la inferencia variacional puede compensar el sacrificio en precisión.
