最適なサービスレベルの計算式(サプライチェーン)

learn menu
Joannès Vermorelによる、最終更新日:2012年1月

サービスレベル(在庫)は、ストックアウトが発生しない予想される確率を表します。この割合は、安全在庫を計算するために必要です。直感的には、サービスレベルは在庫コストとストックアウトのコスト(売り逃し、機会損失、顧客の不満など)のトレードオフを表します。この記事では、サービスレベルの値を最適化する方法について詳しく説明します。その後、分析は腐敗しやすい食品の特殊なケースについてさらに詳しく説明します。

この記事は、2011年当時の_classic forecasting_の視点から書かれました。しかし、数年後、量的サプライチェーンの観点からは、技術が確率的予測によって駆動される場合、サービスレベルを最適化する必要はなくなるということがわかりました。

モデルと計算式

古典的なサプライチェーンの文献では、サービスレベルに採用すべき数値についてはやや曖昧です。以下では、在庫とストックアウトのコストをモデル化して、_最適な_サービスレベルを計算することを提案します。

以下の変数を導入しましょう:

  • $${p}$$はサービスレベルであり、ストックアウトが発生しない確率です。
  • $${H}$$はリードタイムの期間における単位あたりの_保管コスト_です(1)。
  • $${M}$$はストックアウトの単位あたりの限界コストです(2)。

Excelシートをダウンロード: service-level-formula.xlsx(計算例)

(1) ここで考慮されている時間範囲はリードタイムです。したがって、通常よりも一般的な年間保管コスト$${H_y}$$の代わりに、$$d$$が日数で表されるリードタイムを考慮して、$${H = \frac{d}{365}H_y}$$とします。

(2) ストックアウトコストには、最低限の粗利益が含まれます。つまり、ストックアウトが発生しなかった場合に生成された即時の利益です。ただし、粗利益の損失だけがコストではありません。例えば、顧客の不満や顧客のロイヤリティの喪失も考慮する必要があります。経験則として、多くの食品小売業者は$$M$$を粗利益の3倍と考えています。

最適なサービスレベルは次のようになります(推論の詳細は以下に示します):

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

Where $${\Phi}$$は正規分布に関連する累積分布関数です。この値はExcelで簡単に計算できます。$${\Phi}$$はNORMSDIST関数です。また、数値計算のために、$${\sqrt{2 \pi} \approx 2.50}$$とします。

コスト関数

コスト関数をモデル化するために、さらに2つの変数を導入しましょう:

  • $${Q}$$は_償却_在庫数量(3)であり、$${p}$$に依存する関数です。
  • $${O}$$は在庫切れが発生した場合の_平均_需要超過です。

(3) ここでは償却解析の視点を採用しています。在庫レベルは常に変動していますが、分析を実用的にするために、需要予測自体から切り離されたサービスレベルの値を得ることが目標です。したがって、$${Q}$$を再発注点とみなします(詳細は安全在庫のガイドを参照してください)。

あるサービスレベルに対して、在庫保有コストとストックアウトコストの両方を組み合わせた総コスト$${C(p)}$$は次のように書けます:

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

ここで、$${Q(p)H}$$は在庫コストであり、$${MO}$$はストックアウトコストであり、確率$${1-p}$$でのみ発生します。安全在庫チュートリアルで導入された式を使用し、$$Q(q)$$がリオーダーポイントに等しいため、$${Q(p) = Z + \sigma \Phi^{-1}(p)}$$となります。ここで$${Z}$$はリード需要、$${\sigma}$$は予測誤差の期待値、$${\Phi(p)^{-1}}$$は標準正規分布(平均0、分散1)に関連する累積分布関数の逆数です。

平均的な売り逃しの分析

平均的な売り逃しの分析は微妙です。需要の分布が正規分布$${\mathcal{N}}$$であり、$${q}$$が利用可能な在庫であると考えると、$${O(q)}$$は、$${x > q}$$の条件付き平均需要$${x}$$(利用可能な在庫$${q}$$を引いたもの)です。つまり:

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

関数を(1)で参照してください。

この結果は、需要が厳密に正規分布に従っている場合、在庫レベルが増えるにつれて、在庫切れの条件付きイベントでの平均的な売り逃しの数量がゼロに収束することを示しています。

しかし、私たちの経験では、予測誤差は正規分布が予測するよりも収束性が良くありません。したがって、以下では、$${O=\sigma}$$と仮定します。つまり、売り逃しの平均量は_平均予測誤差_と等しいということです。これは明らかに経験則であり、詳細な分析ではありませんが、実際のところ、この近似は合理的な結果を与えることがわかっています。

コスト関数の最小化

$${C(p)}$$の式にここで定義された置換を適用することで、次のようになります:

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

そして、$${C(p)}$$の式は次のように$${p}$$で微分することができます:

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

