xellstorm
ES
Abrir la app

¿Cuántas unidades conviene pedir cuando la demanda es incierta?

Ejemplo resuelto · Cantidad de pedido · Actualizado en octubre de 2026

La cantidad que conviene pedir es la que la demanda no supera el 66,7 % de las veces: el fractil crítico. Con una demanda media de 1000 unidades (desviación estándar 200) y cada unidad vendida a 10, con un costo de 4 y un valor de rescate de 1 si sobra, son 1086,1 unidades, con una ganancia esperada de 5345,5. Una búsqueda Monte Carlo en el archivo de ejemplo elige 1090, el paso más cercano a ese óptimo.

El fractil crítico es el punto en que la probabilidad de vender una unidad más, multiplicada por lo que deja, iguala justo la probabilidad de que sobre, multiplicada por lo que pierde; cuando una venta perdida cuesta más de lo que cuesta una unidad sobrante, ese punto queda por encima de la mediana de la demanda, el nivel que se supera la mitad de las veces. En este ejemplo la demanda es normal, así que su mediana es su media, y los importes están en la moneda del archivo. La búsqueda recorre pedidos de 600 a 1600 unidades en pasos de 10; con 1090 la ganancia media es 5345 ± 31 (intervalo del 95 %, 5000 temporadas simuladas), y la demanda supera el inventario en el 32,6 % de las temporadas.

El modelo

Es el problema del vendedor de periódicos (newsvendor): se hace un único pedido antes de la temporada de ventas, la demanda solo se conoce como un rango de posibilidades, lo que no se vende se liquida barato al final y la demanda que excede el pedido se pierde. El archivo tiene una sola hoja, Model, con las etiquetas en la columna A y los valores en la columna B:

Las cifras del ejemplo (importes en la moneda del archivo)
Cantidad de pedido, B11000 unidades (la decisión)
Precio, B210 por unidad vendida
Costo unitario, B34 por unidad pedida
Valor de rescate, B41 por unidad sobrante
Demanda, B6normal, media de 1000 unidades, desviación estándar de 200

Cuatro fórmulas convierten un pedido y una demanda en el resultado de la temporada: las unidades vendidas, Sold, =MIN(B1,B6); las unidades sobrantes, Leftover, =MAX(B1-B6,0); la ganancia, Profit, =B2*B8+B4*B9-B3*B1, es decir, ventas más valor de rescate menos el costo del pedido completo; y las ventas perdidas, Lost sales, =MAX(B6-B1,0), la demanda que el pedido no alcanzó a cubrir. Aquí, un desabastecimiento es una temporada con ventas perdidas: la demanda supera el pedido. No hay funciones de complementos.

El archivo descargable trae estas fórmulas, el pedido de 1000 unidades y un valor fijo provisional en la celda de la demanda. La distribución de la demanda, las dos salidas (Profit y Lost sales), el objetivo de desabastecimiento y el estudio de optimización se definen en xellstorm y se cargan con el ejemplo, aparte del archivo, que queda tal como usted lo habría armado.

En principio, una distribución normal admite demandas negativas, pero el cero está a 5 desviaciones estándar por debajo de la media: una probabilidad de aproximadamente 1 en 3,5 millones. La menor de las 5000 demandas simuladas es de 200 unidades. La demanda es un número continuo, así que las ventas, los sobrantes y el pedido de la búsqueda de objetivo (más abajo) pueden salir con fracciones de unidad; al hacer el pedido, redondee a unidades enteras.

¿Por qué pedir más que la demanda promedio?

Piense en la última unidad del pedido. Si se vende, gana el precio menos su costo: 10 − 4 = 6. Si sobra, pierde su costo menos el valor de rescate: 4 − 1 = 3. Pedir una unidad más conviene mientras su probabilidad de venderse, multiplicada por 6, sea mayor que su probabilidad de sobrar, multiplicada por 3: es decir, mientras la probabilidad de venderla supere 3 / (6 + 3) = 33,3 %. Con un pedido igual a la demanda promedio, 1000 unidades, la siguiente unidad se vende la mitad de las veces, así que conviene pedir más. Deja de convenir cuando la demanda queda por debajo del pedido en el 66,7 % de los casos.

