01 · Punto de partida
La unidad mínima de la simulación
Un experimento aleatorio es un procedimiento que se puede repetir bajo las mismas condiciones, pero cuyo resultado individual es incierto: lanzar un dado, atender al próximo cliente, simular un día de demanda. Lo que sí es estable es el comportamiento en muchas repeticiones.
Cada corrida de tu simulador es un experimento aleatorio. Diseñarlo bien —qué se fija, qué se sortea, qué se registra— es lo que separa un script que «tira números» de un experimento que estima probabilidades (tema 5).
- ¿Qué se mantiene fijo y qué se sortea en cada repetición?
- ¿Cuál es el conjunto de todos los resultados posibles?
- ¿Qué anoto de cada repetición para poder resumir después?
- ¿Cuántas repeticiones necesito para que la frecuencia se estabilice?
02 · Definición
Experimento, resultado y espacio muestral
Experimento
Procedimiento repetible: «lanzar el dado», «simular un día con demanda U(6,14)». Las condiciones se escriben antes de ejecutar.
Resultado
Lo que sale una vez: ω = 4, demanda = 9,3. Un punto, no un resumen.
Espacio muestral
Todos los resultados posibles: Ω = {1,…,6}. Delimita qué puede pasar y qué no.
La frecuencia relativa fₙ es el puente entre experimento y probabilidad: cuántas veces salió lo que me interesa, dividido por repeticiones. Con pocas repeticiones salta; con muchas, se estabiliza cerca de la probabilidad teórica.
| Experimento | Resultado ω | Espacio muestral Ω |
|---|---|---|
| Lanzar un dado | 4 | {1, 2, 3, 4, 5, 6} |
| Cliente paga o no | éxito | {paga, no paga} |
| Demanda del día | 9,3 unidades | [6, 14] continuo |
| Llegadas en 1 hora | 7 clientes | {0, 1, 2, …} |
03 · Protocolo
Cómo diseñar un experimento que sí estima
Experimento débil
Sorteo sin registro
Corre unas veces, mira un número suelto y concluye. No se puede repetir ni comparar: cada ejecución cuenta otra historia.
Experimento sólido
Protocolo + réplicas + registro
Fija condiciones, define qué es éxito, repite N veces con semilla conocida y guarda cada resultado. Recién ahí resume.
- Protocolo
- Receta escrita: qué se sortea, con qué rango o distribución, cuántas veces y qué se mide.
- Repetición
- Cada ejecución individual del experimento bajo el mismo protocolo.
- Registro
- Lista de resultados crudos. Sin registro no hay histograma (tema 29) ni ajuste (tema 34).
- Frecuencia relativa
- Éxitos dividido por repeticiones. Estima la probabilidad cuando n es grande.
04 · Ejemplos
Experimentos que vas a programar
- 1Dado.
Ω = {1…6}. Éxito = «sale 6». Frecuencia ≈ 1/6 con muchas tiradas.
- 2Venta.
Ω = {compra, no compra}. Éxito = «compra». Estima la tasa de conversión.
- 3Día de demanda.
Ω = [6, 14]. Registro = total vendido. Estima promedio y dispersión.
- 4Hora de cola.
Ω = {0, 1, 2, …} llegadas. Éxito = «espera mayor a 10 min».
- 5Servidor.
Ω = tiempos de respuesta. Éxito = «responde en menos de 2 s».
05 · Representación en Python
Del experimento al registro
Un experimento es una función + un bucle que repite y guarda. La lista de resultados es tu materia prima estadística:
Python en tu navegador. Editá los rangos y el N, ejecutá de nuevo y compará frecuencias.
import random
random.seed(21)
# Experimento: lanzar un dado 12 veces
lanzamientos = [random.randint(1, 6) for _ in range(12)]
print(lanzamientos)
# Frecuencia relativa de "sale 6"
exitos = sum(1 for x in lanzamientos if x == 6)
print("f12:", exitos / len(lanzamientos))
Consejo: repetí con 12, 120 y 1200 lanzamientos y mirá cómo la frecuencia se acerca a 0,166.
Definir éxito con claridad
Todo experimento necesita una regla de éxito explícita. Sin ella no hay frecuencia que calcular:
import random
random.seed(8)
# Experimento: día de demanda U(6,14). Éxito = "vende más de 10"
def un_dia():
return random.uniform(6, 14)
dias = [un_dia() for _ in range(20)]
exito = [d > 10 for d in dias]
print("Éxitos:", sum(exito), "de", len(dias))
print("Frecuencia:", round(sum(exito) / len(dias), 3))
06 · Exploración
Laboratorio: la frecuencia se estabiliza
Repetimos el experimento «¿sale cara?» con probabilidad p durante N intentos. Las 3 curvas son 3 réplicas de la frecuencia acumulada. Con pocos intentos saltan; con muchos, se pegan a p.
Frecuencia relativa de éxitos
f(n) = éxitos hasta n / n → p
Con N grande, las 3 réplicas se acercan a p.
Cada curva muestra éxitos acumulados dividido por intentos. La línea blanca punteada es la probabilidad teórica p. Al aumentar N, el abanico se cierra: adelanto visual de la Ley de los Grandes Números (tema 15).
Preguntas para explorar
- Con N = 50, ¿qué tan separadas terminan las réplicas? ¿Y con N = 2000?
- Poné p = 0,5 y luego p = 0,1. ¿En cuál se estabiliza «más rápido» a ojo? ¿Por qué?
- ¿Qué le dirías a alguien que concluye con solo 20 repeticiones?
Ver respuestas sugeridas
- Con 50 hay abanico amplio (±0,1 o más); con 2000 las tres se pegan a p con desvío de centésimas.
- Cerca de 0,5 la variación absoluta se nota más; cerca de 0 o 1 el rango posible es menor. La estabilización real la mide el error estándar (tema 42).
- Que 20 repeticiones son una anécdota: la frecuencia todavía salta mucho y puede estar lejos de p.
07 · Comprensión
Confusiones frecuentes
«Si salió 5 veces seguidas, ya toca que salga lo otro»
No: en experimentos independientes (tema 7) la historia no empuja el próximo resultado. La frecuencia se estabiliza por volumen, no por compensación.
«Con 30 repeticiones ya estimo bien»
A veces sí, a veces no: depende de p y de la precisión que necesites. El N se justifica con error e intervalos (temas 33 y 42).
«El espacio muestral es obvio»
Escribir Ω evita errores: ¿el dado incluye el 0? ¿la demanda puede ser negativa? Lo obvio, escrito, se puede verificar.
«Guardo solo el promedio»
El promedio sin registro impide recalcular. Guardá la lista cruda: es barata y habilita todo el análisis posterior.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: frecuencia del 6
Lanzá el dado 30 y 3000 veces y compará la frecuencia del 6. ¿Cuál está más cerca de 1/6?
import random
def frec_seis(n, semilla):
random.seed(semilla)
exitos = sum(1 for _ in range(n) if random.randint(1, 6) == 6)
return exitos / n
print("n=30:", round(frec_seis(30, 1), 3))
print("n=3000:", round(frec_seis(3000, 1), 3))
print("teórico:", round(1/6, 3))
Ver solución razonada
Con n = 30 la frecuencia suele estar a décimas de 0,167; con n = 3000 cae a centésimas. Más repeticiones, menos salto: la intuición que formaliza la Ley de los Grandes Números.
Ejercicio 2: definir Ω y éxito
Para «tiempo de atención entre 2 y 8 minutos», escribí Ω y estimá P(tarda más de 6) con 1000 réplicas uniformes.
import random
random.seed(12)
# Omega = [2, 8] continuo. Éxito = tarda > 6
tiempos = [random.uniform(2, 8) for _ in range(1000)]
print("f:", round(sum(1 for t in tiempos if t > 6) / len(tiempos), 3))
print("teórico:", round((8 - 6) / (8 - 2), 3))
Ver solución
Ω = [2, 8]. La frecuencia ronda 0,333, igual que el cálculo (8−6)/(8−2). El experimento confirma la teoría; en temas 17 y 34 haremos el camino inverso: de datos a modelo.
Ejercicio 3: protocolo completo
Escribí un protocolo de 3 líneas para «probabilidad de quiebre con stock 100 en 10 días U(6,14)» y ejecútalo con 2000 réplicas.
Ver una posible respuesta
import random
random.seed(20)
# Protocolo: stock 100, 10 días U(6,14), éxito = stock < 0. N = 2000.
def quiebra():
s = 100
for _ in range(10):
s -= random.uniform(6, 14)
if s < 0:
return True
return False
N = 2000
print("P(quiebre):", round(sum(quiebra() for _ in range(N)) / N, 3))
Protocolo explícito, N grande y registro implícito en la suma. El resultado (~0,5) ya es una estimación publicable del riesgo, no una corazonada.
09 · Síntesis
Ideas para recordar
- Un experimento aleatorio se diseña, se repite y se resume con frecuencias.
- Ω define lo posible; el éxito define lo que contás.
- La frecuencia relativa con N grande estima la probabilidad.
- En Python: función de un intento + lista de N resultados + conteo.
- Guardá resultados crudos: habilitan histogramas, ajustes e intervalos.
En el próximo tema agruparemos resultados en eventos: conjuntos de Ω con operaciones para describir «lo que nos interesa».