Formule optimale du taux de service (Supply Chain)

learn menu
Par Joannès Vermorel, révisé en janvier 2012

Taux de service (stocks) représente la probabilité attendue de ne pas subir une rupture de stock. Ce pourcentage est requis pour calculer le stock de sécurité. Intuitivement, le taux de service représente un compromis entre le coût des stocks et le coût des ruptures de stock (qui entraînent des ventes manquées, des opportunités perdues et, entre autres, la frustration des clients). Dans cet article, nous détaillons comment optimiser la valeur du taux de service. Ensuite, l’analyse est affinée pour le cas particulier des denrées périssables.

L’article a été rédigé dans une perspective de prévision classique en 2011. Cependant, quelques années plus tard, nous réalisons désormais qu’il existe bien de meilleures options disponibles du point de vue de la Supply Chain Quantitative qui éliminent entièrement la nécessité d’optimiser les taux de service lorsque la technologie est alimentée par des prévisions probabilistes.

Modèle et formule

La littérature classique sur la supply chain est quelque peu floue quant aux valeurs numériques à adopter pour le taux de service. Ci-dessous, nous proposons de calculer un taux de service optimal en modélisant le coût respectif des stocks et des ruptures de stock.

Introduisons les variables suivantes :

  • $${p}$$ représente le taux de service, c’est-à-dire la probabilité de ne pas subir une rupture de stock.
  • $${H}$$ représente le coût de maintien par unité pendant la durée du délai d’approvisionnement (1).
  • $${M}$$ représente le coût unitaire marginal d’une rupture de stock (2).

Télécharger la feuille Excel : service-level-formula.xlsx (calcul illustré)

(1) L’horizon temporel considéré ici est le délai d’approvisionnement. Ainsi, au lieu de considérer le coût de maintien annuel habituel $${H_y}$$, nous considérons $${H = \frac{d}{365}H_y}$$ en supposant que $$d$$ est le délai d’approvisionnement exprimé en jours.

(2) Le coût de la rupture de stock inclut au minimum la marge brute, c’est-à-dire le profit instantané qui aurait été généré en l’absence de rupture de stock. Cependant, la perte de marge brute n’est pas le seul coût : par exemple, la frustration des clients et la perte de fidélité doivent également être pris en compte. En règle générale, nous avons constaté que de nombreux détaillants alimentaires considèrent $${M}$$ comme é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 répartition associée à la distribution normale. Cette valeur peut être calculée facilement dans Excel, $${\Phi}$$ correspond à la fonction NORMSDIST. De plus, pour le calcul numérique : $${\sqrt{2 \pi} \approx 2,50}$$

Fonction de coût

Pour modéliser la fonction de coût, introduisons deux autres variables :

  • $${Q}$$ représente la quantité de stocks amortie (3), une fonction qui dépend de $${p}$$.
  • $${O}$$ représente la demande excédentaire moyenne lorsqu’une rupture de stock survient.

(3) Nous adoptons ici une approche d’Analyse Amortie. Le niveau des stocks varie constamment, mais notre objectif ici, pour rendre l’analyse pratique, est d’obtenir une valeur de taux de service découplée de la prévision de la demande elle-même. Ainsi, nous supposerons que $${Q}$$ est égal au point de commande (consultez notre guide sur le stock de sécurité pour plus de détails).

Pour un taux de service donné, le coût total $${C(p)}$$ qui combine à la fois le coût de stockage et les coûts de rupture de stock peut s’exprimer :

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

où $${Q(p)H}$$ représente le coût des stocks et $${MO}$$ le coût de rupture de stock, survenant uniquement avec une probabilité de $${1-p}$$. En utilisant la formule présentée dans notre tutoriel sur le stock de sécurité, et puisque $$Q(p)$$ est égal au point de commande, nous avons $${Q(p) = Z + \sigma \Phi^{-1}(p)}$$ où $${Z}$$ représente la demande anticipée, $${\sigma}$$ l’erreur de prévision attendue et $${\Phi(p)^{-1}}$$ l’inverse de la fonction de répartition associée à la distribution standard (moyenne nulle et variance unitaire).

