Procesos Estocásticos y Cadenas de Markov · Tema 23

Probabilidades de transición

Cuantificar cada flecha i→j con pᵢⱼ: filas que suman 1 y estimación contando nᵢⱼ/nᵢ.

01 · Punto de partida

De la flecha al número

El grafo (Tema 22) dice a dónde se puede ir; falta con qué chance. ¿Del 0 se va al 1 el 30 % o el 90 % de las veces? Esa es la probabilidad de transición pᵢⱼ.

Con todas las pᵢⱼ armamos la matriz P (Tema 24). Y cuando P se desconoce, se estima contando transiciones en una historia.

  • ¿Qué vale pᵢⱼ = P(Xₙ₊₁ = j | Xₙ = i)?
  • ¿Cuánto suma cada fila y por qué?
  • ¿Cómo se estima pᵢⱼ desde datos: nᵢⱼ/nᵢ?
  • ¿Cuántos pasos hacen falta para estimar bien?

02 · Definición

¿Qué es pᵢⱼ?

Tres caras del mismo número:

?

Condicional

pᵢⱼ = P(Xₙ₊₁ = j | Xₙ = i). Solo el presente condiciona.

1

Fila = 1

Σⱼ pᵢⱼ = 1: desde i se va a algún lado (incluso i).

÷

Estimador

p̂ᵢⱼ = nᵢⱼ/nᵢ. Contar transiciones y dividir por visitas.

En la 2×2 bastan a = p₀₁ y b = p₁₀: p₀₀ = 1−a y p₁₁ = 1−b salen por complemento.

De conteos a chances (ejemplo).
Desde inᵢ₀ / nᵢ₁p̂ᵢ₀ / p̂ᵢ₁
0 (n₀ = 100)70 / 300,70 / 0,30
1 (n₁ = 80)40 / 400,50 / 0,50

03 · Anatomía

Fila, cero y muestra

Cuatro reglas para no equivocarse:

Fila suma 1
Cada fila es una distribución del próximo paso. Si no suma 1, hay bug o redondeo.
Cero estructural
Sin flecha (Tema 22) ⇒ pᵢⱼ = 0 fijo. No se estima: se impone.
Visitas mandan
La fila i se estima con nᵢ visitas. Estado poco visitado = fila ruidosa.
Horizonte
Más pasos N, mejor p̂. El error cae ≈ 1/√nᵢ por fila.

P verdadera

Parámetro

La que genera los datos. Filas exactas que suman 1.

P estimada

Medición

Conteos sobre visitas. Fluctúa; con N grande se pega a P.

04 · Ejemplos

Chances que un programador calibra

Toda P nace de contar o de experto; ambas se escriben pᵢⱼ:

nᵢⱼ→÷ nᵢ→p̂ᵢⱼ
  1. 1
    Clima: 30 soles → 9 lluvias.

    p̂₀₁ = 9/30 = 0,3. Fila 0 estimada con n₀ = 30.

  2. 2
    Servidor: 200 min ocupado.

    120 siguen ocupados: p̂₁₁ = 0,6.

  3. 3
    Cola: nunca +2.

    pᵢ,ᵢ₊₂ = 0 estructural por grafo, sin estimar.

  4. 4
    Dado cargado.

    Cada fila idéntica: pᵢⱼ = 1/6 con sesgo. Filas iguales = independencia.

  5. 5
    Experto sin datos.

    «Caído→libre 0,9»: se declara y se refina con datos.

05 · Representación en Python

Contar nᵢⱼ y dividir por nᵢ

En Python, la estimación es matriz de conteos dividida por filas. La validación es que cada fila estimada sume 1.

Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Alargá N y mirá el error.

import random

random.seed(7)
a, b, x, N = 0.3, 0.5, 0, 20
hist = [x]
for _ in range(N):
    x = 1 if random.random() < (a if x == 0 else 1 - b) else 0
    hist.append(x)

conteo = [[0, 0], [0, 0]]
for i in range(len(hist) - 1):
    conteo[hist[i]][hist[i+1]] += 1
print("conteos:", conteo)