La simulación muestra esa misma aritmética temporada por temporada. En las mismas 5000 temporadas simuladas, pedir 1090 unidades en lugar de 1000 da exactamente 540 más (90 × 6) en el 32,6 % de las temporadas, aquellas en que la demanda llega a 1090, y exactamente 270 menos (90 × 3) en el 50 % en que se queda en 1000 o menos; en las temporadas intermedias, la diferencia cae entre las dos cifras. En promedio, el pedido mayor gana 63,5 más por temporada, como indica la fórmula exacta de más abajo (63,5).

La solución exacta: el fractil crítico

La regla tiene un nombre, el fractil crítico: el mejor pedido Q* es el nivel de demanda que no se supera con probabilidad (precio − costo) / (precio − valor de rescate), aquí (10 − 4) / (10 − 1) = 0,667. Para una demanda normal, Q* = media + z × desviación estándar, donde z = 0,4307 es el punto de la distribución normal estándar que deja 66,7 % por debajo (=NORM.S.INV(6/9) en Excel). Así, Q* = 1000 + 0,4307 × 200 = 1086,1 unidades.

La ganancia esperada también tiene una forma cerrada. Para cualquier pedido Q, con z = (Q − media) / desviación estándar, es (precio − valor de rescate) × (media − desviación estándar × L(z)) − (costo − valor de rescate) × Q, donde L(z) = φ(z) − z × (1 − Φ(z)) es la función de pérdida de la normal estándar, con φ la densidad normal estándar y Φ su distribución acumulada (en Excel, =NORM.S.DIST(z,FALSE)-z*(1-NORM.S.DIST(z,TRUE))); desviación estándar × L(z) son las ventas perdidas esperadas. En Q* esto se reduce a (precio − costo) × media − (precio − valor de rescate) × desviación estándar × φ(z) = 5345,5, y la probabilidad de desabastecimiento es 1 − 0,667 = 33,3 %. Pedir en cambio la demanda promedio de 1000 unidades da una ganancia esperada de 5281,9.

Búsqueda de la cantidad de pedido por simulación

Las fórmulas exigen un modelo tan simple como este (un producto, un pedido, precios fijos) y una distribución de la demanda cuyos cuantiles y ventas perdidas esperadas tengan fórmula; una simulación solo necesita una manera de generar la demanda, y este ejemplo comprueba que da el mismo resultado. El estudio de optimización que se carga con el ejemplo toma como decisión la cantidad de pedido (B1) y prueba todos los pedidos de 600 a 1600 unidades en pasos de 10 (101 candidatos) para maximizar la media de Profit. Hay una restricción: la probabilidad de desabastecimiento, es decir, la proporción de iteraciones con Lost sales superior a cero, no puede pasar del 50 %. Cada candidato se simula con 1000 iteraciones, los tres mejores se vuelven a ejecutar con 5000, y todas las ejecuciones usan los mismos valores aleatorios de demanda. Estos números aleatorios comunes hacen que los candidatos difieran solo por el pedido y no por la suerte de los valores simulados.

Ganancia media por cantidad de pedidoGanancia media de 1000 temporadas simuladas para cada cantidad de pedido de 600 a 1600 en pasos de 10, con su intervalo de 95 % como banda y la ganancia esperada exacta como línea discontinua. En la búsqueda, la curva alcanza su máximo en 1100 unidades; la nueva ejecución con 5000 iteraciones elige 1090, con una ganancia media de 5345.350040004500500055006008001000120014001600Mejor 1090Discontinua: exacta
Ganancia media por temporada frente a la cantidad de pedido, en unidades: 1000 temporadas simuladas por pedido (línea continua) con su intervalo de 95 % (banda) y la ganancia esperada exacta según la fórmula normal (discontinua). La línea punteada marca el pedido que gana en la nueva ejecución con 5000 iteraciones.
Mejores cantidades de pedido, ejecutadas de nuevo con 5000 iteraciones (ganancia media con su intervalo de 95 %)
Pedido, unidadesGanancia mediaGanancia esperada exactaProbabilidad de desabastecimiento
10905345 ± 315345,432,6 %
11005344 ± 315344,030,9 %
11105341 ± 325340,929,1 %

