1商品(SKUではなく商品ページ単位であり今回はタンブラーを例とする。)の売り上げ最大化と在庫量の最適化。
売り上げ最大化だけならすべてのカラーの在庫を売り切れないように多く持ち続ければよいが、現状売れる商品のカラーに偏りがあり、なにかしらのカラーが売り切れるたびに適当に発注すると無駄な在庫を長期間もつ可能性がある。
- 商品を最適なバランスで発注した際に在庫量が発散していくか否かの確認
- ある値に収束していく場合どのくらいの平均で在庫量(金額)を持たなければいけないか。
- 仮にもう1色増やしたらどのくらい平均在庫量(金額)が増えるか。
- 1カラー100個単位
- 全部のカラーの合計で最低600個以上
- 単純化のため直近1年間の各カラーの販売個数を12で割った数を各カラーごとの月に売れる販売個数(平均月間販売個数)とする。
- 現状は5カラー取り扱っている。
最初は売り切れそうなカラーを最低100個発注し、残りは発注後の各カラーの在庫を平均月間販売個数でわったもの(何か月分の在庫があるか:在庫持続期間としてます)を合計し、その合計値を最小化する問題を解こうとアプローチした。
しかしその場合だと切れそうなカラー以外は平均月間販売個数が1番多いカラーをただ購入するだけになった。(よくよく考えれば当然だったが・・・)
そのため最終的には売り切れそうなカラー最低100個発注し、残りは発注後の各カラーの月の在庫持続期間の分散を最小化(≒発注頻度の最小化)するように発注する問題を解くようなアプローチにした。 ただpulpでは分散のような二次式がでてくるような問題は解けないため、平均偏差を最小化する問題として解いた。
最終的に在庫は一定の値に収束し、平均在庫量も分かった。もう1色増やした場合も収束し、平均在庫量(金額)はX円ぐらい増えて、月Y円利益がみこめることが分かった。
しかしその程度なら現状だと他の費用に使ったほうがよさそうなので、色は増やさずに最適な在庫を発注し続けることした。
- numpy
- pandas
- matplotlib
- pulp