Procesos Estocásticos y Cadenas de Markov · Tema 01

Concepto de proceso estocástico

Qué es un proceso estocástico, qué significa X(t), y cómo distinguir tiempo, estado y azar antes de simularlo en Python.

01 · Punto de partida

Todo lo que cambia con azar en el tiempo es un proceso

La cantidad de clientes en una fila, el stock de un producto, los pedidos que llegan a un servidor o el estado de una máquina (funciona / falló) tienen algo en común: evolucionan en el tiempo y el futuro es incierto. No alcanza con una sola variable aleatoria: necesitamos una familia de variables, una para cada instante.

Esa familia es el proceso estocástico. Será la materia prima de todo el curso: primero lo definiremos, luego contaremos eventos con Poisson y finalmente predeciremos movimientos con Markov.

  • ¿Qué instante miramos: pasos 0, 1, 2… o tiempo real t ≥ 0?
  • ¿Qué valor puede tomar el sistema en cada instante?
  • ¿Una sola historia observada o todas las historias posibles?
  • ¿Qué regla conecta el presente con el futuro?

02 · Definición

¿Qué es un proceso estocástico?

Todo proceso combina tres ingredientes inseparables:

◷

Tiempo

El índice t. Discreto (n = 0, 1, 2…) por pasos o continuo (t ≥ 0) en cualquier instante.

◈

Estado

El valor X(t): cuántos hay, dónde estoy, en qué modo opera el sistema.

⚄

Azar

La regla probabilística que genera el siguiente valor a partir de la historia.

La letra S es el espacio de estados (Tema 3): el conjunto de todos los valores posibles. El tiempo T puede ser discreto o continuo, y el espacio también. Esa combinación 2 × 2 ordena casi todos los modelos del curso:

Cuatro familias según el tiempo y el espacio de estados.
Tiempo \ EspacioDiscretoContinuo
Discreto (n = 0, 1, 2…)Cadena de Markov discreta: estado del servidor cada minutoNivel de batería cada hora (litros, voltios)
Continuo (t ≥ 0)Número de arribos N(t): 0, 1, 2… en tiempo realTemperatura o precio en cada instante

03 · Anatomía

Tiempo, estados y trayectorias

Para hablar con precisión conviene fijar el vocabulario desde ahora (lo profundizaremos en los Temas 2 a 6):

X(t)
El estado del sistema en el instante t. Es aleatorio: antes de observar, hay varios valores posibles. (Tema 2)
Espacio de estados S
Todos los valores que X(t) puede tomar: {vacío, ocupado}, {0, 1, 2…}, [0, ∞). (Tema 3)
Trayectoria
Una historia concreta: x(0), x(1), x(2)… Lo observado es una sola trayectoria; el proceso describe todas las posibles. (Tema 4)
Ley de evolución
La regla que conecta presente y futuro: tasa λ en Poisson, matriz P en Markov.

Una trayectoria

Lo que pasó una vez

La fila tuvo 3, 5, 2 clientes a las 9, 10 y 11 h. Es un dato, no el modelo.

El proceso

Lo que puede pasar

Todas las trayectorias posibles con sus probabilidades. Eso es lo que simulamos.

04 · Ejemplos

Procesos que un programador puede simular

El mismo esquema t → X(t) aparece en dominios muy distintos. Reconocerlo permite reutilizar código:

Tiempo t→Estado X(t)→Trayectoria
  1. 1
    Llamadas a un call center.

    X(t) = llamadas acumuladas hasta t. Cada minuto puede llegar una o ninguna. (Poisson)

  2. 2
    Servidor web.

    X(n) = {libre, ocupado, caído} al minuto n. El próximo estado depende del actual. (Markov)

  3. 3
    Inventario.

    X(n) = stock al día n. Baja con demanda aleatoria y sube con reposiciones.

  4. 4
    Clima por días.

    X(n) = {sol, lluvia} el día n. Hoy nublado no garantiza mañana, pero cambia las chances.

  5. 5
    Caminata aleatoria.

    X(n) = posición tras n pasos. Sube con probabilidad p y baja con 1 − p. La usaremos en el laboratorio.

05 · Representación en Python

Un proceso es una lista de estados

En Python, una trayectoria es una lista: cada posición es el estado en un instante. El proceso es el programa que genera esas listas con azar. Todavía no estimamos nada; solo dejamos la idea en código.

Python en tu navegador. Los bloques de esta página se ejecutan localmente con Pyodide, sin instalar nada. La primera ejecución tarda unos segundos mientras se descarga el intérprete; las siguientes son inmediatas. Podés editar el código y volver a ejecutarlo.

import random

# Una trayectoria: X(n) en n = 0..9, estados 0 o 1.
random.seed(7)
trayectoria = [random.choice([0, 1]) for _ in range(10)]
print(trayectoria)
print("Estado en n=0:", trayectoria[0])
print("Estado en n=9:", trayectoria[9])

Consejo: ejecutá dos veces con la misma semilla y luego sin random.seed. ¿Qué cambia: la trayectoria o el proceso?

Del dato a la regla

Una caminata aleatoria hace explícita la ley de evolución: en cada paso se sube con probabilidad p y se baja si no. Esta función será la base de nuestras primeras simulaciones:

import random

