Formula del livello di servizio ottimale (Supply Chain)

learn menu
Di Joannès Vermorel, ultima revisione gennaio 2012

Il livello di servizio (inventario) rappresenta la probabilità attesa di non esaurire le scorte. Questa percentuale è necessaria per calcolare le scorte di sicurezza. Intuitivamente, il livello di servizio rappresenta un compromesso tra il costo dell’inventario e il costo delle rotture di stock (che comportano vendite mancate, opportunità perse e frustrazione del cliente, tra gli altri). In questo articolo, spieghiamo come ottimizzare il valore del livello di servizio. Successivamente, l’analisi viene approfondita per il caso particolare del cibo deperibile.

L’articolo è stato scritto da un punto di vista di previsione classica nel 2011. Tuttavia, alcuni anni dopo, ci siamo resi conto che esistono opzioni molto migliori disponibili dal punto di vista della catena di approvvigionamento quantitativa che eliminano completamente la necessità di ottimizzare i livelli di servizio quando la tecnologia è alimentata da previsioni probabilistiche.

Modello e formula

La letteratura classica sulla supply chain è un po’ fuzzy per quanto riguarda i valori numerici che dovrebbero essere adottati per il livello di servizio. Di seguito, proponiamo di calcolare un livello di servizio ottimale modellando il rispettivo costo dell’inventario e delle rotture di stock.

Introduciamo le seguenti variabili:

  • $${p}$$ sia il livello di servizio, ovvero la probabilità di non avere una rottura di stock.
  • $${H}$$ sia il costo di mantenimento per unità per la durata del tempo di approvvigionamento (1).
  • $${M}$$ sia il costo marginale di una rottura di stock (2).

Scarica il foglio Excel: service-level-formula.xlsx (calcolo illustrato)

(1) Lo scope temporale considerato qui è il tempo di approvvigionamento. Pertanto, anziché considerare il più comune costo di mantenimento annuale $${H_y}$$, stiamo considerando $${H = \frac{d}{365}H_y}$$ assumendo che $$d$$ sia il tempo di approvvigionamento espresso in giorni.

(2) Il costo di una rottura di stock include almeno il margine lordo, ovvero il profitto istantaneo che sarebbe stato generato se non ci fosse stata una rottura di stock. Tuttavia, la perdita del margine lordo non è l’unico costo: ad esempio, la frustrazione del cliente e la perdita di fedeltà del cliente dovrebbero essere presi in considerazione. Come regola generale, abbiamo osservato che molti rivenditori di alimentari considerano $${M}$$ uguale a 3 volte il margine lordo.

Il livello di servizio ottimale è dato da (il ragionamento è dettagliato di seguito):

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

Dove $${\Phi}$$ è la funzione di distribuzione cumulativa associata alla distribuzione normale. Questo valore può essere facilmente calcolato in Excel, $${\Phi}$$ è la funzione NORMSDIST. Inoltre, per scopi di calcolo numerico: $${\sqrt{2 \pi} \approx 2.50}$$

Funzione di costo

Per modellare la funzione di costo, introduciamo altre due variabili:

  • $${Q}$$ la quantità di inventario ammortizzata (3), una funzione che dipende da $${p}$$.
  • $${O}$$ la domanda media in eccesso quando si verifica una rottura di stock.

(3) Qui adottiamo un punto di vista di Analisi Ammortizzata. Il livello di inventario varia continuamente, ma il nostro obiettivo qui, al fine di rendere l’analisi pratica, è ottenere un valore di livello di servizio che sia svincolato dalla previsione della domanda stessa. Pertanto, assumiamo che $${Q}$$ sia uguale al punto di riordino (consulta la nostra guida sulle scorte di sicurezza per i dettagli).

Per un dato livello di servizio, il costo totale $${C(p)}$$ che combina sia il costo di detenzione dell’inventario che i costi di rottura di stock può essere scritto come:

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

Dove $${Q(p)H}$$ è il costo dell’inventario e $${MO}$$ è il costo di rottura di stock, che si verifica solo con una probabilità $${1-p}$$. Utilizzando la formula introdotta nel nostro tutorial sulle scorte di sicurezza, e poiché $$Q(q)$$ è uguale al punto di riordino, abbiamo $${Q(p) = Z + \sigma \Phi^{-1}(p)}$$ dove $${Z}$$ è la domanda nel lead time, $${\sigma}$$ è l’errore di previsione atteso e $${\Phi(p)^{-1}}$$ è l’inverso della funzione di distribuzione cumulativa associata alla distribuzione normale standard (media zero e varianza uno).