Analyse des ventes manquées moyennes

L’analyse de $${O}$$, la moyenne des ventes manquées, est subtile. En considérant que la distribution de la demande est la distribution normale $${\mathcal{N}}$$ et que $${q}$$ représente les stocks disponibles, $${O(q)}$$ est la moyenne conditionnelle de la demande $${x}$$ lorsque $${x > q}$$ (moins les stocks disponibles $${q}$$), c’est-à-dire :

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

Consultez la fonction sur (1).

Ce résultat peut être interprété de la manière suivante : si la demande suit rigoureusement la distribution normale, alors la quantité moyenne de ventes manquées dans l’éventualité (conditionnelle) d’une rupture de stock converge rapidement vers zéro à mesure que le niveau des stocks augmente.

Cependant, d’après notre expérience, l’erreur de prévision ne converge pas aussi bien que ne le prédit la distribution normale. Ainsi, nous supposerons ci-dessous que $${O=\sigma}$$, c’est-à-dire que la quantité moyenne de ventes manquées est égale à l’erreur de prévision moyenne. Évidemment, il s’agit plus d’une règle empirique que d’une analyse approfondie ; mais nous avons constaté qu’en pratique, cette approximation donne des résultats sensés.

Minimisation de la fonction de coût

En appliquant les remplacements 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 par rapport à $${p}$$ selon :

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

Puisque nous recherchons la valeur minimale, nous essayons de résoudre $${\frac{\partial C}{\partial p} = 0}$$, ce qui donne :

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

Cela peut être simplifié par $${\sigma}$$, de la manière suivante :

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

Et enfin :

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

Ensuite, nous utiliserons la relation entre $${\partial \Phi^{-1}}$$ et $${\Phi^{-1}}$$ :

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

Pour une preuve visuelle de cette égalité, 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 par la racine positive de l’équation (la racine négative correspondant à un maximum local de la fonction) avec :

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

Et enfin, 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 de la formule

La première caractéristique intéressante de la formule est que le taux de service optimal ne dépend que de $${H}$$ (coût des stocks) et de $${M}$$ (coût de rupture de stock). Cependant, il existe une dépendance implicite vis-à-vis du délai d’approvisionnement puisque $${H}$$ a été défini comme le coût de maintien pendant la durée du délai d’approvisionnement.

Deuxièmement, un coût des stocks plus élevé diminue 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 assez intuitif car le taux de service est un compromis entre un niveau de stocks plus élevé et des ruptures de stock plus fréquentes.

Ensuite, la formule n’est pas valable pour toutes les valeurs de $${M}$$ et $${H}$$. Nous avons besoin que $${\sqrt{2\pi}\frac{M}{H} > 1}$$, sinon le logarithme produira une valeur négative qui n’est pas compatible avec la racine carrée extérieure. Cela donne $${M > \sqrt{2 \pi} H}$$, ce qui peut être approximé par $${M > 2,5 H}$$. Si cette condition n’est pas vérifiée, cela signifie que la fonction de coût initiale $${C(p)}$$ n’a pas de minimum, ou plutôt que le minimum est $${-\infty}$$ pour $${p=0}$$. D’un point de vue pratique, $${M < 2,5 H}$$ pourrait être interprété comme une situation pathologique où le niveau de stocks le plus rentable est le zéro stock (c’est-à-dire 100 % de ruptures de stock).

Exemple pratique

Considérons un pack de lait de 1L au prix de vente de 1,50€ vendu avec une marge de 10 % (c’est-à-dire une marge brute de 0,15€). Supposons que le délai d’approvisionnement soit de 4 jours. Le coût de maintien annuel est de 1,50€ (la valeur est élevée car le lait est un produit très périssable). Nous supposons que le coût de rupture de stock est 3 fois la marge brute, c’est-à-dire 0,45€. Cela donne $${M=0.45}$$ et $${H=\frac{4}{365} \times 1.5\approx 0.0055}$$.