def simular_caminata(pasos, p=0.5, semilla=7):
    # X(0) = 0. En cada paso: +1 con prob. p, -1 si no.
    random.seed(semilla)
    x = 0
    historia = [x]
    for _ in range(pasos):
        x = x + 1 if random.random() < p else x - 1
        historia.append(x)
    return historia


print(simular_caminata(10, p=0.5))

06 · Exploración

Laboratorio: muchas trayectorias, un proceso

Movete los controles y observá la diferencia clave del tema: cada línea es una trayectoria X(n), el conjunto es el proceso. La línea blanca gruesa es el promedio. Con p = 0,5 el proceso no deriva; con p mayor, deriva hacia arriba.

EXPERIMENTO 01

Caminata aleatoria: p y réplicas

X(n+1) = X(n) ± 1 con P(+1) = p

Los resultados numéricos aparecen debajo.
Media final (40 pasos)0,00
Trayectorias ≥ 00 %
Máximo final0,00
LecturaSin deriva

Con p 0,5, el promedio final ronda 0: el azar se compensa.

Cada línea de color es una historia posible del mismo proceso. La línea blanca es el promedio de todas: estima a dónde tiende el proceso, no lo que hará una historia puntual.

Preguntas para explorar

  1. Con p = 0,5 generá nuevas réplicas varias veces. ¿La media final es siempre 0? ¿Qué nos dice eso?
  2. Subí p a 0,7. ¿Qué le pasa al haz de trayectorias y a la media? ¿Cómo lo llamarías?
  3. ¿Qué parte del dibujo es una trayectoria y qué parte es el proceso?
Ver respuestas sugeridas
  1. No: la media muestral fluctúa (2, −1, 1…). Solo con muchas réplicas se acerca a 0, el valor teórico. Una muestra no es la ley.
  2. El haz se inclina hacia arriba y la media crece ≈ (2p − 1) × pasos. Es una deriva positiva.
  3. Cada línea fina es una trayectoria. El proceso es el conjunto + la regla que las genera (p y el mecanismo ±1).

07 · Comprensión

Confusiones frecuentes

«El proceso es la lista que simulé»

No: esa lista es una trayectoria. El proceso es la regla + todas las trayectorias posibles con sus probabilidades.

«Aleatorio significa sin reglas»

Al contrario: el azar está gobernado por reglas precisas (p, λ, P). Aleatorio significa que el resultado puntual no se predice, aunque el comportamiento promedio sí.

«X(t) es un número fijo»

X(t) es una variable aleatoria para cada t. Lo fijo es la observación x(t) una vez que el azar ya ocurrió.

«Más réplicas cambian el proceso»

Más réplicas mejoran la estimación, pero el proceso (p, λ, P) sigue igual. No confundir el microscopio con el objeto.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: leer un proceso

Ejecutá esta trayectoria empaquetada como tiempo + estados. Luego respondé: ¿cuál es T y cuál es S?

proceso = {
    "nombre": "Servidor por minutos",
    "tiempo": list(range(6)),
    "trayectoria": ["libre", "ocupado", "ocupado", "libre", "caído", "libre"],
}

print(proceso["tiempo"])
print(proceso["trayectoria"])
print("Estados distintos:", sorted(set(proceso["trayectoria"])))
Ver solución razonada

El tiempo es discreto T = {0,…,5} y el espacio es S = {libre, ocupado, caído}. La lista es una trayectoria; el proceso incluiría las probabilidades de pasar de un estado a otro (Tema 23).

Ejercicio 2: predecir la media

Sin ejecutar primero: si la caminata empieza en 0, p = 1 y hay 4 pasos, ¿qué trayectoria esperás? Después comprobalo con código.

import random

def simular_caminata(pasos, p=0.5, semilla=7):
    random.seed(semilla)
    x = 0
    historia = [x]
    for _ in range(pasos):
        x = x + 1 if random.random() < p else x - 1
        historia.append(x)
    return historia


print(simular_caminata(4, p=1.0))
Ver solución

Con p = 1 siempre se sube: [0, 1, 2, 3, 4]. El azar desaparece y el proceso se vuelve determinístico: un caso límite útil para verificar código.

Ejercicio 3: una réplica no alcanza

Generá 1000 réplicas de 20 pasos con p = 0,5 y promediá la posición final. ¿Cerca de qué valor cae? ¿Por qué?

Ver una posible respuesta
import random

random.seed(11)
finales = []
for _ in range(1000):
    x = 0
    for _ in range(20):
        x = x + 1 if random.random() < 0.5 else x - 1
    finales.append(x)

print(sum(finales) / len(finales))

Cae cerca de 0: cada paso vale +1 o −1 con igual chance, así que la esperanza por paso es 0 y en 20 pasos sigue 0. Con pocas réplicas el promedio fluctúa; con 1000 se estabiliza.

09 · Síntesis

Ideas para recordar

  • Un proceso estocástico es una familia X(t): tiempo + estado + regla de azar.
  • El tiempo puede ser discreto o continuo; el espacio de estados también.
  • Una trayectoria es una historia; el proceso es todas las historias con sus probabilidades.
  • En Python, una trayectoria es una lista y el proceso es el generador con semilla y parámetros.
  • Para estimar el proceso hacen falta muchas réplicas, no una sola.

En el próximo tema estudiaremos el estado de un sistema: cómo resumir en X(t) todo lo necesario para seguir la evolución.