Fórmula Óptima del Nivel de Servicio (Supply Chain)

learn menu
Por Joannès Vermorel, última revisión en enero 2012

Nivel de servicio (inventario) representa la probabilidad esperada de no enfrentar un faltante de stock. Este porcentaje es necesario para calcular el stock de seguridad. Intuitivamente, el nivel de servicio representa un compromiso entre el coste del inventario y el coste de los faltantes de stock (los cuales implican ventas perdidas, oportunidades perdidas y frustración del cliente, entre otros). En este artículo, se detalla cómo optimizar el valor del nivel de servicio. Luego, el análisis se refina para el caso especial de alimentos perecederos.

El artículo ha sido escrito desde un punto de vista de forecasting clásico allá por 2011. Sin embargo, unos años después, ahora nos damos cuenta de que existen opciones mucho mejores desde la perspectiva de la Supply Chain Quantitativa que eliminan por completo la necesidad de optimizar los niveles de servicio cuando la tecnología está potenciada por pronosticos probabilísticos.

Modelo y fórmula

La literatura clásica de supply chain es algo imprecisa en cuanto a los valores numéricos que se deben adoptar para el nivel de servicio. A continuación, proponemos calcular un nivel de servicio óptimo modelando el coste respectivo del inventario y de los faltantes de stock.

Introduzcamos las siguientes variables:

  • $${p}$$ es el nivel de servicio, es decir, la probabilidad de no tener un faltante de stock.
  • $${H}$$ es el coste de mantenimiento por unidad durante el tiempo de entrega (1).
  • $${M}$$ es el coste marginal por unidad de un faltante de stock (2).

Descargar hoja de Excel: service-level-formula.xlsx (cálculo ilustrado)

(1) El alcance temporal considerado aquí es el tiempo de entrega. Por lo tanto, en lugar de considerar el coste anual de mantenimiento habitual $${H_y}$$, estamos considerando $${H = \frac{d}{365}H_y}$$ asumiendo que $$d$$ es el tiempo de entrega expresado en días.

(2) El coste del faltante de stock incluye como mínimo el margen bruto, es decir, la ganancia instantánea que se habría generado si no se hubiese producido el faltante de stock. Sin embargo, la pérdida del margen bruto no es el único coste: por ejemplo, la frustración del cliente y la pérdida de lealtad del cliente también deben tenerse en cuenta. Como regla general, hemos observado que muchos minoristas de alimentos consideran que $${M}$$ equivale a 3 veces el margen bruto.

El nivel de servicio óptimo está dado por (el razonamiento se detalla a continuación):

$${p=\Phi\left(\sqrt{2\ln\left(\frac{1}{\sqrt{2\pi}}\frac{M}{H}\right)}\right)}$$

Donde $${\Phi}$$ es la función de distribución acumulada asociada a la distribución normal. Este valor se puede calcular fácilmente en Excel, ya que $${\Phi}$$ es la función NORMSDIST. Además, para efectos del cálculo numérico: $${\sqrt{2 \pi} \approx 2.50}$$

Función de coste

Para modelar la función de coste, introduzcamos dos variables más:

  • $${Q}$$ es la cantidad de inventario amortizada (3), una función que depende de $${p}$$.
  • $${O}$$ es la demanda media excedente cuando se produce un faltante de stock.

(3) Aquí adoptamos un enfoque de Amortized Analysis. El nivel de inventario varía constantemente, pero nuestro objetivo, para hacer práctico el análisis, es obtener un valor de nivel de servicio que esté desacoplado de la propia previsión de la demanda. Por ello, asumiremos que $${Q}$$ es igual al punto de reorden (consulta nuestra guía sobre stock de seguridad para más detalles).

Para un nivel de servicio dado, el coste total $${C(p)}$$ que combina tanto el coste de mantener inventario como el de los faltantes de stock se puede escribir:

$${C(p) = Q(p)H + (1-p)MO}$$

