🙌

需要予測と発注の基本

2025/01/08に公開

前書き

睡眠時間を短くすると風邪を引く確率が上がるAIエンジニアです。
十分な睡眠、適度な運動、バランスの良い食事を大事にしながら生きていきたいと思います。

我々が普段の業務で焦点を当てるのは需要予測の部分なのですが、サービスとしては"発注"まで絡んでいるということでこの記事では"発注"について学んだことを需要予測と絡めてまとめていこうと思います。

適切な在庫管理の必要性と発注

"過ぎたるは猶(なお)及ばざるが如し"という言葉があります。
どんなものにも適切な量があるという意味で使われています。
様々な事に当てはまる本質をついた言葉だと思います。

そしてこの言葉はお店が行う在庫管理についても当てはまります。

多くの在庫を用意すれば、欠品にはならないかもしれませんが商品を良い状態で維持するための費用が増え(保管コストの増加)、手元に残るお金も少なくなります(キャッシュフローの悪化)。
逆に需要より少ない在庫しか用意しないと売上の機会損失に繋がったり顧客満足度も低下してしまいます。

必要なものは必要な時に必要な分だけ用意することが理想です。
そしてこれを目的として行う業務として発注があります。

発注のやり方_大きな分類とその比較

発注のやり方には様々な方法がありますが、大きく分けるとルールベースの方法需要予測に基づく方法に分けられます。