La nueva ejecución elige 1090 unidades: una ganancia media de 5345 ± 31, frente a un valor exacto de 5345,4 con ese pedido, y un desabastecimiento en el 32,6 % de las temporadas (valor exacto: 32,6 %). Es el paso más cercano al óptimo exacto de 1086,1, y la ganancia esperada exacta de 5345,5 queda dentro de su intervalo.

Los intervalos de los tres mejores pedidos se superponen casi por completo, y aun así el ganador es claro. Cada intervalo es la estimación que hace xellstorm del ruido de la media de ese candidato, según cuánto varía la media entre 20 lotes de sus iteraciones. Con el muestreo de hipercubo latino, el que xellstorm usa por defecto y que reparte los valores de cada ejecución de manera pareja sobre la distribución de la demanda, la media de una ejecución completa es incluso más estable de lo que sugiere su intervalo: con otras 3 semillas, la ganancia media con 1090 unidades queda a menos de 0,2 de la de esta ejecución.

Lo que decide entre los candidatos es su diferencia, y como los mismos valores aleatorios empujan a todos hacia arriba o hacia abajo a la vez, las diferencias son mucho más estables que los intervalos. Comparados temporada por temporada, 1090 supera a 1100 en 1,43 (intervalo del 95 %: de 0,47 a 2,39), un intervalo que excluye el cero: mejor, y no por azar, pero por poco. La diferencia exacta en la ganancia esperada es 1,43. Cerca del máximo la curva de ganancia es plana, así que errar por un paso casi no cuesta nada; en los extremos del rango, 600 y 1600 unidades, la ganancia esperada baja a 3585 y 4199.

En la búsqueda en sí, el primero fue 1100, con una ganancia media de 5370,3 frente a 5369,9 para 1090. La búsqueda usa solo las primeras 1000 de las 5000 iteraciones, y estas resultan tener algo más de demanda, 1003,7 unidades en promedio frente a 1000,0 en el total, lo que favorece a los pedidos mayores cerca del máximo y sube el pico un paso. La nueva ejecución con 5000 iteraciones lo resuelve, y xellstorm avisa cuando esa nueva ejecución cambia al ganador.

La restricción, y lo que cuesta tener menos desabastecimientos

La restricción de desabastecimiento no limita aquí. Descarta los pedidos de 1000 unidades o menos (con 1000, el 51,6 % de las iteraciones de la búsqueda se queda sin existencias): con una demanda normal, un pedido igual a la media se queda sin existencias la mitad de las veces. El mejor pedido ya baja la probabilidad de desabastecimiento a 32,6 %.

Probabilidad de desabastecimiento por cantidad de pedidoProporción de las 1000 temporadas simuladas en que la demanda supera el pedido, para cada cantidad de pedido, con su intervalo de 95 % como banda y la probabilidad exacta como línea discontinua; el límite de la restricción (50 %) es una línea punteada. Con el mejor pedido, 1090 unidades, la probabilidad es 32,6 % (con 5000 iteraciones); la búsqueda de objetivo da una probabilidad de 10 % con 1256,25 unidades.0 %25 %50 %75 %100 %6008001000120014001600Límite 50 %Mejor 1090Discontinua: exacta10 % en 1256
Probabilidad de desabastecimiento (demanda superior al pedido) frente a la cantidad de pedido: 1000 temporadas simuladas por pedido (línea continua, con su banda de 95 %), la probabilidad exacta (discontinua), el límite del estudio, 50 % (punteada), y el resultado de la búsqueda de objetivo para 10 %.