Sur la base de ces valeurs et de la formule pour le taux de service optimal obtenue ci-dessus, nous obtenons $$ p \approx 98,5 \text{%} $$, ce qui est une valeur typique pour les produits frais indispensables stockés dans des entrepôts approvisionnant des réseaux de magasins d’alimentation.

Denrées périssables

Question posée par Vyacheslav Grinkevych, expert en Supply Chain, le 2012-02-13 :

Je travaille sur la prévision et la planification des approvisionnements pour des produits laitiers à courte durée de vie, où le taux de service optimal est un sujet très important. L’élément le plus intéressant et compliqué ici est H – le coût de maintien et la question de sa valeur appropriée en pratique.

Par exemple, pour les produits laitiers à courte durée de vie, une partie importante de H ne devrait pas se limiter uniquement au coût financier des liquidités immobilisées dans les stocks et aux coûts logistiques opérationnels de stockage, mais inclure également le coût des pertes potentielles dues à la radiation des produits périmés ou aux ventes à prix réduits lorsque nous tentons de liquider davantage juste avant l’expiration. Cela se produit lorsque vos ventes sont bien en deçà des prévisions.

Ce compromis peut être décrit comme le risque de surstocks potentiels vs. le risque de ruptures de stock, deux risques qui agissent en sens opposé tout en ayant la même origine par nature – c’est-à-dire interconnectés avec le stock de sécurité. En cas de forte sur-prévision, qui entraîne généralement des problèmes d’expiration, les erreurs de prévision ne suivent pas une distribution normale. Je me demande donc comment mieux exprimer ces risques de surstocks potentiels.

Pour en revenir à votre formule, un développement ultérieur pourrait consister à essayer de trouver une relation entre H et p ou à faire de H une fonction de p, c’est-à-dire H(p), avant de procéder à la minimisation du coût total C(p). Qu’en pensez-vous ?

La formule du taux de service présentée ci-dessus est en effet basée sur une hypothèse simpliste où les coûts, tant de stockage que de ruptures de stock, sont strictement linéaires. Cependant, en pratique, des non-linéarités brutales peuvent être observées, telles que :

  • L’entrepôt est plein, et il arrive un moment où une unité de stock supplémentaire entraîne en réalité des frais massifs pour obtenir un emplacement d’entreposage supplémentaire.
  • Les ruptures de stock entraînent une augmentation graduelle des ventes perdues jusqu’à atteindre le point où une rupture de stock supplémentaire provoque la perte de l’ensemble du client récurrent.

Les produits périssables présentent une autre particularité : si la couverture de stock, c’est-à-dire les stocks exprimés en jours plutôt qu’en unités, se rapproche de la durée de vie avant expiration du produit, alors $${H}$$, le coût de maintien, augmente jusqu’à tendre vers une valeur infinie.

En effet, $${H}$$ représente la friction associée à la détention de stocks. Une couverture de stock supérieure à la durée de vie avant expiration du produit représente une situation absurde où, en supposant une gestion des stocks en FIFO (First In, First Out), aucun produit ne sortirait du lieu de stockage sans d’abord atteindre sa date d’expiration.

Afin de modéliser l’effet de la périssabilité des stocks, introduisons quelques durées clés :

  • $${\lambda}$$, le délai d’approvisionnement.
  • $${\lambda_\infty}$$, la durée de vie du produit avant d’atteindre l’expiration terminale (c’est-à-dire une valeur marchande nulle).
  • $${\lambda_{½}}$$, la durée qui double le coût de maintien initial du produit en raison de la perte de sa valeur marchande.
  • $${\lambda_c(p)}$$, la couverture de stock, c’est-à-dire les stocks exprimés en jours plutôt qu’en unités. Cette durée dépend du facteur de stock de sécurité, donc de $${p}$$.

Avec ces durées, nous pouvons modéliser le coût de maintien 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étaillons l’hypothèse implicite ici, car nous modifions quelque peu la notion habituelle du coût de maintien afin d’intégrer le risque de radiation.