Donde $${Q(p)H}$$ es el coste del inventario y $${MO}$$ es el coste del faltante de stock, que ocurre solo con una probabilidad de $${1-p}$$. Usando la fórmula introducida en nuestro tutorial sobre stock de seguridad, y dado que $$Q(q)$$ equivale al punto de reorden, tenemos $${Q(p) = Z + \sigma \Phi^{-1}(p)}$$, donde $${Z}$$ es la demanda de tiempo de entrega, $${\sigma}$$ es el error de forecast esperado y $${\Phi(p)^{-1}}$$ es la inversa de la función de distribución acumulada asociada a la distribución normal estándar (media cero y varianza uno).

Análisis de ventas perdidas promedio

El análisis de $${O}$$, las ventas perdidas promedio, es sutil. Considerando que la distribución de la demanda es la distribución normal $${\mathcal{N}}$$ y que $${q}$$ es el inventario disponible, $${O(q)}$$ es la media condicional de la demanda $${x}$$ cuando $${x > q}$$ (restando el inventario disponible $${q}$$), es decir:

$${O(q)=\frac{\int_q^\infty{x\mathcal{N}(x)dx}}{\int_q^\infty{\mathcal{N}(x)dx}}-q=\frac{1}{q}+\mathcal{o}\left(\frac{1}{q}\right)}$$

Consulta la función en (1).

Este resultado se puede interpretar de la siguiente manera: si la demanda sigue rigurosamente la distribución normal, entonces la cantidad promedio de ventas perdidas en el evento (condicional) de un faltante de stock converge rápidamente a cero a medida que crece el inventario.

Sin embargo, según nuestra experiencia, el error en el forecast no converge tan bien como lo predeciría la distribución normal. Por ello, a continuación, asumiremos que $${O=\sigma}$$, es decir, que la cantidad promedio de ventas perdidas es igual al error de forecast promedio. Obviamente, esto es más una regla empírica que un análisis en profundidad; pero hemos comprobado que, en la práctica, esta aproximación ofrece resultados razonables.

Minimización de la función de coste

Aplicando las sustituciones definidas anteriormente a la expresión de $${C(p)}$$, obtenemos:

$${C(p) = \left(Z + \sigma \Phi^{-1}(p)\right)H + (1-p)M\sigma}$$

Luego, la expresión $${C(p)}$$ se puede diferenciar respecto a $${p}$$ mediante:

$${\frac{\partial C}{\partial p} = \sigma H \partial \Phi^{-1}(p) - \sigma M}$$

Dado que buscamos el valor mínimo, tratamos de resolver $${\frac{\partial C}{\partial p} = 0}$$, lo que da:

$${\sigma H \partial \Phi^{-1}(p) - \sigma M = 0}$$

Lo que se puede simplificar dividiendo por $${\sigma}$$, con:

$${H \partial \Phi^{-1}(p) - M = 0}$$

Y finalmente:

$${\partial \Phi^{-1}(p) = \frac{M}{H}}$$

Luego, utilizaremos la relación entre $${\partial \Phi^{-1}}$$ y $${\Phi^{-1}}$$:

$${\partial \Phi^{-1}(p)=\sqrt{2\pi}e^{\frac{1}{2}\Phi^{-1}(p)^2}}$$

Para una demostración visual de la igualdad, puedes comparar (1) y (2).

Esta relación nos permite obtener:

$${\sqrt{2\pi}e^{\frac{1}{2}\Phi^{-1}(p)^2}=\frac{M}{H}}$$

$${\frac{1}{2}\Phi^{-1}(p)^2=\ln\left(\frac{1}{\sqrt{2\pi}}\frac{M}{H}\right)}$$

Tomamos la solución de raíz positiva de la ecuación (la raíz negativa corresponde a un máximo local de la función) con:

$${\Phi^{-1}(p)=\sqrt{2\ln\left(\frac{1}{\sqrt{2\pi}}\frac{M}{H}\right)}}$$

