Procesos Estocásticos y Cadenas de Markov · Tema 19

Concepto de cadena de Markov

El futuro depende solo del presente: estados discretos, pasos discretos y regla P de a un paso.

01 · Punto de partida

Predecir sin recordar todo

Para pronosticar el clima de mañana, ¿hace falta el mes entero o alcanza con hoy? Si alcanza con hoy, el clima es (aprox.) una cadena de Markov: el presente resume el pasado.

Cerramos Poisson (llegadas) y abrimos Markov (movimientos): tiempo discreto, estados discretos y una matriz P que dice cómo saltar.

  • ¿Qué estados hay: sol/lluvia, libre/ocupado, 0/1?
  • ¿Con qué chance se pasa de cada estado a cada otro?
  • ¿El pasado aporta algo más allá del presente?
  • ¿A dónde va la cadena a largo plazo?

02 · Definición

¿Qué es una cadena de Markov?

Tres ingredientes la definen:

S

Estados

Conjunto discreto: {0, 1}, {sol, lluvia}, {0…K−1}. (Temas 21–22)

P

Transiciones

pᵢⱼ = P(Xₙ₊₁ = j | Xₙ = i). Filas que suman 1. (Temas 23–24)

▶

Sin memoria

Solo Xₙ importa para el próximo paso. (Tema 20)

Con dos estados la matriz es 2×2: basta dar a = P(0→1) y b = P(1→0). El resto sale por complemento: cada fila suma 1.

Cadena de 2 estados con a = 0,3 y b = 0,5.
Desde \ hacia01
00,70,3
10,50,5

03 · Anatomía

Estado, paso y matriz

Cuatro piezas para no perderse en el bloque Markov:

Estado Xₙ
Dónde está la cadena en el paso n. Discreto y codificado con índice.
Paso
El salto Xₙ → Xₙ₊₁ sorteado con la fila i de P. Un paso, una moneda cargada.
Matriz P
La tabla K×K de chances. Filas suman 1. Es el modelo completo.
Trayectoria
Sucesión x₀, x₁… generada sorteando fila por fila. Cada corrida es una historia.

Poisson (bloque anterior)

Cuenta eventos

N(t) solo sube. La pregunta es cuántos y cuándo.

Markov (este bloque)

Se mueve entre estados

Xₙ salta en S. La pregunta es dónde estará y con qué chance.

04 · Ejemplos

Cadenas de dos estados en todas partes

Si hay dos modos y chances de cambio, hay una cadena 2×2:

Dos modos→a, b→matriz P
  1. 1
    Clima: sol/lluvia.

    Si hoy llueve, mañana llueve con 0,6; si hay sol, con 0,2.

  2. 2
    Servidor: libre/ocupado.

    Cada minuto cambia con a y b según carga.

  3. 3
    Cliente: activo/inactivo.

    Retención y fuga como transiciones mensuales.

  4. 4
    Máquina: ok/falla.

    Falla con a, se repara con b. (Versión discreta del Tema 6)

  5. 5
    Moneda con racha.

    No Markov con {cara, seca} si la chance depende de la racha: falta estado.

05 · Representación en Python

La cadena es un bucle sobre filas de P

En Python, P es una lista de listas y el paso sortea con la fila del estado actual. El bucle genera la trayectoria.

Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Cambiá a y b y mirá las visitas.

import random

P = [[0.7, 0.3],   # desde 0: queda con 0.7, va a 1 con 0.3
     [0.5, 0.5]]   # desde 1

def paso(x):
    u = random.random()
    ac = 0.0
    for j, p in enumerate(P[x]):
        ac += p
        if u < ac:
            return j

random.seed(7)
x, hist = 0, [0]
for _ in range(10):
    x = paso(x)
    hist.append(x)
print(hist)

Cada valor es 0 o 1 y cada paso usó solo el anterior: la historia larga no entró al sorteo.

Fracción de visitas

Con N grande, la fracción en 1 estima π₁ = a/(a+b). Así se conecta simulación y teoría:

import random

random.seed(11)
a, b, x, unos, N = 0.3, 0.5, 0, 0, 5000
for _ in range(N):
    x = 1 if (random.random() < (a if x == 0 else 1 - b)) else 0
    unos += x
print("simulada:", round(unos / N, 3), "| teoría a/(a+b):", round(a / (a + b), 3))

06 · Exploración

