01 · Punto de partida
R se calcula, no se adivina
¿10, 100 o 5000 corridas? La respuesta es las que pidan tu margen: con piloto de R₀ estimás s, con SE = s/√R proyectás, y parás cuando 2·SE ≤ E deseado. Pedir de menos es ruido; de más, cómputo tirado.
La regla de oro: R ≥ (2s/E)² para ±E al 95 %. Cuadruplicar afina a la mitad.
- ¿Qué margen E necesito para decidir?
- ¿Qué s da el piloto?
- ¿Qué R pide (2s/E)²?
- ¿Cuándo parar en secuencial?
02 · Definición
Piloto, SE y parada
Piloto
30–100 corridas para estimar s y orden de magnitud. Barato y orienta el R final.
Proyección
SE cae con √R. Con s = 8 y E = 1: R ≈ (16/1)² = 256.
Parada
Seguir hasta 2·SE ≤ E o tope de cómputo. Informar R, E y s finales.
| E | 4 | 2 | 1 | 0,5 |
|---|---|---|---|---|
| R | 16 | 64 | 256 | 1024 |
03 · Costo y estrategia
Precisión se compra cuadrática
Secuencial
Parar cuando alcanza
De a tandas (50): recalcular s y parar en E. No pagar de más cuando s sale chica.
Fijo justificado
R por fórmula
Con s conocida de pilotos previos: R directo con margen. Reproducible y presupuestable.
- Piloto
- R₀ = 50: s₀ orienta. Si s₀ salta, agrandar piloto antes de proyectar.
- Muestras comunes
- Mismas semillas A/B: comparan con menos R (tema 40 y 43).
- Calentamiento
- En sistemas con transitorio, descartar arranque: R mide régimen, no arranque.
- Tope
- Tiempo máximo: si no alcanza E, informar E logrado, no prometer.
04 · Ejemplos
R que alcanzan
- 1Ventas.
s = 8, E = 1 → R ≈ 256 corridas de 12 días.
- 2Espera.
s = 2, E = 0,2 → R ≈ 400 días simulados.
- 3Conversión.
p = 0,12, E = 0,01 → n ≈ 4000 visitas (tema 33).
- 4Juego.
s grande pide miles de peleas para balance fino.
- 5A/B.
Diferencia 2 con s = 8: R ≈ 250 por brazo para detectarla.
05 · Representación en Python
Piloto que pide R
Python en tu navegador. Del piloto al R final.
import random, statistics, math
random.seed(411)
tot = lambda: sum(random.uniform(6,14) for _ in range(12))
piloto = [tot() for _ in range(50)]
s = statistics.stdev(piloto)
E = 1.0
print("s:", round(s,2), "| R:", math.ceil((1.96*s/E)**2))
Consejo: con otro seed s ronda 8 y R 250: el piloto es estable para planificar.
Parada secuencial
import random, statistics
random.seed(3)
E, Rs, acc = 1.0, [], []
while True:
acc.append(sum(random.uniform(6,14) for _ in range(12)))
Rs.append(acc[-1])
if len(Rs) >= 30:
s = statistics.stdev(Rs)
if 1.96*s/(len(Rs)**0.5) <= E or len(Rs) >= 2000:
break
print("paró en:", len(Rs))
06 · Exploración
Laboratorio: bandas que piden R
Totales 12×U(6,14) (μ = 120, s ≈ 8). Curva = media acumulada; banda = ±2·SE(n) con s final. La línea punteada marca tu E objetivo: el R donde la banda entra en ±E es el R pedido.
Media ± 2SE(n)
R ≥ (2s/E)²
Con E = 1, R ≈ 250 alcanza; con 0,5 hacen falta ~1000.
Eje x 1 a R máx (log para ver el arranque). La banda se angosta como 1/√n.
Preguntas para explorar
- Con E = 2, ¿qué R pide? ¿Y con E = 0,5? ¿Factor?
- ¿Las 3 curvas entran en la banda al final? ¿Qué significa si una escapa?
- Si s fuera 16, ¿R para E = 1? ¿Por qué σ manda el costo?
Ver respuestas sugeridas
- ~64 y ~1024: 16× por 4× precisión. Costo cuadrático.
- Sí, ~95 % de las veces cada una. Si escapa mucho, revisar s o seed (pero 5 % falla por diseño).
- ~1024: doble σ exige 4× R. Reducir σ (muestras comunes, estratificar) abarata más que comprar R.
07 · Comprensión
Confusiones frecuentes
«R fijo de manual (100) sirve»
A veces sobra, a veces falta 10×. R sale de s y E, no de costumbre.
«Piloto de 10 alcanza»
s con 10 salta: proyecta cualquier cosa. Piloto 30–100 para s estable.
«Parar al ver estabilizado a ojo»
Sesga a rachas buenas. Regla 2SE ≤ E escrita antes.
«Más R arregla sesgo»
No: afina el número equivocado. Sesgo se corrige en modelo, no con R.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: R para E = 2 y 0,5
Con s = 8, calculá R con (1,96·s/E)². ¿Factor entre ambos?
import math
for E in [2, 0.5]:
print(E, math.ceil((1.96*8/E)**2))
Ver solución razonada
62 y 984: 16× por 4× precisión. Así se presupuesta cómputo.
Ejercicio 2: verificar piloto
Con 3 seeds, ¿s piloto de 50 cuánto varía? ¿R pedido cuánto?
import random, statistics, math
for seed in [1,2,3]:
random.seed(seed)
s = statistics.stdev(sum(random.uniform(6,14) for _ in range(12)) for _ in range(50))
# generator fix: list
random.seed(seed)
xs = [sum(random.uniform(6,14) for _ in range(12)) for _ in range(50)]
s = statistics.stdev(xs)
print(seed, round(s,2), math.ceil((1.96*s/1)**2))
Ver solución
s 7–9, R 200–300: el piloto orienta con ±30 %. Para afinar, piloto 100.
Ejercicio 3: tope de cómputo
Si el tope es R = 200 con s = 8, ¿E logrado? E = 1,96·s/√R.
Ver una posible respuesta
import math
print(round(1.96*8/math.sqrt(200),2))
E ≈ 1,11: informar «120 ± 1,1 (95 %, R = 200)». Honesto y útil aunque no llegue a 1.
09 · Síntesis
Ideas para recordar
- R = (z·s/E)²: E manda, s cuesta.
- Piloto 30–100 para s; secuencial con regla escrita.
- Cuadruplicar parte el error a la mitad.
- Muestras comunes y menos σ abaratan más que R.
- Informar R, s, E y seed: precisión reproducible.
En el próximo tema mediremos la precisión lograda: estimación del error.