Analisi delle vendite medie mancate

L’analisi di $${O}$$, le vendite medie mancate, è sottile. Considerando che la distribuzione della domanda è la distribuzione normale $${\mathcal{N}}$$ e che $${q}$$ è l’inventario disponibile, $${O(q)}$$ è la media condizionale della domanda $${x}$$ quando $${x > q}$$ (meno l’inventario disponibile $${q}$$), ovvero:

$${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)}$$

Sfoglia la funzione a (1).

Questo risultato può essere interpretato come: se la domanda segue rigorosamente la distribuzione normale, allora la quantità media di vendite mancate nell’evento (condizionale) di una carenza di magazzino converge rapidamente a zero all’aumentare del livello di inventario.

Tuttavia, nella nostra esperienza, l’errore di previsione non ha una convergenza così buona come quella che la distribuzione normale prevederebbe. Pertanto, di seguito, supporremo che $${O=\sigma}$$ ovvero che la quantità media di vendite mancate sia uguale all’errore di previsione medio. Ovviamente, questa è più una regola empirica che un’analisi approfondita; ma abbiamo constatato che nella pratica, questa approssimazione fornisce risultati sensati.

Minimizzazione della funzione di costo

Applicando le sostituzioni definite qui sopra all’espressione di $${C(p)}$$, otteniamo:

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

Quindi, l’espressione di $${C(p)}$$ può essere differenziata rispetto a $${p}$$ con:

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

Poiché stiamo cercando il valore minimo, cerchiamo di risolvere $${\frac{\partial C}{\partial p} = 0}$$ che dà:

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

Che può essere semplificato in $${\sigma}$$, con:

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

E infine:

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

Quindi, useremo la relazione tra $${\partial \Phi^{-1}}$$ e $${\Phi^{-1}}$$ :

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

Per una prova visiva dell’uguaglianza, puoi confrontare (1) e (2).

Questa relazione ci permette di ottenere:

$${\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)}$$

Prendiamo la soluzione radice positiva dell’equazione (la radice negativa corrisponde a un massimo locale della funzione) con:

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

E infine applicando $${\Phi}$$ ad entrambi i lati, otteniamo il livello di servizio ottimale con:

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

Discussione della formula

Il primo aspetto interessante della formula è che il livello di servizio ottimale dipende solo da $${H}$$ (costo dell’inventario) e $${M}$$ (costo di mancata disponibilità). Tuttavia, c’è una dipendenza implicita dal tempo di consegna poiché $${H}$$ è stato definito come il costo di mantenimento per la durata del tempo di consegna.

In secondo luogo, un costo di inventario maggiore riduce il livello di servizio ottimale; e allo stesso modo, un costo di mancata disponibilità maggiore aumenta il livello di servizio. Questo comportamento è piuttosto intuitivo perché il livello di servizio è un compromesso tra più inventario e più mancate disponibilità.

Quindi, la formula non è valida per tutti i valori di $${M}$$ e $${H}$$. Abbiamo bisogno che $${\sqrt{2\pi}\frac{M}{H} > 1}$$ altrimenti il logaritmo produrrà un valore negativo che non è gestibile considerando la radice quadrata esterna. Questo dà $${M > \sqrt{2 \pi} H}$$, che può essere approssimato come $${M > 2.5 H}$$. Se questa condizione non è verificata, significa che la funzione di costo iniziale $${C(p)}$$ non ha un minimo, o piuttosto che il minimo è $${-\infty}$$ per $${p=0}$$. Da un punto di vista pratico, $${M < 2.5 H}$$ potrebbe essere interpretato come una situazione patologica in cui il livello di scorta più redditizio è zero (cioè il 100% di mancate disponibilità).

Esempio pratico

Consideriamo un pacchetto di latte da 1L al prezzo di vendita di 1,50€ venduto con un margine del 10% (cioè 0,15€ di margine lordo). Supponiamo che il tempo di consegna sia di 4 giorni. Il costo di mantenimento annuale è di 1,50€ (il valore è alto perché il latte è un prodotto altamente deperibile). Supponiamo che il costo di mancata disponibilità sia 3 volte il margine lordo, cioè 0,45€. Questo dà $${M=0.45}$$ e $${H=\frac{4}{365} 1.5\approx 0.0055}$$.