Y finalmente, aplicando $${\Phi}$$ a ambos lados, obtenemos el nivel de servicio óptimo con:

$${p=\Phi\left(\sqrt{2\ln\left(\frac{1}{\sqrt{2\pi}}\frac{M}{H}\right)}\right)}$$

Discusión de la fórmula

El primer aspecto interesante de la fórmula es que el nivel de servicio óptimo solo depende de $${H}$$ (coste del inventario) y $${M}$$ (coste del faltante de stock). Sin embargo, existe una dependencia implícita respecto al tiempo de entrega, ya que $${H}$$ se ha definido como el coste de mantenimiento durante la duración del tiempo de entrega.

En segundo lugar, un mayor coste del inventario reduce el nivel de servicio óptimo; y de manera similar, un mayor coste del faltante de stock aumenta el nivel de servicio. Este comportamiento es bastante intuitivo porque el nivel de servicio es un compromiso entre tener más inventario y sufrir más faltantes de stock.

Entonces, la fórmula no es válida para todos los valores de $${M}$$ y $${H}$$. Se requiere que $${\sqrt{2\pi}\frac{M}{H} > 1}$$ o, de lo contrario, el logaritmo producirá un valor negativo que no es tratable considerando la raíz cuadrada externa. Esto implica que $${M > \sqrt{2 \pi} H}$$, lo que puede aproximarse como $${M > 2.5 H}$$. Si esta condición no se verifica, entonces significa que la función de coste inicial $${C(p)}$$ no tiene un mínimo, o más bien, que el mínimo es $${-\infty}$$ para $${p=0}$$. Desde un punto de vista práctico, $${M < 2.5 H}$$ podría interpretarse como una situación patológica en la que el nivel de inventario más rentable es tener inventario cero (es decir, 100% faltantes de stock).

Ejemplo práctico

Consideremos un envase de leche de 1L con un precio de venta de 1,50€ vendido con un margen del 10% (es decir, 0,15€ de margen bruto). Asumamos que el tiempo de entrega es de 4 días. El coste anual de mantenimiento es de 1,50€ (el valor es alto porque la leche es un producto altamente perecedero). Asumimos que el coste del faltante de stock es 3 veces el margen bruto, es decir, 0,45€. Esto da $${M=0.45}$$ y $${H=\frac{4}{365} 1.5\approx 0.0055}$$.

Con base en esos valores y en la fórmula para el nivel de servicio óptimo obtenida anteriormente, se obtiene $$ p \approx 98.5 \text{%} $$, que es un valor típico para productos frescos imprescindibles almacenados en almacenes que abastecen redes de supermercados.

Alimentos perecederos

Pregunta formulada por Vyacheslav Grinkevych, experto en supply chain, 2012-02-13:

Estoy trabajando en Forecasting y Supply Planning para productos lácteos de corta vida, donde el nivel de servicio óptimo es un asunto muy importante. El componente más interesante y complicado aquí es H – el coste de mantenimiento y la cuestión de su valor adecuado en la práctica.

Por ejemplo, para productos lácteos de corta vida una de las partes importantes de H no debería ser solo el coste financiero del efectivo inmovilizado en inventario y el coste operativo de almacenamiento logístico, sino también el coste de pérdidas potenciales debido a la baja de productos expirados o ventas con descuentos cuando se intenta liquidar más justo antes de la fecha de caducidad. Esto ocurre cuando las ventas están muy por debajo del forecast.

Este compromiso puede describirse como el riesgo de potencial sobrestock vs. el riesgo de potencial faltante de stock – dos riesgos que actúan en direcciones opuestas, aunque tienen el mismo origen por naturaleza – es decir, están interconectados con el stock de seguridad. En caso de un gran sobreforecast, que generalmente causa problemas de expiración, los errores en el forecast no se distribuyen normalmente. Por lo tanto, me pregunto cómo expresar mejor tales riesgos potenciales de sobrestock.