最小値を求めるために、$${\frac{\partial C}{\partial p} = 0}$$を解こうとします。これにより、次の結果が得られます:

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

これは、$${\sigma}$$で簡略化することができます:

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

最終的には:

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

その後、$${\partial \Phi^{-1}}$$と$${\Phi^{-1}}$$の関係を使用します:

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

等式の視覚的な証明のために、(1)(2)を比較することができます。

この関係により、次の結果が得られます:

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

方程式の正の解を取ります(負の解は関数の局所的な最大値に対応します):

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

最終的に、両辺に$${\Phi}$$を適用することで、最適なサービスレベルが得られます:

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

公式の議論

この公式の最初の興味深い側面は、最適なサービスレベルが$${H}$$(在庫コスト)と$${M}$$(欠品コスト)にのみ依存することです。ただし、$${H}$$はリードタイムの期間の運搬コストとして定義されているため、リードタイムには暗黙の依存関係があります。

さらに、在庫コストが大きいほど最適なサービスレベルは低下し、同様に欠品コストが大きいほどサービスレベルは増加します。この振る舞いは非常に直感的です。サービスレベルは在庫と欠品のトレードオフです。

次に、この公式はすべての$${M}$$と$${H}$$の値に対して有効ではありません。$${\sqrt{2\pi}\frac{M}{H} > 1}$$が必要であり、そうでない場合、対数は負の値を生成し、外側の平方根では扱えないためです。これにより、$${M > \sqrt{2 \pi} H}$$となり、これは$${M > 2.5 H}$$と近似できます。この条件が満たされない場合、初期のコスト関数$${C(p)}$$には最小値がない、または$${p=0}$$の場合の最小値が$${-\infty}$$であることを意味します。実践的な観点からは、$${M < 2.5 H}$$は、最も利益の高い在庫レベルが在庫なし(つまり100%の欠品)であると解釈できる病的な状況を意味します。

実践的な例

1.50€の販売価格で販売される1Lの牛乳パックを考えてみましょう。マージンは10%(つまり0.15€の粗利益)です。リードタイムは4日とします。年間の運搬コストは1.50€です(牛乳は高い腐敗しやすい製品であるため、値段が高くなります)。欠品コストは粗利益の3倍であるため、0.45€です。これにより、$${M=0.45}$$および$${H=\frac{4}{365} 1.5\approx 0.0055}$$となります。

これらの値とここで得られた最適なサービスレベルの公式に基づいて、$$ p \approx 98.5 \text{%} $$となります。これは、食料品店ネットワークに供給する倉庫に保管される必須の生鮮食品の典型的な値です。

腐敗しやすい食品

2012-02-13に供給チェーンの専門家であるVyacheslav Grinkevychが提起した質問:

私は短命の乳製品の予測と供給計画に取り組んでおり、最適なサービスレベルは非常に重要な問題です。ここで最も興味深いかつトリッキーな要素はHであり、実践的な価値に関する問題です。

たとえば、短命の乳製品の場合、Hの重要な部分は純粋な財務的な在庫に凍結された現金と運用ロジスティクスの保管コストだけでなく、期限切れ商品の廃棄や期限切れ直前により多く売り出そうとする際の割引販売による潜在的な損失のコストも含まれるべきです。これは、販売が予測を大幅に下回る場合に発生します。

このトレードオフは、潜在的な過剰在庫のリスクと潜在的な欠品のリスクとして説明できます。これらは同じ起源であり、安全在庫と関連しています。大幅な過剰予測の場合、通常は期限切れの問題を引き起こしますが、予測誤差は通常分布しません。したがって、このような_潜在的な過剰在庫のリスク_をよりよく表現する方法について考えています。

あなたの式に戻ると、Hとpの関係を見つけるか、Hをpの関数にすること、つまりH(p)にすることを試みることが、総費用C(p)の最小化に進む前にさらなる開発の可能性があります。この問題についてどのような考えをお持ちですか?

ここで与えられたサービスレベルの式は、貯蔵と欠品の両方のコストが厳密に線形であるという単純化された仮定に基づいています。しかし、実際には、以下のような非線形性が見られることがあります。

  • 倉庫がいっぱいで、1つの余分な在庫が追加の倉庫場所を取得するという大量のオーバーヘッドを引き起こすポイントがあります。
  • 欠品により、追加の欠品が継続的な顧客の喪失を引き起こすまで、増分の失われた売上が発生します。

腐敗しやすい製品には別のトリックがあります。在庫カバー、つまり在庫の単位ではなく日数で表される在庫が製品の有効期限に近づくと、$${H}$$、つまり保有コストが無限大に向かって増加します。

実際には、$${H}$$は、最初に在庫を持つことに関連する_摩擦_を表しています。製品の有効期限を超える在庫カバーは、不条理な状況を表しており、FIFO(先入れ先出し)在庫を仮定すると、製品は最初にその有効期限に達することなく、保管場所から出ることはありません。