Con N = 20 los conteos son flacos (algunos de 3–4). La estimación será ruidosa: normal con poca muestra.

De conteos a P estimada

Dividir cada fila por sus visitas:

conteo = [[14, 6], [5, 5]]
P_est = [[c / sum(f) for c in f] for f in conteo]
print(P_est)
print("filas:", [round(sum(f), 9) for f in P_est])

06 · Exploración

Laboratorio: estimar P contando

Cadena verdadera a = 0,3 y b = 0,5 (contorno blanco). Las barras estiman cada pᵢⱼ con N pasos. Con N = 100 el error es visible; con N = 20000 las barras se pegan al contorno. Generá nuevas historias con igual P.

EXPERIMENTO 23

p̂ → p con N grande

p̂ᵢⱼ = nᵢⱼ / nᵢ · error ≈ 1/√nᵢ

Los resultados numéricos aparecen debajo.
Error máx |p̂−p|0,000
Visitas n₀ / n₁0 / 0
N1000
LecturaRuidosa

Con N 1000, el error máximo ronda 0,03.

Cuatro pares verdadero/estimado: p₀₀, p₀₁, p₁₀, p₁₁. El slider recorre N = 100, 500, 1000, 5000, 20000 en escala log.

Preguntas para explorar

  1. Con N = 100, ¿el error máximo ronda cuánto? ¿Y con 20000?
  2. ¿Qué fila se estima mejor: la del 0 o la del 1? ¿Por qué (visitas)?
  3. Generá nuevas historias con igual N. ¿El error es fijo o fluctúa?
Ver respuestas sugeridas
  1. ≈ 0,08–0,12 con 100; ≈ 0,01 con 20000. El error cae con √N.
  2. La del 0: se visita ≈ 62 % (π₀) y tiene más n₀.
  3. Fluctúa: es ruido muestral. Más N lo achica, no lo congela.

07 · Comprensión

Confusiones frecuentes

«Las columnas suman 1»

No: las filas (desde i). Las columnas suman lo que sea: llegadas, no salidas.

«pᵢⱼ = nᵢⱼ/N total»

No: es nᵢⱼ/nᵢ (visitas a i). Dividir por N total mezcla filas con distinto peso.

«Cero muestral = imposible»

Con pocas visitas, no ver i→j no prueba pᵢⱼ = 0. Solo el grafo declara estructurales.

«Más N siempre arregla»

Arregla la varianza, no el sesgo: si el proceso cambió (no homogéneo), más historia vieja estorba.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: completar por filas

Con a = 0,25 y b = 0,6, escribí la P 2×2 completa y verificá filas.

a, b = 0.25, 0.6
P = [[1 - a, a], [b, 1 - b]]
print(P)
print([sum(f) for f in P])
Ver solución razonada

P = [[0,75 – 0,25], [0,6 – 0,4]], filas 1,0. El complemento evita estimar de más.

Ejercicio 2: estimar una fila

Sin ejecutar primero: con n₀ = 200 (140 se quedan, 60 salen), ¿qué p̂₀? Comprobalo.

print([140 / 200, 60 / 200])
Ver solución

[0,7 – 0,3]: 200 visitas dan ±0,06 de ruido. Con 20 visitas sería ±0,2.

Ejercicio 3: fila poco visitada

Compará el error de la fila 1 con n₁ = 20 vs n₁ = 2000 (p₁₁ = 0,5). ¿En qué factor cae?

Ver una posible respuesta
import math
print(round(math.sqrt(2000 / 20), 1))

Cae 10 veces (√100): de ±0,22 a ±0,02. Las visitas mandan la precisión.

09 · Síntesis

Ideas para recordar

  • pᵢⱼ = P(j | i); cada fila suma 1.
  • En 2×2 bastan a y b; el resto es complemento.
  • p̂ᵢⱼ = nᵢⱼ/nᵢ con error ≈ 1/√nᵢ.
  • En Python: matriz de conteos + división por filas.
  • Cero estructural se impone; cero muestral se duda.

En el próximo tema ordenaremos todo en la matriz de transición.