ルールベースの方法としては
・一定の在庫数を下回った場合に決まった量を発注する方法(定量発注方式
・一定の周期で在庫を確認し足りない分を発注する方法(定期発注方式
などがあります。

ルールベースのやり方はとてもわかりやすく初心者でも実施しやすいというメリットがあります。
生活必需品など需要が安定している商品に向いています。

しかし、需要の変動には対応しにくいという問題点があります。
なので需要が変動しやすい商品に対しては需要予測に基づく方法で発注する必要があります。

パターン メリット デメリット
ルールに基づく発注 基準やルールが明確でシンプル 需要変動に対応しにくい
予測に基づく発注 データに基づいた柔軟な発注が可能 計算が複雑で導入コストを上がりやすい

上の表にも記載の通り、どちらの方法が絶対的に良いというものではないので商品に応じて適切に選択する必要があります。

需要予測に基づいた発注量の計算

基本的な考え方

ここからは需要予測に基づいて発注量を計算する流れを説明していこうと思います。

基本的な考え方は、"予測消費量から在庫を引いて足りない分を発注"です。

文字式で表すと

発注量 = 予測消費量 - 在庫

です。

安全在庫

需要予測の予測結果が100%正確であれば、上の式で計算した発注量を発注すればよいことになります。

しかし、100%正確な予測というのは現実的には不可能です。
予測にはズレが生じるものなので欠品しないために予備の在庫は欲しいところです。
この予備の在庫の概念を発注の世界では安全在庫と言います。

1つ前の式に安全在庫(予備の在庫)を追加して

発注量 = 予測消費量 + 安全在庫 - 在庫

という感じで発注量を決めると欠品のリスクが減り安心だよね、という話です。


さて、それでは安全在庫はどれだけ用意すれば良いのでしょうか?
欠品は怖いですが、それを恐れて適当に多くするだけでは需要予測を行っている意味がなくなってしまいます(^^;

実は安全在庫を決めるには複数の要因があり、それらを組み合わせて計算することになります。

まずは直感的に説明していきます。

安全在庫を決める要因は
・欠品したくない度(サービス率
・現状の予測モデルの精度
・発注から納品までの期間(リードタイム
で、これらの要因と安全在庫の関係を表でまとめると

要素 安全在庫(大) 安全在庫(小)
サービス率 高い 低い
予測モデルの精度 悪い 良い
リードタイム 長い 短い

このようになります。


ここから具体的な計算式について議論を進めていきます。
実はこの計算式は予測誤差(=予測 - 実際の値) が従う分布によって変わります。

しかし、実務的には演算量や扱いやすさの観点から予測誤差は正規分布に従うと仮定して計算するのが一般的な方法になっています。
この記事でも予測誤差が正規分布に従う場合の計算式を載せていきます。

予測誤差が正規分布に従う場合、安全在庫は

安全在庫 = 誤差平均 + 安全係数 \times 誤差標準偏差 \times \sqrt{リードタイム}

という式で計算できます。

ここで安全係数というものが出てきましたが、これはサービス率から決まる定数です。
サービス率が高い(欠品する確率を小さくしたい)場合は高くなり、サービス率が低い(欠品をある程度許容する)場合は小さくなります。

参考までにサービス率と安全係数の関係を何個かまとめてを表にしておきます。

サービス率 安全係数
99.9% 3.09
99% 2.33
98% 2.06
97% 1.88
95% 1.65
90% 1.28

※サイトによってわずかなに異なるものもありますが、有効数字の関係です。
(サービス率を99.9%にしたいときに安全係数を3.1にしても大きな問題はありません。)


ここまでの情報を文字式でまとめると

\begin{aligned} 発注量 &= 予測消費量 + 安全在庫 - 在庫 \\ &= 予測消費量 \\ &\quad + (誤差平均 + 安全係数 \times 誤差標準偏差 \times \sqrt{リードタイム}) \\ &\quad - 在庫 \end{aligned}

という計算式になります。

在庫の計算

最後に少しだけ在庫についての議論をしてみます。
今まで一言で在庫とまとめていましたが、実務上何点か考慮する点があります。

まず、賞味期限や使用期限など廃棄予定分の在庫は現在の在庫から引いておいた方が良さそうです。
また、まだ納品はされていないが既に発注している分は追加しておく必要があります。

よって在庫の部分は

在庫 = 現在の在庫 - 廃棄予定の在庫 + 発注済み分

という文字式で表すことができます。

まとめると

\begin{aligned} 発注量 &= 予測消費量 + 安全在庫 - 在庫 \\ &= 予測消費量 \\ &\quad + (誤差平均 + 安全係数 \times 誤差標準偏差 \times \sqrt{リードタイム}) \\ &\quad - (現在の在庫 - 廃棄予定の在庫 + 発注済み分) \end{aligned}

と計算することができます。

まとめ

在庫管理を適切に行うことを目的とした業務として発注がある。
発注の方法は大きく分けてルールベースの方法需要予測に基づく方法の2種類がある。

予測を使用した発注を行う場合、発注量は以下の式で計算できる。

\begin{aligned} 発注量 &= 予測消費量 + 安全在庫 - 在庫 \\ &= 予測消費量 \\ &\quad + (誤差平均 + 安全係数 \times 誤差標準偏差 \times \sqrt{リードタイム}) \\ &\quad - (現在の在庫 - 廃棄予定の在庫 + 発注済み分) \end{aligned}

ここで、安全在庫の大きさは以下の3つの要因に影響される:

  • サービス率:欠品をどれだけ許容するか(高いほど安全在庫が大きくなる)。
  • 予測モデルの精度:予測の誤差、標準偏差が小さいほど安全在庫は小さくなる。
  • リードタイム:発注から納品までの期間が長いほど、安全在庫が必要になる。

予測の精度が上がる(誤差平均が小さくなり、誤差標準偏差が小さくなる)ほど安全在庫は減少し、欠品リスクを抑えつつ在庫コストを削減できる。

後書き

需要予測と発注に関する肝の部分をまとめてみました。
発注だけとっても色々議論できる分野だと思います。
これに加えて色んな処理が組み合わさって自動発注システムができています。
作った人はすごいです。

参考

・発注と需要予測
https://str.toyokeizai.net/books/9784492531877/

https://www.tryeting.jp/column/2583/

Goals Tech Blog

Discussion