在庫の_腐敗性_の効果をモデル化するために、いくつかの主要な期間を導入しましょう:

  • $${\lambda}$$、リードタイム
  • $${\lambda_\infty}$$、終端の有効期限(つまり、市場価値がゼロになるまでの寿命)。
  • $${\lambda_½}$$、市場価値の喪失により、製品の保有コストが2倍になる期間。
  • $${\lambda_c(p)}$$、在庫カバー、つまり在庫を製品単位ではなく日数で表したもの。この期間は安全在庫係数に依存し、したがって$${p}$$に依存します。

これらの期間を使用して、保有コストを次のようにモデル化できます:

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

ここでの暗黙の仮定を詳細に説明しましょう。書き込みオフのリスクを考慮するために、通常の保有コストの概念をいくらか曲げています。

まず、$${H(0.5)=H}$$です。これは、上記の定義から得られます。実際には、サービスレベルが50%の場合、在庫カバーはリードタイムと同じになるため、在庫カバーがリードタイムと等しいと述べています。したがって、このモデルでは、$$H$$は、サービスレベルが50%の場合に関連する書き込みオフのコストが既にコスト$${H}$$に組み込まれている保有コストを表していると述べています。ゼロの安全在庫はゼロの書き込みオフを意味しないことに注意することは注目に値しますが、まれな書き込みオフのみを意味します。

次に、$${\lambda_c(p_½) = \lambda_½}$$となるサービスレベル$${p_½}$$に対して、$${H(p_½)=2H}$$となります。これも、$${H(p)}$$の採用された定義の結果にすぎません。直感的には、$${\lambda_½}$$は、ゼロの安全在庫の状況と比較して、保有コストと書き込みオフコストの組み合わせを2倍にする期間を表しています。実際には、エンドオブライフの割引と書き込みオフに関連するコストオーバーヘッドは、離散的なステップを経ることが明らかです。ただし、このオーバーヘッドを、実際には製品の寿命のある一定の割合として定義されるであろう典型的な期間を介して表現しようとすることは、全体的なアプローチに伴うさまざまな近似に対してはるかに弾力性があり、さらに不確実な変数に依存するよりも、より細かいモデルに頼ることができると考えています。

最後に、$${p}$$が$${p_\infty}$$に近づくにつれて、$${H(p)}$$は無限に近づきます。これも、$${H(p)}$$の採用された関数の定義によるものです。一見すると、製品単価を超える保有コストがあることは奇妙に思えますが、ここには矛盾はありません。値$$H(p)$$は、クライアントに1ユニットを出荷するための摩擦コストを表しています。大量の書き込みオフのために、最終的なクライアントに1ユニットを出荷するために、倉庫は平均して3ユニットを受け取る必要がある場合(2ユニットが配信される前に期限切れになる)、摩擦コストは製品の元の単価よりもはるかに大きくなります。

要約すると、$${\lambda_½}$$は導入される不確実な変数の1つに過ぎません。$${\lambda}$$と$${\lambda_\infty}$$は既知として安全に仮定できます。$${H(p)}$$のこのモデルは、1つの追加変数のみを導入することで達成できる可能性のある最も単純なものだと考えています。そして、$${\lambda_c(p)}$$については、適度な近似を行うと、次のようになります:

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

実際には、在庫カバーである$${\lambda_c}$$は、リードタイムを含むリード需要と正規化された安全在庫係数の比率として見ることができます。これにより、代替コスト関数が得られます:

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

以前のコスト関数とは異なり、この関数は単純な代数的な最小値を持っているようには見えません。しかし、経済的発注量の計算に使用される手法に似たアプローチを採用することで、80%から99.9%まで0.1%刻みで反復することで、おおよその解を比較的簡単に見つけることができます。これにより、実用的な目的には十分すぎる0.1%の精度を達成するために200回の反復が必要です。

意図された実用的な使用

サービスレベルの式にはいくつかの近似が含まれているため、数値はそのままでは使用できない場合があります。通常、少しの調整が必要です。特に、因子$${\frac{1}{\sqrt(2\pi)}\approx0.4}$$は必要に応じて調整できます。ただし、この式は、アイテムのそれぞれのサービスレベルがどのように比較されるべきかについて良い洞察を与えると考えています。たとえば、2つの製品AとBについて、それぞれ95%(Aの場合)と90%(Bの場合)のサービスレベルを得た場合、最終的な生産設定では、AのサービスレベルがBのサービスレベルよりも高いことが期待されます。

したがって、ここで行われた分析の性質を考慮すると、この式は需要が低いまたは断続的な需要に関連する製品には関連しないと考えています。実際、このような低容量の製品は通常、0または1ユニットの低い再発注ポイントに関連しており、製品の保管コストの線形モデリングは、1つの追加参照の複雑さも考慮する必要があるため、必ずしも意味をなさない場合があります。