01 · Punto de partida
El gráfico propone; el número firma
Histogramas y ECDF muestran; los números deciden: E[ganancia], P(quiebre), P(sobrante), desvío. Un stock se elige maximizando esperado con riesgo acotado, no mirando picos.
La receta: simular N demandas por stock S, calcular métricas y comparar. El S óptimo equilibra vender más contra sobrar más.
- ¿Qué vale E[ganancia] por S?
- ¿Qué P(quiebre) y P(sobrante) tolero?
- ¿El mejor promedio compensa su riesgo?
- ¿Con qué N e intervalo comparo S?
02 · Definición
Las 4 métricas que firman stock
Ganancia esperada
Promedio de p·mín(S,D) − c·S. Se maximiza en S*. Con p=10, c=6, D~U(80,140).
Quiebre
P(D mayor a S): pierde ventas. Baja al subir S. SLA típico: menor a 10 %.
Sobrante
P(D menor a S): sobra stock. Sube con S. Costo de desperdicio o capital.
| S | E[G] | P(Q) | P(S) |
|---|---|---|---|
| 100 | ~360 | ~0,67 | ~0,33 |
| 115 | ~395 | ~0,42 | ~0,58 |
| 130 | ~380 | ~0,17 | ~0,83 |
03 · Compromiso
Más stock: más ganancia hasta cierto punto
Subir S
Más ventas, más sobrante
Cada unidad extra vende con prob. P(D mayor a S) y sobra si no. El margen p−c paga el riesgo hasta S*.
Regla del óptimo
Fractil crítico
S* deja P(D ≤ S*) ≈ (p−c)/p = 0,4 aquí… con costos de faltante/sobrante se ajusta (fractil del vendedor).
- E[G]
- Objetivo a maximizar. Con N grande se estima fino (temas 15 y 42).
- Restricción
- P(Q) ≤ 10 % o P(S) ≤ 70 %: el negocio acota el riesgo aceptable.
- s[G]
- Desvío de la ganancia: dos S con igual E se desempatan por menor s.
- Sensibilidad
- Si p o c se mueven, S* se mueve: informar rango, no punto.
04 · Ejemplos
Números que eligen
- 1Stock.
S = 115 maximiza E ≈ 395 con P(Q) ≈ 42 %: si 42 % es mucho, subir a 125.
- 2Personal.
3 cajeros: espera 3 ± 2, P(mayor a 10) = 5 %. Con 2: P = 20 %. El número justifica el sueldo.
- 3Promesa.
47 min cumple 90 %; 35 solo 50 %. Prometer con cuantil, no con media.
- 4Precio.
Subir p sube E pero baja demanda: simular pares (p, S) y elegir máximo.
- 5Seguro.
Pagar costo fijo para podar cola: E baja poco, P(ruina) cae mucho.
05 · Representación en Python
Barrer S y tabular
Python en tu navegador. La tabla elige mejor que el ojo.
import random
random.seed(361)
p, c, N = 10, 6, 6000
Ds = [random.uniform(80, 140) for _ in range(N)]
for S in [100, 115, 130]:
Gs = [p*min(S, d) - c*S for d in Ds]
print(S, "E:", round(sum(Gs)/N), "| P(Q):", round(sum(1 for d in Ds if d > S)/N, 2))
Consejo: reutilizá las mismas Ds para los 3 S (muestras comunes): la comparación es más fina (tema 43).
Desvío desempatando
import statistics
# s[G] con S=115 vs 130 (mismas Ds del bloque anterior)
for S in [115, 130]:
Gs = [10*min(S, d) - 6*S for d in Ds]
print(S, round(statistics.stdev(Gs), 1))
06 · Exploración
Laboratorio: stock que maximiza con riesgo a la vista
Demanda U(80,140), p = 10, c = 6. Mové S: barras = histograma de G(S) en N réplicas; curva = E[G] barriendo S (calculada con las mismas demandas). La franja lima marca P(Q) ≤ 20 %.
G(S) = 10·mín(S,D) − 6·S
E máx · P(Q) acotado
El máximo ronda S = 116 con P(Q) ≈ 40 %: sin restricción quiebra mucho.
En curva se ve la joroba de E[G]: sube hasta S* y cae por sobrante. En histograma se ve la distribución del S elegido.
Preguntas para explorar
- ¿Qué S maximiza E? ¿Qué P(Q) tiene? ¿Lo aceptarías?
- ¿Qué S deja P(Q) ≈ 20 %? ¿Cuánto E se pierde vs el máximo?
- Si c sube a 8, ¿S* se mueve arriba o abajo? ¿Por qué?
Ver respuestas sugeridas
- S ≈ 116, E ≈ 395, P(Q) ≈ 40 %: quiebra muchísimo para un comercio real.
- S ≈ 128, E ≈ 385: se pierden ~10 por bajar quiebre a la mitad. Precio del servicio.
- Abajo: sobrar duele más (c mayor), así que se compra menos. El fractil (p−c)/p cae.
07 · Comprensión
Confusiones frecuentes
«Máximo E siempre se elige»
No sin restricción de riesgo: el máximo puro suele quiebrar demasiado. Se maximiza con P(Q) acotado.
«P(Q) chica siempre conviene»
Llevarla a 1 % cuesta sobrante enorme: el seguro total sale más que los quiebres que evita.
«s[G] no importa si E es alto»
Dos S con igual E se desempatan por s: menos dispersión = caja predecible.
«Óptimo puntual»
S* se mueve con p, c y demanda: informar rango robusto (115–125 rinden parecido), no fetiche.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: tabla de 3
Con las Ds del bloque Python, tabulá S = 100, 115, 130 con E, P(Q) y P(S).
# Reusar Ds del bloque anterior (N=6000)
for S in [100, 115, 130]:
Gs = [10*min(S,d)-6*S for d in Ds]
print(S, round(sum(Gs)/len(Gs)), round(sum(1 for d in Ds if d>S)/len(Ds),2), round(sum(1 for d in Ds if d<S)/len(Ds),2))
Ver solución razonada
E ≈ 360/395/380, P(Q) ≈ 0,67/0,42/0,17. El 115 gana en E pero quiebra 42 %: con tope 20 % se elige ~128.
Ejercicio 2: fractil crítico
Con p = 10, c = 6, ¿fractil (p−c)/p? ¿S* = 80 + 60·fractil? Verificá.
print("fractil:", (10-6)/10, "| S*:", 80+60*0.4)
Ver solución
0,4 → S* = 104… pero la sim da ~116: la fórmula clásica con costo de sobrante c y faltante p−c da (p−c)/p = 0,4 → cuantil 0,4 = 104. La diferencia es costo de sobrante vs compra: revisar costos (el laboratorio maximiza directo, sin atajos).
Ejercicio 3: intervalo de E
Con S = 115 y N = 4000, ¿E ± 2·s/√N? ¿Se distingue de S = 120?
Ver una posible respuesta
import statistics
S = 115
Gs = [10*min(S,d)-6*S for d in Ds]
m, s, n = sum(Gs)/len(Gs), statistics.stdev(Gs), len(Gs)
print(round(m-2*s/n**0.5), round(m+2*s/n**0.5))
Intervalo de ±3–4: 115 vs 120 (difieren ~2) empatan estadísticamente: meseta, no pico. Elegir por riesgo, no por 2 pesos.
09 · Síntesis
Ideas para recordar
- G(S) = p·mín(S,D) − c·S; se maximiza E[G] con P(Q) acotado.
- Tabla S, E, s, P(Q), P(S) + intervalo: informe que decide.
- Mismas Ds para comparar S (muestras comunes afinan).
- Meseta, no pico: rango robusto mejor que S* fetiche.
- Costos mueven S*: sensibilidad antes de comprar.
En el próximo tema las variables se mueven juntas: dependencia entre variables.