Premièrement, nous avons $${H(0.5)=H}$$. Ceci est obtenu à partir de la définition même ci-dessus. En effet $${\lambda_c(0.5)=\lambda}$$, avec un taux de service de 50%, la couverture de stocks est égale au délai de livraison. Ainsi, nous affirmons ici que, dans ce modèle, $$H$$ représente le coût de détention où les coûts de radiation associés à un taux de service de 50% ont déjà été intégrés dans le coût $${H}$$. Il est important de noter que des stocks de sécurité nuls n’impliquent pas l’absence de radiations, seulement des radiations peu fréquentes.

Deuxièmement, pour le taux de service $${p_½}$$ tel que $${\lambda_c(p_½) = \lambda_½}$$, nous avons alors $${H(p_½)=2H}$$. Là encore, ceci n’est qu’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 détention et des coûts de radiation, par rapport à la situation de stock de sécurité nul. Il est évident qu’en pratique, le surcoût associé aux remises en fin de vie et aux radiations se traduira par des paliers discrets. Cependant, nous pensons que tenter d’exprimer ce surcoût par une durée typique qui, en pratique, serait définie comme une certaine fraction de la durée de vie du produit est susceptible d’être bien plus robuste aux diverses approximations qu’implique l’ensemble de l’approche, par opposition à un modèle plus détaillé reposant sur des variables encore plus incertaines.

Enfin, à mesure que $${p}$$ se rapproche de $${p_\infty}$$ avec $${\lambda_c(p_\infty)=\lambda_\infty}$$, alors $${H(p)}$$ tend vers l’infini, toujours par définition de la fonction adoptée pour $${H(p)}$$. À première vue, il semble étrange d’avoir un coût de détention qui dépasse le coût unitaire du produit, mais il n’y a pas de paradoxe ici. La valeur $$H(p)$$ représente le coût de friction pour expédier une unité au client. Si, en raison de radiations massives, afin d’expédier 1 unité au client final, l’entrepôt reçoit en moyenne 3 unités (2 unités périment avant d’être livrées), alors les coûts de friction seront bien supérieurs au prix unitaire initial du produit.

En résumé, $${\lambda_½}$$ n’est qu’une variable incertaine introduite. $${\lambda}$$ et $${\lambda_\infty}$$ peuvent être supposés connus. Nous pensons que ce modèle pour $${H(p)}$$ est à peu près le plus simple possible, pouvant être obtenu en introduisant une seule variable supplémentaire. Ensuite, 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 stocks, peut être considérée comme un rapport sur le délai de livraison qui inclut la demande pendant ce délai ainsi qu’un facteur de stock de sécurité normalisé. Cela 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 de minimum algébrique simple. Cependant, en adoptant une approche similaire à celle utilisée pour le calcul du economic order quantity, il est relativement simple de trouver une solution approximative en itérant par incréments de 0,1% de 80% à 99,9%. Cela représente 200 itérations pour atteindre une précision de 0,1%, ce qui serait largement suffisant pour des usages pratiques.

Utilisation pratique prévue

La formule du taux de service s’accompagne de quelques approximations, de sorte que les valeurs numériques peuvent ne pas être utilisables telles quelles : un ajustement sera généralement nécessaire. En particulier, le facteur $${\frac{1}{\sqrt(2\pi)}\approx0.4}$$ peut être ajusté en fonction des besoins. Cependant, nous pensons que cette formule permet de bien comprendre comment les taux de service respectifs de vos références devraient se comparer. Par exemple, si pour deux produits A et B, vous obtenez des taux de service respectifs de 95% (pour A) et 90% (pour B), alors pour la configuration finale de production, on s’attendrait à ce que le taux de service pour A soit supérieur à celui de B.

Ensuite, compte tenu de la nature de l’analyse réalisée ci-dessus, nous pensons que cette formule est non pertinente pour les produits associés à une demande faible ou intermittente. En effet, ces produits à faible volume sont généralement associés à un faible point de commande (0 ou 1 unité) ; et une modélisation linéaire du coût de stockage du produit n’a pas nécessairement de sens, car la complexité liée au stockage d’une référence supplémentaire doit également être prise en compte.