Volviendo a tu fórmula, su desarrollo posterior podría ser intentar encontrar una relación entre H y p o hacer que H sea una función de p, es decir, H(p), antes de proceder a la minimización del coste total C(p). ¿Qué opinas al respecto?

La fórmula del nivel de servicio presentada anteriormente se basa, en efecto, en una asunción simplista en la que los costes, tanto de almacenamiento como de los faltantes de stock, son estrictamente lineales. Sin embargo, en la práctica, se pueden encontrar no linealidades bruscas tales como:

  • El almacén está lleno, y existe un punto en el que una unidad extra de inventario implica en realidad una carga masiva adicional de obtener una ubicación extra de almacenamiento.
  • Los faltantes de stock provocan ventas perdidas incrementales hasta el punto en el que un faltante adicional ocasiona la pérdida de todo el cliente recurrente.

Los productos perecederos presentan otro matiz: si la cobertura de inventario, es decir, el inventario expresado en días en lugar de en unidades, se acerca a la vida útil del producto, entonces $${H}$$, el coste de mantenimiento, aumenta hacia un valor infinito.

De hecho, $${H}$$ representa la fricción asociada a tener inventario en primer lugar. Una cobertura de inventario mayor que la vida útil del producto representa una situación absurda en la que, asumiendo un inventario FIFO (First In, First Out), ningún producto saldría del lugar de almacenamiento sin antes alcanzar su fecha de caducidad.

Para modelar el efecto de la perecedibilidad del inventario, introduzcamos un par de duraciones clave:

  • $${\lambda}$$, el tiempo de entrega.
  • $${\lambda_\infty}$$, la vida útil del producto antes de alcanzar la caducidad terminal (es decir, valor de mercado cero).
  • $${\lambda_½}$$, la duración que duplica el coste de mantenimiento original del producto debido a la pérdida de su valor de mercado.
  • $${\lambda_c(p)}$$, la cobertura de inventario, es decir, el inventario expresado en días en lugar de en unidades de producto. Esta duración depende del factor de stock de seguridad, por lo tanto, depende de $${p}$$.

Con esas duraciones, podemos modelar el coste de mantenimiento como:

$${ H(p) = H \left(1 - \frac{\lambda_\infty - \lambda_½}{\lambda_\infty - \lambda} + \frac{\lambda_\infty - \lambda_½}{\lambda_\infty - \lambda_c(p)} \right) }$$

Detallamos la asunción implícita aquí, ya que estamos algo distorsionando la noción habitual del coste de mantenimiento para incluir el riesgo de baja de productos.

Primero, tenemos $${H(0.5)=H}$$. Esto se obtiene de la definición misma que aparece más arriba. De hecho, $${\lambda_c(0.5)=\lambda}$$, con un nivel de servicio al 50%, la cobertura de inventario equivale al tiempo de entrega. Por lo tanto, estamos afirmando aquí que, en este modelo, $$H$$ representa el costo de mantenimiento donde los costos de baja asociados a un nivel de servicio del 50% ya han sido incorporados en el costo $${H}$$. Cabe destacar que tener cero existencias de seguridad no implica tener cero bajas, solo bajas infrecuentes.

Segundo, para el nivel de servicio $${p_{1/2}}$$ tal que $${\lambda_c(p_{1/2}) = \lambda_{1/2}}$$, tenemos que $${H(p_{1/2})=2H}$$. Nuevamente, esto es solo consecuencia de la definición adoptada para $${H(p)}$$. Intuitivamente, $${\lambda_{1/2}}$$ representa la duración que duplica la combinación de los costos de mantenimiento más los costos de baja, en comparación con la situación de stock de seguridad cero. Es claro que, en la práctica, el sobrecosto involucrado con los descuentos de fin de vida y las bajas se presenta en pasos discretos. Sin embargo, creemos que intentar expresar este sobrecosto mediante una duración típica, que en la práctica se definiría como una cierta fracción de la vida útil del producto, es probablemente mucho más resistente a las diversas aproximaciones que implica todo el enfoque, en contraposición a un modelo más detallado basado en variables aún más inciertas.