Si quedarse sin existencias en el 32,6 % de las temporadas es demasiado, por ejemplo porque los clientes que encuentran el estante vacío no vuelven, elija la probabilidad que acepta y deje que la búsqueda de objetivo encuentre el pedido. La búsqueda de objetivo de xellstorm reduce a la mitad el rango de pedidos una y otra vez hasta que el estadístico alcanza el objetivo. Con 5000 iteraciones por evaluación encuentra 1256,25 unidades tras 7 evaluaciones, pedido con el que se queda sin existencias exactamente el 10 % de las iteraciones. La solución exacta es el nivel de demanda que no se supera con una probabilidad del 90 %, 1000 + 200 × NORM.S.INV(0.9) = 1256,3 unidades.

Pedidos de 1000 unidades (la demanda media), 1090 (la mayor ganancia media) y 1256,25 (con una probabilidad de desabastecimiento de 10 %) en las mismas 5000 temporadas simuladas
Pedido, unidades100010901256,25
Ganancia media528253455146
Ganancia en P10369534252926
Probabilidad de desabastecimiento50 %32,6 %10 %
Unidades sobrantes en promedio80133266
Ventas perdidas en promedio, unidades80439

Bajar la probabilidad de desabastecimiento de 32,6 % a 10 % obliga a pedir 166 unidades más, de las que sobran 133 en una temporada promedio, y cuesta 199 de ganancia media por temporada (3,7 %; la diferencia exacta en la ganancia esperada entre los dos pedidos es 199,4). También baja la ganancia en P10, el nivel que alcanza el 90 % de las temporadas, de 3425 a 2926: en una temporada floja, un pedido mayor deja más existencias sin vender (vea P50, P80 y P90). Pedir solo la demanda promedio da la mayor ganancia en P10 de los tres, pero se queda sin existencias en el 50 % de las temporadas. Si compensa el precio de tener menos desabastecimientos es una decisión de negocio; la simulación le pone cifra a ese precio.

Pruébelo usted mismo

  1. Abra el modelo en xellstorm. La distribución de la demanda, las salidas Profit (ganancia) y Lost sales (ventas perdidas), el objetivo (Lost sales superior a cero, la probabilidad de desabastecimiento) y el estudio de optimización ya vienen definidos; no hay que instalar nada ni registrarse, y el archivo se calcula en el navegador.
  2. Ejecútelo. Con el pedido guardado de 1000 unidades, la semilla del ejemplo (7) y 5000 iteraciones, la ganancia media es 5282 y la probabilidad de desabastecimiento, 50 %.
  3. Abra el paso Optimize (optimizar). La cantidad de pedido (Model!B1) es la celda de decisión, de 600 a 1600 en pasos de 10; el objetivo maximiza la media de Profit, y la restricción limita a 50 %, como máximo, la probabilidad de que Lost sales supere cero. Pulse Optimize: la aplicación evalúa cada pedido con 1000 iteraciones, vuelve a ejecutar los tres mejores con 5000, compara al ganador con el segundo iteración por iteración y grafica la ganancia media por cantidad de pedido con su banda del 95 %.
  4. Para el pedido con una probabilidad de desabastecimiento de 10 %, elija Goal seek (búsqueda de objetivo): defina el estadístico como Probability, la condición como > con umbral 0 sobre Lost sales y el objetivo como 0,1; borre el campo Step de la cantidad de pedido (el estudio lo dejó en 10), fije Trials per evaluation en 5000 y pulse Seek goal.
  5. Pulse Set as fixed cells (fijar como celdas fijas) y ejecute de nuevo la simulación para ver los resultados completos con el pedido elegido, o Add as scenario (agregar como escenario) para compararlo con el pedido guardado con los mismos valores aleatorios.

