私たちは、予測需要に基づいて再注文点を計算するために使用される式を提供する入門チュートリアルを公開しました。需要の不確実性、リードタイム、およびその他の要因に基づいて需要を予測することによって、需要を予測する再注文点を計算する式です。

この_古典的な_安全在庫計算には、需要に関するいくつかの重要な仮定があります。すでにリードタイムの変動の取り扱いについて投稿しています。そして、古典的な式にはもう1つの暗黙の仮定があります: バイヤーは独立していると仮定されています

最近、教室に頻繁に大量の商品を販売する企業からアプローチを受けました。ほとんどの販売は1点注文ですが、時折、教室全体の20〜30点の注文があります。以下のグラフは、断続的な大量購入の結果としての販売パターンを示しています。

免責事項: 数字は創作であり、いくつかの結果は単純化のために広く概算されています

これらの12か月間で、2つのパターンが見られます:

  • 平均して月に13注文を占める単一ユニットの継続的な注文。
  • 平均して+30注文を占める断続的な大量販売。

平均月間販売数は月に23注文ですが、大量注文要因を除くと、平均購入数は月に13注文に減少します。

では、この状況での_適切な_安全在庫は何でしょうか?典型的な設定で古典的な安全在庫式を考慮すると、再注文点はおおよそ30点に設定されます: 月平均23注文に加えて、需要の不確実性をカバーする安全在庫自体。30点の大量購入は、数点の不足が発生する可能性が非常に高いです。

しかし、_古典的な_安全在庫計算は最適でないことがわかります: ここでは、_個々の_購入に対処するために必要なアイテムの約2倍を保管しているにもかかわらず、安全在庫は大きな大量購入をカバーするには十分ではありません。

大量購入に対処するために、このパターンを考慮に入れた安全在庫式を改良する必要があります。簡単のため、後で安全在庫式に再統合される_単一要因_として大量購入パターンをモデル化することにします。

販売の_大量性_を反映するために、販売される各アイテムの**_最大_購入**を考慮することができます。ただし、この値は統計的意味で堅牢ではなく、1つの超大型の歴史的購入が結果を完全に歪める可能性があります。

代わりに、すべての注文が最小数量から最大数量まで順に並べられた図で示されているように、大量注文数量分布の分位数を考慮すべきです。

この安全在庫分析では、Qに採用される分位数値には自然な適合があります: 古典的な安全在庫式で定義される_サービスレベル_と等しくなければなりません - つまり、ストックアウトが発生しない確率を示す希望確率です。

Qに採用される分位数値をy``Qと呼びましょう(この図ではy``Q = 30)。技術的には、y``Qは分位数_Q_で取られた販売関数の_逆累積分布_です。再注文点の計算は次のようになります:

R = D + MAX(σL * cdf(P); y``Q``)

σL * cdf(P)は需要の不確実性に基づいて計算された_安全在庫_です。

Excelでy``Qを計算するのは少し手間がかかります。逆累積分布のPERCENTILE関数に相当するものがないため、ヒストグラムスキームまたはVBAマクロに頼る必要があります。

以下に貼り付けられたExcel用の_ICMD_ユーザー定義関数は、Excelの範囲にリストされた販売注文が昇順で並べ替えられていると仮定して、y``Qの計算を実行します。

’ 逆累積分布
Function ICMD(r As Range, q As Double)
    ’ 合計を計算
    Dim s As Double
    For Each c In r
        s = s + c.Value
    Next
    ’ 閾値を見つける
    Dim a As Double
    For Each d In r
        a = a + d.Value
        If a >= (q * s) Then
            ICMD = d.Value
            Exit For
        End If
    Next
End Function

サンプルデータに適用されたこの洗練された式に基づいて、再注文点R = 13(需要予測)+ 30(大量数量)= 43を得ます。これは、在庫をできるだけ少なく保ちながら、大量購入に対処するのに十分な確率であります。

あなたもビジネス固有の制約を持っていますか?お知らせください。Salescastを調整して、あなたのビジネスにより適したものにすることができます。


読者コメント(1)

私の取引でも同様の問題があります。非常に興味深い記事です。Martin(8年前)