任意の出庫分布に対応した在庫管理:シミュレーションを用いた在庫最適化

目次

在庫最適化とは

小売業や卸売業などの在庫管理において、「いつ」「どれだけ」発注し、どの程度の在庫を保有するかという問題は昔から存在します。このような問題を総称して在庫最適化問題と呼びます。在庫水準を決定する際には、以下の2つの相反する目的をバランスよく達成する必要があります。

  • 保管コストを低くし、利益率を高めるため、在庫水準をなるべく少なくするべき
  • 欠品率を低くし、機会損失を防ぐため、在庫水準をなるべく多くすべき

このために、例えば在庫金額あたりの利益率を最大化するなどの可能性も考えられますが、実務では、欠品率(サービスレベルとも言います)を管理することによって最適化を行うことが多いです。

欠品率(サービスレベル)の管理による在庫最適化

全体の在庫金額を一定にしつつ、欠品の金額を最小化するには、品目間で欠品率を同じにするのが最適であることが、数学的に示せます。(ご興味のある方は本記事の「参考:欠品率一定による在庫最適化の根拠」をご覧ください。技術的になるので飛ばしても大丈夫です。)

しかし、特定の商品が得意先との関係等のために戦略的に重要であったり、あるいは在庫金額と保管コストが大きく異なる場合等(あるものは高価格で小さく、あるものは低価格でかさばるなど)、欠品率を均一にすることが適切でない場合も考えられます。そのような場合には、ABC分析と言って、商品群によって目安となる欠品率を変えるという事も行われます。

保護期間について

では、欠品率を見るには、どのタイミングを考えればよいのでしょうか?その答えとしては、最も在庫量が少なくなる時点で欠品するかを見ればよいです。現時点で発注した後、発注から最も在庫が少なくなるタイミングまでの期間の事を保護期間と呼ぶことにします1。保護期間の長さは、商品の発注タイミングによって2種類に分けられます。

  • 随時発注が可能な場合
    • 発注した商品が到着する直前の欠品率を見ればよい
    • ⇒よって、入荷リードタイムの期間における出庫分布を見て、出庫>在庫+予定入庫となれば欠品となる
  • 定期発注の場合
    • 次回発注分が入荷する直前の欠品率を見ればよい
    • ⇒よって、入荷リードタイム+発注間隔の期間における出庫分布を見て、出庫>在庫+予定入庫となれば欠品となる

出庫数を正規分布で近似することによる発注点計算とその限界

実務的には、1日あたりの出庫数を正規分布で近似し、必要発注量を計算することも多いです。正規分布を使うことのメリットとしては、

  • N日分の出庫量も正規分布に従うため、必要発注量の計算が簡単
  • よく知られた分布であり、出庫量が上位何パーセントの場合の出庫量のしきい値はどれくらいかということが比較的簡単にわかる

ということがあります。ただし、実際の場合においては、出庫分布が正規分布と大きく異なる場合もあります。弊社プロジェクトの場合も、正規分布に比べて右に裾の長い、歪んだ分布となっていました。

シミュレーション(モンテカルロ法)による発注点計算

そこで、特定の需要分布を仮定しない方法(経験分布を用いる方法)として、モンテカルロ法によるシミュレーションがあります2

モンテカルロ法とは

モンテカルロ法とは、確率的に起きる事象について、乱数を発生させてシミュレーションさせる手法のことで、カジノで有名なモナコのモンテカルロにちなんで命名されました。

この発注点計算の場合には、例えば欠品率0.1%となる在庫の水準を求めたいとき、例えば100万回の在庫シミュレーションを行い、1000回欠品することがあるような在庫の水準を設定すれば、求める在庫水準に近い水準が得られます。

コンピューターの発達した現代においては、正確なシミュレーションがノートパソコン程度の計算資源でも達成できるため、この手法による発注点計算は容易です。また、リードタイムも固定ではなく確率的に決まるような場合においても、モンテカルロ法による発注点計算を行うことができます。

弊社の取り組み

弊社は、上記のシミュレーションを用いた在庫最適化を試験的に運用する予定です。既存の在庫管理システムと連携し、在庫削減・欠品率の減少を両立させるシステムを実用化しようとしております。

そのため、発注点を求めるロジックを実装した後、実際のデータに対して在庫量・欠品率等を両立できるかというシミュレーションも行い、実運用に備えています。

最後に

在庫最適化、特に在庫削減や欠品率改善に関して課題を感じていらっしゃる方や、こちらの取り組みに関してご興味のある方がいらっしゃいましたら、是非お問い合わせフォームからご連絡くださいませ。

参考:欠品率一定による在庫最適化の根拠

在庫管理では、限られた在庫量を複数の品目に配分する必要があります。
ここでは、総在庫金額を一定としたとき、欠品金額期待値の総和を最小化する条件が、各品目の欠品率を一定にすることであることを示します3。品目iiの出荷金額をxix^i、在庫金額をxthix_{th}^iとし、xix^iの確率分布をp(xi)p(x^i )とします。

以下の①⇒②と②⇒①を示し、①と②が同値であることを示します。

①決まった合計在庫金額に対する欠品金額の期待値の全品目の総和が最小である

