Support » Ici
Formule du taux de service optimal pour l’optimisation des stocks
Par Joannès Vermorel, dernière version janvier 2012Le niveau de service (stocks) représente la rentabilité attendue pour ne pas être en rupture de stock. Ce pourcentage est nécessaire pour calculer le
stock de sécurité. Intuitivement, le niveau de service représente un compromis entre le coût du stock et celui des ruptures de stock (menant à des ventes manquées, des opportunités perdues et une frustration du client, pour ne citer que quelques exemples). Dans cet article, nous décrivons comment optimiser la valeur du taux de service. Puis, l’analyse est affinée pour les cas particuliers de
nourriture périssable.
Modèle et formule
Les ouvrages sur la chaîne logistique sont un peu « confus » en ce qui concerne les valeurs numériques qui devraient être adoptées pour le taux de service. Nous proposons, ci-dessous, un calcul du taux de service « optimal » en
modélisant le coût respectif du stock et des ruptures de stock.
Présentons les variables suivantes :
- $p$ est le taux de service, ex. la probabilité de « ne pas » être en rupture de stock.
- $H$ est le « coût de possession » par unité pendant la durée du délai d’approvisionnement (1).
- $M$ est le coût unitaire marginal d’une rupture de stock (2).
Téléchargez le tableur Excel : service-level-formula.xlsx (calcul illustré)
(1) La
durée prise en compte ici est le délai d’approvisionnement. Ainsi, au lieu de prendre en compte le coût de possession "annuel" plus habituel $H_y$, nous prenons en compte $H = \frac{d}{365}H_y$ en supposant que $d$ soit le délai d’approvisionnement exprimé en jours.
(2) Le coût d’une rupture de stock comprend « un minima », la marge brute, ex. Profit immédiat, qui aurait dû être généré si aucune rupture de stock n’aurait eut lieu. Cependant, la perte de marge brute n’est pas le seul coût : par exemple, la frustration du client et la perte de la fidélité du client devraient également être prises en compte. En tant que règle générale, nous avons observé que de nombreux détaillants alimentaires considèrent le $M$ comme étant égal à 3 fois la marge brute.
Le
taux de service optimal est donné par (le raisonnement est détaillé ci-dessous) :
$$p=\Phi\left(\sqrt{2\ln\left(\frac{1}{\sqrt{2\pi}}\frac{M}{H}\right)}\right)$$
Où $\Phi$ est la fonction de distribution cumulative associée à la distribution normale. Cette valeur peut être calculée facilement dans Excel, $\Phi$ est la fonction
NORMSDIST. De plus, pour le calcul numérique : $\sqrt{2 \pi} \environ 2,50 $
Fonction du coût
Présentons deux variables supplémentaires pour modéliser la fonction du coût :
- $Q$ la quantité de stock « amortie » (3), une fonction dépendant de $p$.
- $O$ la demande « moyenne » en trop en cas de rupture de stock.
(3) Nous adoptons ici le point de vue de l’
Analyse amortie. Le niveau du stock varie tout le temps, mais notre objectif ici, pour faire une analyse pratique, est d’obtenir une valeur de taux de service détachée de la prévision de la demande elle-même. Ainsi, nous supposerons que $Q$ sera égal au « point de réapprovisionnement » (veuillez consulter notre guide sur le
stock de sécurité pour en savoir plus).
Pour un taux de service donné, le coût total $C(p)$ combinant le coût du « stockage » et les coûts d’une « rupture de stock » peut être écrit :
$$C(p) = Q(p)H + (1-p)MO$$
Où $Q(p)H$ est le coût du stock et $MO$ le coût d’une rupture de stock, ayant uniquement lieu avec une rentabilité $1-p$. En utilisant la formule présentée dans notre tutoriel sur le
stock de sécurité, et étant donné que $Q(q)$ est égal au point de réapprovisionnement, nous avons $Q(p) = Z + \sigma \Phi^{-1}(p)$ où $Z$ est la demande de délai, $\sigma$ l’erreur de prévision attendue et $\Phi(p)^{-1}$ l’inverse de la
fonction de distribution cumulative associée à la distribution normale « standard » (moyenne de zéro et variante de un).
Analyse des ventes manquées moyennes
L’analyse du $O$, les ventes manquées moyennes, est subtile. En considérant que la distribution de la demande est la distribution « normale » $\mathcal{N}$ et que $q$ représente le stock disponible, $O(q)$ est la moyenne conditionnelle de la demande $x$ lorsque $x > q$ (moins le stock disponible $q$), qui est :
$$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)$$
Parcourez la fonction sur
(1).
Ce résultat peut être interprété comme : si la demande suit rigoureusement la distribution normale, alors la quantité moyenne de ventes manquées « en cas de rupture de stock » converge rapidement vers le zéro à mesure que le niveau du stock croît.
Là encore, selon notre expérience, l’erreur de prévision n’a pas de convergence aussi bonne que celle que la distribution normale prévoirait. Ainsi, nous supposerons, ci-dessous que $O=\sigma$, à savoir que la quantité moyenne de « ventes manquées » sera égale à l’ « erreur de prévision moyenne ». Manifestement, il s'agit plus d'une « règle générale » que d'une analyse approfondie ; mais nous avons découvert qu'en pratique, cette approximation donnait des résultats sensibles.
Minimisation de la fonction du coût
En appliquant les changements définis ci-dessus à l’expression de $C(p)$, nous obtenons :
$$C(p) = \left(Z + \sigma \Phi^{-1}(p)\right)H + (1-p)M\sigma$$
Ensuite, l’expression $C(p)$ peut être différentiée dans $p$ avec :
$$\frac{\partial C}{\partial p} = \sigma H \partial \Phi^{-1}(p) - \sigma M$$
Étant donné que nous cherchons la valeur « maximum », nous essayons de résoudre $\frac{\partial C}{\partial p} = 0$ qui donne :
$$\sigma H \partial \Phi^{-1}(p) - \sigma M = 0$$
Pouvant être simplifiée par $\sigma$, avec :
$$H \partial \Phi^{-1}(p) - M = 0$$
Et pour finir :
$$\partial \Phi^{-1}(p) = \frac{M}{H}$$
Puis, nous utiliserons la relation entre $\partial \Phi^{-1}$ and $\Phi^{-1}$ :
$$\partial \Phi^{-1}(p)=\sqrt{2\pi}e^{\frac{1}{2}\Phi^{-1}(p)^2}$$
Pour voir l’égalité de vos propres yeux, vous pouvez comparer
(1) et
(2).
Cette relation nous permet d’obtenir :
$$\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)$$
Nous prenons la solution racine positive de l’équation (la racine négative correspond au « maximum local » de la fonction) avec :
$$\Phi^{-1}(p)=\sqrt{2\ln\left(\frac{1}{\sqrt{2\pi}}\frac{M}{H}\right)}$$
Et, pour finir, en appliquant $\Phi$ des deux côtés, nous obtenons
le taux de service optimal avec :
$$p=\Phi\left(\sqrt{2\ln\left(\frac{1}{\sqrt{2\pi}}\frac{M}{H}\right)}\right)$$
Discussion sur la formule
Le premier aspect intéressant de la formule est que le taux de service optimal dépend uniquement du $H$ (coût du stock) et du $M$ (coût d’une rupture de stock). Cependant, il existe une
dépendance implicite au délai d’approvisionnement car le $H$ a été défini comme le coût de possession « pendant la durée du délai d’approvisionnement ».
Deuxièmement, un coût de stock plus important « réduit » le taux de service optimal ; et, de même, un coût de rupture de stock plus important « augmente » le taux de service. Ce comportement est plutôt intuitif car le taux de service est un échange entre des stocks et des ruptures de stock plus importants.
La formule n’est donc pas adaptée à toutes les valeurs du $M$ et du $H$. Nous avons besoin de $\sqrt{2\pi}\frac{M}{H} > 1$ ou l’algorithme produira une valeur négative qui ne sera pas tractable compte tenu de la racine carrée externe. Nous obtenons $M > \sqrt{2 \pi} H$, pouvant être lissée par $M > 2.5 H$. Si cette condition n’est pas vérifiée, cela signifie que la fonction du coût initiale $C(p)$ n’a pas de minimum, ou plutôt, que le minimum est $-\infty$ pour $p=0$. Du point de vue pratique, $M < 2.5 H$ pourrait être interprété comme une situation pathologique dans laquelle le niveau de stock le plus rentable serait un stock de zéro (ex. 100% de rupture de stock).
Exemple pratique
Prenons une bouteille de lait de 1L à un prix de vente de 1,50€ avec une marge de 10% (ex. 0,15€ de marge brute). Supposons que le délai d’approvisionnement soit de 4 jours. Le coût de possession annuel est de 1,50€ (la valeur est élevée car le lait est un produit hautement périssable). Nous supposons que le coût de rupture de stock fait 3 fois la marge brute, c’est-à-dire 0,45€. Ce qui nous donne $M=0,45$ et $H=\frac{4}{365} 1,5\environ 0,0055$.
En nous basant sur ces valeurs et sur la formule de taux de service optimal obtenues ci-dessus, nous obtenons $p\environ 98,5\%$ qui est une valeur typique pour des produits frais « must-have » stockés dans les entrepôts alimentant les épiceries.
Nourriture périssable
Question posée par
Vyacheslav Grinkevych, expert en chaîne logistique, 13-02-2012 :
Je travaille sur la Prévision et la Planification de l’approvisionnement en produits laitiers périssables où le taux de service optimal est un sujet très important. Le composant le plus intéressant et compliqué ici est H – le coût de possession et la question de sa propre valeur en pratique.
Par exemple, pour des produits laitiers périssables, l’un des aspects les plus importants de H ne devrait pas être le coût financier des liquidités gelées dans les frais de stockage et logistiques mais également le coût des pertes potentielles dues à des pertes sèches de produits expirés ou des ventes au rabais lorsque nous essayons de vendre plus de produits avant la date d’expiration. Cela se produit lorsque vos ventes sont bien en-dessous de la prévision.
Cette perte sèche peut être décrite comme le risque d’excédents de stock par rapport au risque éventuel de rupture de stock – deux risques opposés mais ayant la même origine par nature – ex. reliés au stock de sécurité. En cas de grosse surestimation, entraînant généralement un problème d’expiration, les erreurs de prévision ne sont pas distribuées normalement. Ainsi, je me demande comment mieux exprimer ces risques de ruptures de stock éventuelles.
Pour en revenir à la formule, on pourrait essayer de la développer pour tenter de trouver une relation entre H et p ou pour faire de H une fonction de p, par ex. H(p), avant de réduire le coût total C(p). Qu’en pensez-vous ?
La formule du taux de service donnée ci-dessus est en effet basée sur une
hypothèse simpliste où les coûts, de stockage et de rupture de stock,
sont strictement linéaires. Cependant, en pratique, on peut trouver des non linéarités brutales comme :
- Entrepôt plein, et lorsqu’une unité supplémentaire entraîne des charges indirectes importantes car il faut trouver un nouvel entrepôt.
- Les ruptures de stock augmentent les pertes de ventes jusqu'à la perte de tous les clients récurrents.
Les produits périssables présentent un autre problème : si la couverture de stock, à savoir le stock exprimé en jours plutôt qu’en unités de stock, arrive à expiration, alors $H$, le coût de stockage augmente.
En effet, $H$ représente la friction associée à la possession d’un stock. Une couverture de stock supérieure à la durée de vie d’un produit représente une situation absurde dans laquelle, pour un stock FIFO (Premier arrivé, premier sorti), aucun produit ne quitterait l’entrepôt sans être d'abord arrivé à expiration.
Pour modéliser l’effet de la périssabilité du stock, présentons quelques délais importants : - $\lambda$, le délai d’approvisionnement
- $\lambda_\infty$, la durée de vie du produit avant d’arriver à expiration (ex. valeur de marché de zéro).
- $\lambda_½$, la durée qui double le coût de stockage d’origine du produit à cause de la perte de sa valeur de marché.
- $\lambda_c(p)$, la couverture de stock, il s’agit du stock exprimé en jours plutôt qu’en unités de produit. Cette durée dépend du facteur de stock de sécurité, ici du $p$.
Avec ces durées, nous pouvons modéliser le coût de stockage comme suit :
$$ H(p) = H \left(1 - \frac{\lambda_\infty - \lambda_½}{\lambda_\infty - \lambda} + \frac{\lambda_\infty - \lambda_½}{\lambda_\infty - \lambda_c(p)} \right) $$
Décrivons l'hypothèse exprimée ici, car nous modifions quelque peu la notion de coût de stockage pour factoriser le risque de perte sèche.
D’abord, nous avons $H(0,5)=H$. Obtenu d’après la définition ci-dessus. En effet $\lambda_c(0.5)=\lambda$, avec un taux de service à 50%, la couverture de stock équivaut au délai d’approvisionnement. Ainsi, nous déclarons ici que, dans ce modèle, $H$ représente le coût de stockage dans lequel les coûts des pertes sèches associés à un taux de service de 50% ont déjà été factorisés dans le coût $H$. Il est intéressant de noter que zéro stock de sécurité n’implique pas zéro perte sèche, mais uniquement des pertes sèches rares.
Deuxièmement, pour le taux de service $p_½$ comme $\lambda_c(p_½) = \lambda_½$, nous obtenons $H(p_½)=2H$. Là encore, il s’agit uniquement d’une conséquence de la définition adoptée pour $H(p)$. Intuitivement, $\lambda_½$ représente la durée qui double la combinaison des coûts de stockage et de pertes sèches, comparable à la situation zéro stock de sécurité. Il est clair qu’en pratique, le coût indirect découlant des rabais et pertes sèches de produits arrivant à expiration passera par des étapes discrètes. Cependant, nous pensons qu’essayer d’exprimer cette charge indirecte sous la forme d’une durée classique qui, en pratique, serait définie comme une certaine portion de la durée de vie du produit semble bien plus solide que les diverses approximations nécessitant l’approche complète, contrairement à un modèle plus affiné reposant sur des variables encore plus incertaines.
Pour finir, étant donné que $p$ se rapproche de $p_\infty$ avec $\lambda_c(p_\infty)=\lambda_\infty$, $H(p)$ tend à être infini, là encore avec la définition de la fonction adoptée pour $H(p)$. Au premier abord, cela semble étrange d’avoir un coût de stockage supérieur au coût de l’unité de produit, mais il n’y a aucun paradoxe ici. La valeur $H(p)$ représente le coût de la friction pour qu’une unité soit livrée au client. Si, à cause de grosses pertes sèches, pour livrer 1 unité au client final, l’entrepôt reçoit 3 unités en moyenne (2 unités arrivant à expiration avant leur livraison), les coûts de friction seront supérieurs au prix unitaire d’origine du produit.
En résumé, $\lambda_½$ est uniquement une variable incertaine introduite. On est sûr que $\lambda$ and $\lambda_\infty$ est connue. Nous pensons que ce modèle pour $H(p)$ est sûrement le plus simple à obtenir uniquement grâce à l'introduction d'une variable supplémentaire. Pour $\lambda_c(p)$, avec une approximation modeste, nous avons :
$$\lambda_c(p) = \lambda \left(1 +\frac{\sigma}{Z}\Phi^{-1}(p)\right)$$
En effet, $\lambda_c$, la couverture de stock peut être vue comme un ratio par rapport au délai d’approvisionnement incluant la demande d’approvisionnement plus un facteur de stock de sécurité normalisé. Ceci donne la fonction de coût alternative :
$$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$$
Contrairement à la fonction de coût précédente, cette fonction ne semble pas avoir d’algébrique minimum simple. Cependant, en adoptant une approche similaire à celle utilisée pour calculer la quantité de commande économique, il est relativement plus direct de trouver une solution approximative en passant par des augmentations de 0,1% de 80% à 99,9%. Cela représente 200 itérations afin d’atteindre une précision de 0,1% qui serait amplement suffisante à des fins pratiques.
Usage pratique prévu
La formule de taux de service s'accompagne de nombreuses approximations, par conséquent, les valeurs numériques ne seront peut-être pas « immédiatement » utilisables : Elle devra généralement être ajustée. En particulier, le facteur $\frac{1}{\sqrt(2\pi)}\approx0,4$ peut être ajusté en fonction des besoins. Cependant, nous pensons que cette formule donne une bonne idée de la manière dont les
niveaux de service respectifs de vos articles devraient être comparés. Par exemple, si pour deux produits A et B, vous obtenez des niveaux de service de 95% (pour A) et 90% (pour B), alors pour la configuration de la production finale, le taux de service de A devrait être supérieur au taux de service de B.
Par conséquent, compte tenu de la nature de l’analyse ci-dessus, nous pensons que cette formule
n'est pas adaptée aux produits associés à une demande faible ou intermittente. En effet, les produits en petit nombre sont généralement associés à un point de réapprovisionnement de 0 ou 1 unité ; et une modélisation « linéaire » du coût de stockage du produit n’est pas nécessairement sensée car la complexité du stockage d’une référence supplémentaire devrait être prise en compte.

Optimisez les prévisions de vente avec notre appli Web
Salescast. Lokad se spécialise dans l’optimisation des stocks grâce à la prévision de la demande. Les niveaux de service – et plus encore – sont des fonctions natives de Salescast.