📦

安全在庫の考え方を理解する

2024/08/01に公開

安全在庫とは?

安全在庫 (safety stock) とは、需要の変動や供給の遅れに対応するために、通常の在庫量に加えて保持される余分な在庫のことです。安全在庫は、不測の事態によって商品が不足しないようにするためのバッファ(緩衝材)として機能します。適切な安全在庫を維持することは、顧客満足度を高め、販売機会の損失を防ぐために重要です。

以下の式で在庫数を決めることで、欠品の確率を一定値に抑えることができます。

  在庫数 = 平均出荷数 + 安全在庫

安全在庫の計算方法はいろいろありますが、ここでは一番有名な

  安全在庫 = 安全係数 × 出荷数の標準偏差 × sqrt(リードタイム + 発注間隔)

という式の導出過程について説明します。

安全在庫の計算式

安全係数を \alpha、出荷数量の標準偏差を \sigma、発注リードタイムを L、発注間隔を T としたとき、安全在庫 S は以下の式で計算できます。

S = \alpha \sigma \sqrt{L + T}

安全係数は許容できる欠品率 p によって決まります。代表的な値は以下の表の通りで、例えば 5 % の確率で欠品が許容される時には \alpha = 1.65 を使います。

欠品率 p 安全係数 \alpha
0.1 % 3.10
1.0 % 2.33
2.0 % 2.06
5.0 % 1.65
10.0 % 1.29

より具体的には、標準正規分布の累積分布関数

\Phi(a) = \int^a_{-\infty} \frac{1}{\sqrt{2 \pi}} \exp\left( -\frac{x^2}{2} \right) \mathrm{d}x

の逆関数を \Phi^{-1} を使って、

\alpha = \Phi^{-1}(1 - p)

と計算します。

発注リードタイムは、製造元・納品元に対して発注を行ってから、倉庫などへ納品されるまでの日数であり、発注間隔は前回の発注から次回の発注までの日数です。発注方式によって以下のような亜種があります。

  • 毎日商品を必要な数だけ補充するような運用を考えた場合、リードタイムは 0 日、発注間隔は 1 日なので、S = \alpha \sigma で計算できる。
  • 在庫数が閾値になったら発注する発注点方式の場合は、発注点から納品までの間の安全在庫を計算できれば良いので、S = \alpha \sigma \sqrt{L} となる。
  • 一定の間隔で発注を行う定期発注方式の場合は、発注から納品完了までの日数 L + T の期間の安全在庫を計算したいので、S = \alpha \sigma \sqrt{L + T} を使う。

導出過程

1 日単位での出荷数量 x_t は毎日変動しますが、平均 \mu、分散 \sigma^2 の独立な正規分布に従うものと仮定します。

x_t \sim \mathcal{N}(\mu, \sigma^2)

ここでは、例として発注点方式を採用し、発注時に安全在庫を計算することを考えます。発注から納品まで L 日かかりますが、納品されるまでの間も出荷は行われるため、不確実性は積み上がっていくことになります。L 日間の合計出荷数量 x_{1 \dots L} の分布は、正規分布の平均・分散の加法性により

x_{1 \dots L} = \sum_{t=1}^{L} x_t \sim \mathcal{N}(L \mu, L \sigma^2)

に従います。

発注時の在庫数を z とすると、x_{1 \dots L} > z ならば出荷数が在庫数を超過して欠品が発生します。この確率を欠品発生率 p に抑えたいので、

p = P(x_{1 \dots L} > z)

となるような z を求めれば良いことがわかります。P(x_{1 \dots L} > z) は正規分布に対して、以下の図の領域の面積を求めれば良いので、

次のように計算することができます。

\begin{align*} P(x_{1 \dots L} > z) & = 1 - P(x_{1 \dots L} \le z) \\ & = 1 - \int^z_{-\infty} \frac{1}{\sqrt{2 \pi \sigma^2}} \exp\left( -\frac{(x - L \mu)^2}{2 L \sigma^2} \right) \mathrm{d}x \\ & = 1 - \Phi\left( \frac{z - L \mu}{\sqrt{L} \sigma} \right) \end{align*}

であるため、

\frac{z - L \mu}{\sqrt{L} \sigma} = \underbrace{\Phi^{-1}(1 - p)}_{= \alpha}

となり、

z = L \mu + \underbrace{\alpha \sigma \sqrt{L}}_{= S}

という式が導かれます。L \muL 日間の合計出荷数の平均値で、\alpha \sigma \sqrt{L} は安全在庫です。冒頭に紹介した

  在庫数 = 平均出荷数 + 安全在庫

という式になっていることがわかります。

定期発注の場合も、LL + T に置き換わるだけで、導出過程は同じです。

安全在庫は万能ではない

安全在庫の考え方はわかりやすく、欠品率さえ決めてあげれば在庫数の目安がわかります。また、発注点などの他の指標の計算にも活用することができ、とても便利な数値です。

一方で、いくつかの欠点があることも指摘されています。

  • 過剰な在庫数になりがち
    • 欠品の確率をコントロールすることしか考えてないので、愚直に使うと在庫が多くなります。
    • 過剰在庫も考慮した適正在庫という考え方もあります。
  • リードタイムの不確実性を考慮していない
    • 今回はリードタイムを定数として扱いましたが、一般的には製造や配送などの都合でリードタイムも変動します。
    • リードタイムを確率変数として扱うモデルもあります。最近だと APIM というモデルが優れていると聞きました。
  • 出荷数の分布が正規分布ではないと不適切な結果になる恐れがある
    • 季節変動や割引セールなどの影響により、正規分布から大きく離れることがありえます。
    • 時系列予測モデルを組み合わせて、以下のように計算すると、改善される可能性があります。
      • 在庫数 = 予測値 + 安全在庫
      • 安全在庫 = \alpha × 予測誤差の標準偏差 × \sqrt{L}

余談

定期発注方式を採用する場合、発注してから納品されるまで L + T 日かかるため、\alpha \sigma \sqrt{L + T} で安全在庫を計算するという説明をしましたが、個人的には疑問が残ります。L + T の間に前回発注した分が納品されて在庫数が回復するので、それによる不確実性の低下を考慮しなくてはいけない気がしています。もっと言うと、納品周期は T であるため、直感的にはリードタイムを無視して \alpha \sigma \sqrt{T} で計算できそうに思えます。

詳しい方、教えてください!

Discussion