Finalmente, a medida que $${p}$$ se aproxima a $${p_\infty}$$ con $${\lambda_c(p_\infty)=\lambda_\infty}$$, entonces $${H(p)}$$ tiende a infinito, nuevamente por definición de la función adoptada para $${H(p)}$$. A primera vista, puede parecer extraño tener un costo de mantenimiento que supera el costo unitario del producto, pero no hay paradoja alguna. El valor $$H(p)$$ representa el costo de fricción para enviar una unidad al cliente. Si, debido a bajas masivas, para enviar 1 unidad al cliente final el almacén recibe en promedio 3 unidades (2 unidades caducando antes de ser entregadas), entonces los costos de fricción serán mucho mayores que el precio unitario original del producto.

En resumen, $${\lambda_{1/2}}$$ es solo una variable incierta introducida. Se puede asumir con seguridad que $${\lambda}$$ y $${\lambda_\infty}$$ son conocidas. Creemos que este modelo para $${H(p)}$$ es, aproximadamente, el más simple que se puede lograr introduciendo solo 1 variable extra. Luego, para $${\lambda_c(p)}$$, con una aproximación modesta, tenemos:

$${\lambda_c(p) = \lambda \left(1 +\frac{\sigma}{Z}\Phi^{-1}(p)\right)}$$

De hecho, $${\lambda_c}$$, la cobertura de inventario, puede verse como una proporción sobre el tiempo de entrega que incluye la demanda durante dicho tiempo más un factor de existencias de seguridad normalizado. Esto ofrece la función de costo alternativa:

$${C^*(p) = \left(Z + \sigma \Phi^{-1}(p)\right)H\left(1 - \frac{\lambda_\infty - \lambda_{1/2}}{\lambda_\infty - \lambda} + \frac{ \lambda_\infty - \lambda_{1/2}}{\lambda_\infty - \lambda \left(1 +\frac{\sigma}{Z}\Phi^{-1}(p)\right)} \right) + (1-p)M\sigma}$$

A diferencia de la función de costo previa, esta función no parece tener un mínimo algebraico simple. Sin embargo, adoptando un enfoque similar al utilizado para el cálculo de la cantidad económica de orden, es relativamente sencillo encontrar una solución aproximada iterando en incrementos de 0.1% desde el 80% hasta el 99.9%. Esto representa 200 iteraciones para lograr una precisión de 0.1%, lo cual sería ampliamente suficiente para propósitos prácticos.

Uso práctico previsto

La fórmula del nivel de servicio viene con un par de aproximaciones, por lo que los valores numéricos pueden no ser utilizables tal como están: normalmente requerirán cierto ajuste. En particular, el factor $${\frac{1}{\sqrt(2\pi)}\approx0.4}$$ puede ajustarse según se requiera. Sin embargo, creemos que esta fórmula ofrece una buena visión de cómo deberían compararse los respectivos niveles de servicio de tus artículos. Por ejemplo, si para dos productos A y B se obtienen niveles de servicio de 95% (para A) y 90% (para B) respectivamente, entonces para la configuración final de producción se esperaría que el nivel de servicio de A fuera mayor que el de B.

Entonces, considerando la naturaleza del análisis realizado anteriormente, creemos que esta fórmula no es relevante para productos asociados a una demanda baja o intermitente. De hecho, dichos productos de bajo volumen suelen asociarse a un punto de reabastecimiento bajo, de 0 o 1 unidad; y una modelización lineal del costo de almacenamiento del producto no necesariamente tiene sentido, ya que también se debe considerar la complejidad de almacenar una referencia adicional.