¿Se puede hacer esto solo con Excel?

En este caso exacto, sí: con una demanda normal, =NORM.INV((B2-B3)/(B2-B4), 1000, 200) devuelve directamente el pedido del fractil crítico, 1086,1. Para una demanda sesgada se cambia NORM.INV por la inversa de esa distribución (LOGNORM.INV, GAMMA.INV o PERCENTILE.INC sobre las ventas pasadas), pero la regla deja de valer cuando varios productos comparten un presupuesto o un almacén, hay un tamaño mínimo de pedido o un precio rebajado depende de cuánto sobra. Una simulación sí resuelve esos casos, pero optimizar un modelo simulado solo con Excel es engorroso: cada recálculo genera números aleatorios nuevos, así que una tabla de datos o Solver comparan cantidades de pedido con valores distintos y acaban persiguiendo el ruido. Evaluar todos los candidatos con un mismo conjunto fijo de valores aleatorios es lo que hace xellstorm. Simulación Monte Carlo en Excel muestra el enfoque general.

Preguntas

¿Qué es el modelo del vendedor de periódicos?

El modelo del vendedor de periódicos es el problema clásico de elegir cuánto almacenar para un único período de ventas antes de conocer la demanda, cuando las unidades sobrantes se liquidan por debajo del costo y la demanda que excede las existencias se pierde. Su mejor pedido es el fractil crítico de la demanda: la cantidad que la demanda no supera con probabilidad (precio − costo) / (precio − valor de rescate). El nombre viene de un vendedor de periódicos que decide cada mañana cuántos ejemplares comprar; el mismo problema se presenta con productos de temporada, alimentos frescos, capacidad para eventos y tiradas de producción únicas. Para existencias que se reponen una y otra vez, vea qué punto de reorden equilibra el costo y los desabastecimientos.

¿Cuándo es el mejor pedido inferior a la demanda promedio?

El mejor pedido es inferior a la demanda promedio cuando una unidad sobrante cuesta más de lo que deja de ganarse con una venta perdida, es decir, cuando el costo unitario menos el valor de rescate es mayor que el precio menos el costo unitario. Entonces el fractil crítico es menor que un medio, y para una distribución de la demanda simétrica, como la normal, el mejor pedido es inferior a la media. Los márgenes estrechos y las existencias sin vender que no valen nada reducen el pedido; los márgenes altos y un buen valor de rescate lo elevan.

¿Por qué evaluar cada cantidad de pedido con los mismos números aleatorios?

Evaluar cada cantidad de pedido sobre la misma demanda simulada, lo que se conoce como números aleatorios comunes, hace que las diferencias entre candidatos provengan solo de los pedidos. En este ejemplo los intervalos del 95 % de los tres mejores pedidos se superponen casi por completo, y sin embargo la diferencia temporada por temporada entre los dos mejores tiene un intervalo de 0,47 a 2,39, que excluye el cero. Con un muestreo Monte Carlo simple, generar valores nuevos para cada candidato haría que la búsqueda persiguiera el ruido: medir la diferencia entre estos dos pedidos con la misma precisión requeriría unas 2000 veces más iteraciones que con valores comunes.

¿Y si la demanda no es normal?

Si la demanda no es normal, el fractil crítico sigue valiendo, pero el pedido debe salir de la función de cuantiles de esa distribución, y fórmulas como la de la ganancia esperada de más arriba dejan de valer. Una simulación solo necesita la distribución misma: en xellstorm, elija otra distribución para la celda de la demanda, como lognormal, gamma, PERT, Poisson o binomial negativa, ajuste una a las ventas pasadas en el paso Distributions, o deje que el archivo calcule la demanda a partir de otras entradas inciertas, y luego ejecute la misma optimización.

Relacionados

xellstorm es una herramienta de simulación Monte Carlo para modelos de Excel que funciona en el navegador: sin complemento, y el archivo nunca sale de su equipo.