Laboratorio: dos estados, muchas historias

Cadena {0, 1} con a = P(0→1) y b = P(1→0). Cada fila es una réplica de 40 pasos (abajo = 0, arriba = 1). Movete a y b: si a ≫ b, las filas viven arriba; si b ≫ a, abajo.

EXPERIMENTO 19

Cadena 2×2 en vivo

P = [[1−a, a], [b, 1−b]] · π₁ = a/(a+b)

Los resultados numéricos aparecen debajo.
Fracción en 10 %
Teoría a/(a+b)0 %
Saltos por réplica0,00
LecturaEquilibrada

Con a 0,30 y b 0,50, la cadena pasa 37 % del tiempo en 1.

Cada escalera es una historia con la misma P. La fracción global en 1 estima el equilibrio π₁: la teoría sin simular todo.

Preguntas para explorar

  1. Con a = 0,3 y b = 0,5, ¿la fracción en 1 ronda 37 %? ¿Qué fórmula da eso?
  2. Poné a = 0,9 y b = 0,1. ¿Dónde viven las filas? ¿La teoría cuánto da?
  3. ¿El próximo paso usa toda la fila recorrida o solo el último punto?
Ver respuestas sugeridas
  1. Sí: π₁ = a/(a+b) = 0,3/0,8 = 37,5 %.
  2. Arriba (en 1): π₁ = 0,9/1,0 = 90 %. P grande de entrar y chica de salir.
  3. Solo el último: esa es la propiedad de Markov que formaliza el Tema 20.

07 · Comprensión

Confusiones frecuentes

«Markov = sin patrones»

No: hay persistencia (quedarse) y alternancia según P. Sin memoria no es sin estructura.

«Las filas pueden sumar cualquier cosa»

Deben sumar 1: son distribuciones del próximo paso. Si no, no hay sorteo válido.

«Dos estados alcanzan para todo»

Alcanzan para modos, no para conteos ni rachas. Si falta memoria, hay que agrandar S.

«La trayectoria es la matriz»

La trayectoria es una historia; P es la regla de todas. No confundir muestra con modelo.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: validar P

Verificá que estas filas suman 1 y detectá la rota.

P = [[0.7, 0.3], [0.5, 0.5]]
print([round(sum(f), 9) for f in P])
print("válida:", all(abs(sum(f) - 1) < 1e-9 for f in P))
Ver solución razonada

Ambas suman 1,0: válida. Si una sumara 0,9 o 1,2, el sorteo por acumulada quedaría sesgado o roto.

Ejercicio 2: equilibrio 2×2

Sin ejecutar primero: con a = 0,2 y b = 0,8, ¿qué π₁ predice a/(a+b)? Comprobalo simulando.

import random

random.seed(5)
a, b, x, unos, N = 0.2, 0.8, 0, 0, 8000
for _ in range(N):
    x = 1 if random.random() < (a if x == 0 else 1 - b) else 0
    unos += x
print("teoría:", a / (a + b), "| simulada:", round(unos / N, 3))
Ver solución

Teoría 0,2: la cadena vive 80 % en 0 porque salir de 1 es fácil (b = 0,8) y entrar es difícil.

Ejercicio 3: contar saltos

Generá una trayectoria de 20 pasos y contá cuántas veces cambió de estado. ¿Qué mide ese número?

Ver una posible respuesta
import random

random.seed(3)
P = [[0.7, 0.3], [0.5, 0.5]]
x, hist = 0, [0]
for _ in range(20):
    u, ac = random.random(), 0.0
    for j, p in enumerate(P[x]):
        ac += p
        if u < ac:
            x = j
            break
    hist.append(x)
print(hist)
print("saltos:", sum(1 for i in range(1, len(hist)) if hist[i] != hist[i-1]))

Cuenta la movilidad: con a y b grandes hay muchos saltos; con diagonales ≈ 1, la cadena se queda quieta.

09 · Síntesis

Ideas para recordar

  • Markov: tiempo discreto, estados discretos, futuro | presente.
  • Todo vive en P: pᵢⱼ con filas que suman 1.
  • En 2×2 bastan a = P(0→1) y b = P(1→0).
  • En Python: sortear la fila actual en bucle.
  • La fracción en 1 estima π₁ = a/(a+b).

En el próximo tema formalizaremos la propiedad de Markov: qué significa «sin memoria».