【これは便利!】適正発注を行った場合のトータル調達物流コストを計算するアプリ
消費財メーカーの物流ネットワークには様々な類型がありますが、エリアごとにDC(ディストリビューションセンタ)を設置して在庫し、出荷先に短いリードタイムで供給するパターンが一般的です。
その場合、戦略的に重要になるのはどこにどのくらいの広さのDCを設置するかで、戦術的に重要なのは各DCの適正在庫コントロールの方法です。
これらは別々に検討されることが多いのですが、理想を追い求めて最適化したいのなら一緒に検討すべきです。
「各DCで適正在庫コントロールすることを前提にしたトータル物流コストでDCをどこに置くか比較しよう」
というわけです。
これは管理人が昔から使っている手法ですが、この度Python+Streamlitを使ってWebアプリにしました。
> 適正発注を行った場合のトータル物流コストを計算するアプリ
※デフォルトで入っている80アイテム分のデータで毎回シミュレーションを行うため、画面更新に多少時間がかかります。
本記事では、その考え方と使い方を解説します。
想定する物流ネットワーク
日本国内に商品別に複数の工場があり、エリア別に複数のDCがあるメーカーを想定します。
下記のような物流ネットワークが典型的です。
一つのDCについて抜き出すと、下記のようになります。
このような物流ネットワークはメーカーに限ったものではなく、商社でも似たような物流ネットワークは数多く存在します。
トータル物流コストの範囲
上記のような物流ネットワークにおいて、本アプリが計算するトータル物流コストは次の通りです。
メーカーの場合です。
- 工場からDCまでの輸送コスト
- DCにおける入庫コスト
- DCにおける保管コスト
- DCで販売需要に応えられるだけの在庫がない場合に発生する欠品コスト
DCから顧客までの輸送は多くの場合小ロット配送になり、輸送コストを計算するためには配車方法が関係してきて複雑なロジックが必要になるため除外しています。
従って、本アプリが対象とするのは調達物流のみです。
トータル物流コストの算出方法
工場に対してどのタイミングでどのくらいの量の出荷指示を出すか、もしくは仕入先に対してどのように発注するかは、DCまたは商社での適正在庫コントロールに死活的に重要です。
発注方法には定期発注法、定量発注法、Min-Max発注法等がありますが、商品アイテムグループごとに出荷元がまとまっている場合には、それらグループをまとめて発注する方が輸送コストを節約できるため、本アプリでは定期発注法を適用しています。
また仕入先(工場)が複数ある場合、発注日が重なると発注や入荷作業の負荷が集中してしまうので、発注日をズラせるようにしています。
例えば、仕入先Aは月曜、Bは水曜、Cは金曜発注のように設定することが可能です。
各物流コストの算出方法は以下の通りです。
輸送コスト
仕入先(工場)ごとに商品アイテムの発注量を日別にまとめます。
この時、各アイテム1個当たりの容積(m3)がわかっていれば、各仕入先ごとの輸送m3が計算できます。
輸送トラックはサイズごとに貸切料金を設定しておきます。
例えば物量25m3から50m3までは40フィートコンテナで輸送、15m3から25m3までは20フィートコンテナで輸送する等と決め、それぞれの貸切料金がわかっていれば、仕入先ごとに輸送コストを算出することができます。
入庫コスト
倉庫への入庫料金は通常m3や個数等に比例するように設定されています。
従って、m3当たりの入庫単価を設定しておけば、上記から発注m3はわかっているので各仕入先ごとの入庫コストを算出することができます。
保管コスト
保管料金には三期制や週単位制等がありますが、本アプリでは日単位制としました。
従って、一日当たり、m3当たりの保管単価を設定しておけば、それに毎日の在庫m3を掛けることにより保管コストを算出できます。
毎日の在庫量はPythonのinventorizeライブラリを使うことで簡単にシミュレーションすることができます。
【定期発注方式】PythonのInventorizeライブラリで適正在庫シミュレーションしてみた
欠品コスト
毎日の欠品量も先述のinventorizeライブラリで簡単にシミュレーションすることができます。
後は、1個欠品するといくらの機会損失があるかを商品アイテムごとに設定しておけば、欠品量に掛けることにより欠品コストを求めることができます。
必要なマスタデータ
以上から予め設定しておくべきマスタデータは次のようになります。
商品マスタ
下記のフォーマットで必要データを入力しcsvファイルで保存後、アプリにアップロードして下さい。
輸送マスタ
下記のフォーマットで必要データを入力しcsvファイルで保存後、アプリにアップロードして下さい。
アプリの使い方
条件設定
画面左側にあるサイドバーで各種条件を設定を行います。
スマホの方は、画面左上に現れる「>」をクリックすると条件設定画面が現れます。
需要データの読み込み
発注(調達)する全アイテムの日別の需要実績データが入ったcsvファイルを作成して下さい。
一行目にアイテム名、二行目以降に需要実績データを入力して下さい。
需要データは平均や標準偏差を求めるための訓練データと、シミュレーションするための検証データに分割します。
最低でも60日分以上のデータが必要です。
デフォルトでは下記のように80アイテム、152日分のデータが読み込まれています。
マスタデータの読み込み
マスタデータは商品マスタと輸送マスタに分かれます。
先程のフォーマットで作成したcsvファイルをアップロードして下さい。
デフォルトでは下記のデータが読み込まれています。
訓練データの割合
読む込んだ需要データを訓練データと検証データに分ける際の訓練データの比率を設定します。
デフォルトでは40%に設定されています。
発注関連パラメータ
発注してから納品されるまでのリードタイム(日)、発注サイクル(日)、許容欠品率(%)、発注日オフセット(日)を各発注先別に設定します。
商品マスタに記載された発注先の数だけ設定欄が現れます。
デフォルトではすべての発注先についてリードタイム:2日、発注サイクル:3日、許容欠品率:3%。発注日オフセット:0日に設定されています。
倉庫関連コスト
入庫単価と保管単価を設定します。
デフォルトでは次のように設定されています。
シミュレーション結果の見方
シミュレーションの結果は「全体」と「明細」の2つのタブに分かれて表示されます。
全体タブ
このタブはデフォルトで表示され、「物流コスト」と「各アイテムの在庫推移(m3)」が表示されます。
「物流コスト」では輸送コスト、入庫コスト、保管コスト、欠品コストとそれらの合計であるトータル物流コストが、発注先別に色分けされて棒グラフで表示されます。(左上のグラフ)
また発注先を指定し、当該発注先分だけの各物流コストを棒グラフで表示することも可能です。(左下のグラフ)
右側にはこれらの数値が表形式で表示され、データをダウンロードすることも可能です。
「各アイテムの在庫推移(m3)」ではシミュレーション期間中における各アイテムの日々の在庫推移がグラフで表示されます。
すべてのアイテムのグラフがまとめて表示されるのではなく、選択ボックスでアイテムを指定することで一つずつインタラクティブに表示されます。
明細タブ
「明細」タブをクリックすると下記の画面に切り替わります。
ここでは先程計算された各物流コストの計算根拠を発注先別に見ることができます。
まず最初に表示されるのは「発注m3と輸送&入庫コスト」で、アイテム別/日別の発注量から計算されるm3、及びトラック車種別の台数を見ることができます。
次に表示されるのは「在庫m3と保管コスト」で、アイテム別/日別の在庫量から計算されるm3、及び保管コストを見ることができます。
最後に表示されるのは「欠品数量と欠品コスト」で、アイテム別/日別の欠品数量、及び欠品コストを見ることができます。
物流ネットワーク最適化への活用方法
ここまで見てきて、
「うちは定期発注じゃなくて、定量発注なんだよな」
とか
「うちの商品は海上輸送による海外調達が中心なんだよな」
と思われた方もいると思います。
そのような要望も簡単なカスタマイズでほとんどが対応できます。
気になる方はこちらをどうぞ。
【ここまでできる!】Webアプリを使って物流ネットワークを最適化する方法