Sulla base di questi valori e della formula per il livello di servizio ottimale ottenuta qui sopra, otteniamo $$ p \approx 98.5 \text{%} $$ che è un valore tipico per i prodotti freschi must-have conservati nei magazzini che alimentano le reti di negozi di alimentari.

Alimenti deperibili

Domanda posta da Vyacheslav Grinkevych, esperto di supply chain, 13-02-2012:

Sto lavorando sulla previsione e la pianificazione delle scorte per i prodotti caseari a breve durata di conservazione, dove il livello di servizio ottimale è un argomento molto importante. L’aspetto più interessante e complicato qui è H - il costo di mantenimento e la questione del suo valore corretto nella pratica.

Ad esempio, per i prodotti caseari a breve durata di conservazione, una delle parti importanti di H dovrebbe essere non solo il costo finanziario del denaro congelato in magazzino e il costo operativo di stoccaggio logistico, ma anche il costo delle possibili perdite dovute alla scrittura di prodotti scaduti o alle vendite con sconti quando si cerca di vendere più prodotti poco prima della scadenza. Questo accade quando le vendite sono molto al di sotto delle previsioni.

Questo compromesso può essere descritto come il rischio di potenziali eccessi di scorte rispetto al rischio di potenziale esaurimento delle scorte - due rischi che lavorano in direzioni opposte pur avendo la stessa origine per natura - cioè interconnessi con la scorta di sicurezza. Nel caso di una grande sovrastima, che di solito causa problemi di scadenza, gli errori di previsione non sono normalmente distribuiti. Quindi mi chiedo come esprimere meglio tali rischi di potenziali eccessi di scorte.

Tornando alla tua formula, un suo ulteriore sviluppo potrebbe essere quello di cercare una relazione tra H e p o di rendere H una funzione di p, cioè H(p), prima di passare alla minimizzazione del costo totale C(p). Cosa ne pensi di questo argomento?

La formula del livello di servizio data qui sopra si basa effettivamente su un’assunzione semplicistica in cui i costi, sia di stoccaggio che di mancanza di scorte, sono strettamente lineari. Tuttavia, nella pratica, possono essere trovate non linearità brutali come:

  • Il magazzino è pieno, e c’è un punto in cui 1 unità in più di scorta comporta l’enorme costo aggiuntivo di ottenere una posizione di magazzinaggio in più.
  • Le mancanze di scorte causano vendite perse incrementalmente fino a raggiungere il punto in cui una mancanza di scorte in più causa la perdita dell’intero cliente ricorrente.

I prodotti deperibili presentano un’altra complicazione: se la copertura delle scorte, cioè le scorte espresse in giorni anziché in unità di prodotto, si avvicina alla durata di conservazione del prodotto, allora $${H}$$, il costo di mantenimento, aumenta verso un valore infinito.

Infatti, $${H}$$ rappresenta l’attrito associato all’avere scorte in primo luogo. Una copertura delle scorte superiore alla durata di conservazione del prodotto rappresenta una situazione assurda in cui, assumendo un inventario FIFO (First In, First Out), nessun prodotto uscirebbe dalla posizione di stoccaggio senza colpire prima la sua data di scadenza.

Per modellare l’effetto della deperibilità delle scorte, introduciamo un paio di durate chiave:

  • $${\lambda}$$, il tempo di approvvigionamento.
  • $${\lambda_\infty}$$, la durata di vita del prodotto prima di raggiungere la scadenza terminale (cioè il valore di mercato zero).
  • $${\lambda_½}$$, la durata che raddoppia il costo di mantenimento originale del prodotto a causa della perdita del suo valore di mercato.
  • $${\lambda_c(p)}$$, la copertura delle scorte, cioè le scorte espresse in giorni anziché in unità di prodotto. Questa durata dipende dal fattore di scorta di sicurezza, quindi dipende da $${p}$$.

Con queste durate, possiamo modellare il costo di mantenimento come:

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

Dettagliamo qui l’assunzione implicita, perché stiamo in qualche modo flettendo la nozione usuale del costo di mantenimento al fine di considerare il rischio di cancellazione.

Prima di tutto, abbiamo $${H(0.5)=H}$$. Questo si ottiene dalla definizione stessa qui sopra. Infatti $${\lambda_c(0.5)=\lambda}$$, con un livello di servizio al 50%, la copertura delle scorte è uguale al tempo di approvvigionamento. Pertanto, affermiamo qui che, in questo modello, $$H$$ rappresenta il costo di mantenimento in cui i costi di cancellazione associati a un livello di servizio del 50% sono già stati considerati nel costo $${H}$$. È importante notare che le scorte di sicurezza zero non implicano cancellazioni zero, solo cancellazioni poco frequenti.