②欠品率が各品目について同じである(欠品率=出庫金額xix^iが在庫金額xthix_{th}^iより大きい確率)

まずは、①⇒②を示します。

①を満たす解を求めるため、Lagrangeの未定乗数法を用います4
全品目の在庫金額の和が一定という束縛条件(xthiC=0\sum x_{th}^i – C = 0)を用いて欠品金額の期待値の全品目の総和(iEi(xthi)\sum_i E_i (x_{th}^i))を最小化します。
拘束条件の勾配(xthiC)=(1,1,1)\nabla (\sum x_{th}^i – C)= (1,1, \cdots 1)が0ベクトルでないため、拘束面の接平面および法線ベクトルが定義できます。このとき、最適点では目的関数の勾配が拘束面の法線ベクトルと平行になるため、(iEi(xthi))=λ(ixthiC)\nabla (\sum_i E_i (x_{th}^i)) = \lambda \nabla (\sum_i x_{th}^i -C)が成立します。

従ってラグランジュ関数(𝑥th𝑖)=iEi(xthi)λ(xthiC)\mathcal{L}(𝑥_{th}^𝑖 )=\sum_i E_i (x_{th}^i)−\lambda(\sum x_{th}^i – C)を考えると、各𝑖についてddxthi=0\frac{d\mathcal{L}}{d x_{th}^i}=0すなわちdEidxthi=λ\frac{dE_i}{dx_{th}^i}=\lambdaが導かれます。
よって、各品目の欠品分の金額の期待値E(xthi)=xthi(xixthi)p(xi)dxiE(x_{th}^i) = \int_{x_{th}^i}^\infty (x^i – x_{th}^i) p(x^i) dx^iを各品目の在庫金額xthix_{th}^iで微分したもの(限界欠品金額期待値)が各品目について等しくなります。

dEdxthi=ddxthi[xthixip(xi)dxi]dxthidxthixthip(xi)dxixthiddxthi[xthip(xi)dxi]\frac{dE}{dx_{th}^i} = \frac{d}{dx_{th}^i} \left[ \int_{x_{th}^i}^\infty x^i p(x^i) dx^i \right] – \frac{dx_{th}^i}{dx_{th}^i} \int_{x_{th}^i}^\infty p(x^i) dx^i – x_{th}^i \frac{d}{dx_{th}^i} \left[ \int_{x_{th}^i}^\infty p(x^i) dx^i \right]
=xthip(xthi)xthip(xi)dxi+xthip(xthi)=xthip(xi)dxi = -x_{th}^i  p(x_{th}^i )- \int_{x_{th}^i}^\infty p(x^i )dx^i +x_{th}^i  p(x_{th}^i ) = -\int_{x_{th}^i}^\infty p(x^i) dx^i

ここで、xthip(xi)dxi\int_{x_{th}^i}^\infty p(x^i) dx^iは品目iiの欠品率であるので、欠品率は品目間で一定になります。
よって①⇒②は示されました。

次に、②⇒①を示します。
欠品率一定を満たす解を𝒙thi𝒙_{th}^{*i}とし、合計在庫金額が同じだが欠品率が一定でない任意の在庫金額を𝒙thi𝒙_{th}^iとします。
dEidxthi(xthi)\frac{dE_i}{dx_{th}^i}(x_{th}^{*i})(=−欠品率)はすべての𝒊について同じなので𝜶とおきます。
EiE_iEi(xthi)=p(xthi)>𝟎E_i”(x_{th}^i)=p(x_{th}^i)>𝟎なので下に凸な関数になっています。
凸性より

Ei(xthi)Ei(xthi)+Ei(xthi)(xthixthi)E_i (x_{th}^i) \geq E_i(x_{th}^{*i}) + E_i'(x_{th}^{*i}) (x_{th}^i – x_{th}^{*i} )

となり、iiについて和を取って

iEi(xthi)iEi(xthi)+α(ixthiixthi)\sum_i E_i (x_{th}^i) \geq \sum_i E_i(x_{th}^{*i}) + \alpha (\sum_i x_{th}^i – \sum_i x_{th}^{*i} )

となります。合計在庫金額は同じとしているのでixthi=ixthi\sum_i x_{th}^i = \sum_i x_{th}^{*i} であり、

iEi(xthi)iEi(xthi)\sum_i E_i (x_{th}^i) \geq \sum_i E_i(x_{th}^{*i})

となり、よって欠品率一定のときに欠品金額期待値の和が最小になっています。
よって、②⇒①も示されました。

①⇒②かつ②⇒①であるので①と②は同値であり、総在庫金額を一定としたとき、欠品金額期待値の総和を最小化することが各品目の欠品率を一定にすることであることと同じであることが示されました。

  1. 英語ではProtection Intervalと呼びますが、日本語で一般的に保護期間と呼ばれている訳ではないのでご注意ください。 ↩︎
  2. モンテカルロ法ではなく、1日の出庫分布からN日の出庫分布を畳み込みによって求める方法もありますが、試したところ計算速度が遅かったためモンテカルロ法による発注点計算を採用しました。 ↩︎
  3. 証明の原案はChatGPTによるものです。 ↩︎
  4. Lagrange未定乗数法については、Wikipedia学びTimesの解説などをご覧ください。 ↩︎
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次