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:
Estados
Conjunto discreto: {0, 1}, {sol, lluvia}, {0…K−1}. (Temas 21–22)
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.
| Desde \ hacia | 0 | 1 |
|---|---|---|
| 0 | 0,7 | 0,3 |
| 1 | 0,5 | 0,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:
- 1Clima: sol/lluvia.
Si hoy llueve, mañana llueve con 0,6; si hay sol, con 0,2.
- 2Servidor: libre/ocupado.
Cada minuto cambia con a y b según carga.
- 3Cliente: activo/inactivo.
Retención y fuga como transiciones mensuales.
- 4Máquina: ok/falla.
Falla con a, se repara con b. (Versión discreta del Tema 6)
- 5Moneda 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.
Cadena 2×2 en vivo
P = [[1−a, a], [b, 1−b]] · π₁ = a/(a+b)
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
- Con a = 0,3 y b = 0,5, ¿la fracción en 1 ronda 37 %? ¿Qué fórmula da eso?
- Poné a = 0,9 y b = 0,1. ¿Dónde viven las filas? ¿La teoría cuánto da?
- ¿El próximo paso usa toda la fila recorrida o solo el último punto?
Ver respuestas sugeridas
- Sí: π₁ = a/(a+b) = 0,3/0,8 = 37,5 %.
- Arriba (en 1): π₁ = 0,9/1,0 = 90 %. P grande de entrar y chica de salir.
- 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».