In secondo luogo, per il livello di servizio $${p_½}$$ tale che $${\lambda_c(p_½) = \lambda_½}$$, allora abbiamo $${H(p_½)=2H}$$. Anche questo è solo una conseguenza della definizione adottata per $${H(p)}$$. In modo intuitivo, $${\lambda_½}$$ rappresenta la durata che raddoppia la combinazione di costi di mantenimento più costi di cancellazione, rispetto alla situazione di scorte di sicurezza zero. È chiaro che nella pratica, il sovraccarico di costi associato agli sconti di fine vita e alle cancellazioni avverrà attraverso passaggi discreti. Tuttavia, riteniamo che cercare di esprimere questo sovraccarico attraverso una durata tipica che nella pratica sarebbe definita come una certa frazione della durata di vita del prodotto sia probabilmente molto più resiliente alle varie approssimazioni che comportano l’intero approccio, rispetto a un modello più dettagliato che si basa su variabili ancora più incerte.

Infine, man mano che $${p}$$ si avvicina a $${p_\infty}$$ con $${\lambda_c(p_\infty)=\lambda_\infty}$$, allora $${H(p)}$$ tende all’infinito, ancora una volta per definizione della funzione adottata per $${H(p)}$$. A prima vista, sembra strano avere un costo di mantenimento che supera il costo unitario del prodotto, ma qui non c’è alcun paradosso. Il valore $$H(p)$$ rappresenta il costo di attrito per far spedire un’unità al cliente finale. Se, a causa di cancellazioni massive, per spedire 1 unità al cliente finale, il magazzino riceve in media 3 unità (2 unità scadono prima di essere consegnate), allora i costi di attrito saranno molto maggiori del prezzo unitario originale del prodotto.

In sintesi, $${\lambda_½}$$ è solo una variabile incerta che viene introdotta. $${\lambda}$$ e $${\lambda_\infty}$$ possono essere considerati noti in modo sicuro. Riteniamo che questo modello per $${H(p)}$$ sia il più semplice possibile che si possa ottenere introducendo solo 1 variabile aggiuntiva. Quindi, per $${\lambda_c(p)}$$, con una modesta approssimazione, abbiamo:

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

Infatti, $${\lambda_c}$$, la copertura delle scorte, può essere vista come un rapporto sulla durata del ciclo che include la domanda di ciclo più un fattore di scorta di sicurezza normalizzato. Questo fornisce la funzione di costo alternativa:

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

A differenza della funzione di costo precedente, questa funzione non sembra avere un minimo algebrico semplice. Tuttavia, adottando un approccio simile a quello utilizzato per il calcolo della quantità economica di ordinazione, è relativamente semplice trovare una soluzione approssimata iterando attraverso incrementi dello 0,1% dal 80% al 99,9%. Ciò rappresenta 200 iterazioni per ottenere una precisione dello 0,1% che sarebbe più che sufficiente per scopi pratici.

Utilizzo pratico previsto

La formula del livello di servizio viene fornita con un paio di approssimazioni, quindi i valori numerici potrebbero non essere utilizzabili così come sono: richiederà tipicamente un po’ di taratura. In particolare, il fattore $${\frac{1}{\sqrt(2\pi)}\approx0.4}$$ può essere regolato in base alle esigenze. Tuttavia, riteniamo che questa formula dia una buona idea di come i livelli di servizio rispettivi dei tuoi articoli dovrebbero confrontarsi. Ad esempio, se per due prodotti A e B si ottengono rispettivamente livelli di servizio del 95% (per A) e del 90% (per B), allora per la configurazione finale della produzione ci si aspetterebbe che il livello di servizio per A sia maggiore del livello di servizio per B.

Quindi, considerando la natura dell’analisi che è stata fatta qui sopra, riteniamo che questa formula non sia pertinente per i prodotti associati a una domanda bassa o intermittente. Infatti, tali prodotti a basso volume sono tipicamente associati a un punto di riordino basso a 0 o 1 unità; e una modellazione lineare del costo di stoccaggio del prodotto non necessariamente ha senso poiché la complessità per la conservazione di un riferimento aggiuntivo dovrebbe essere presa in considerazione.