需要予測(ケーススタディ5)
注意:このケーススタディは,幾つかの企業のコンサルティングから抽出したもので,特定の企業を想定したものではない.データや登場人物は,架空のものである.
あなたは,社内全体にプレゼンをしたところ,過去の需要に対する計画は役に立たないとの指摘を受けた. 将来の需要予測をしようと考えたが, 今,与えられているのは,過去1年分のデータだけなので,まずはそれを使ってこの先1年分の需要予測を行うことにした.
SCMOPTには,ベイズ推論に基づく B-Forecastと深層(機械)学習に基づく D-Forecast があるので,まずは特定の製品と顧客に対して,それらを利用して予測を行うことにする.
ベイズ推論で予測
ベイズ推論を使うと,傾向変動や季節変動を自分でコントロールすることができる.まずは,今回使うデータは,日ベースのデータなので,週次と年次の2つの季節変動を加え,傾向変動を(区分的)線形関数と仮定して予測をしてみると,以下のような結果が得られる.
どうやら,年度末の下降傾向が引き続き起こると考えて予測しているようだ.確認のため,予測要因ごとに図示してみると,週の波動や年次の波動はきちんと予測されているが,傾向変動だけが直線的に下降している.
需要が負になることはないので,今度は,下限を設定してから傾向をロジスティック曲線と仮定して予測してみる.
予測量が負になることは避けられたが,やはり下降傾向と予測されている. 営業担当部長に聞くと,この顧客は定番製品に対しては,毎年同じように発注をしてくるらしい.
そこで,傾向変動なしで予測してみる.
結果を営業部長に見せたところ,この顧客のこの製品に対しては,こんな感じで十分だろうとの評価をもらったが,そもそも毎年同じ需要なら,予測を行う必要はないだろう.
深層学習と機械学習も誤差が大きく,年次の季節変動は重要でないと判断されている.さらには,新製品などは,1年分もデータがとれないものがあるとの指摘を受けた. 1年分もデータがない場合には,年次の季節変動は役に立たない.さて,どうすれば良いだろうか?
ひとつの方法は,できるだけ過去に遡ったデータを集めることだ.少なくとも2年分のデータがなければ,年次の季節変動は予測できない.新製品に対しては,過去のデータがないので,類似の製品の過去のデータを使うことが考えられる.
そのような場合に使える手法として,深層学習がある.深層学習では,時系列データをそのまま扱うのではなく,曜日,月末,年末などから特徴を自動的に抽出することによって予測を行う.
深層(機械)学習でも,顧客と製品を1つに絞って予測することもできる.2年分のデータがあると仮定して,ベイズ推論と比較をしよう.
2年分のデータに対するベイズ推論
結果は1年分とほぼ同じだが,線形傾向でも予想は負にならない.2020年10月以降のデータで交差検証を行うと,2乗平均誤差は163程度になった.
2年分のデータに対する深層学習
埋め込み層の後に,200層, 100層の全結合層を入れたニューラルネットで学習させた.2020年10月以前が訓練データ,それ以降が検証データである.最大学習率0.01,重み減衰2のone cycle法で100エポック訓練したところ,2乗平均誤差は25程度になった.
2年分のデータに対する機械学習
同様のデータに対して,ランダム森による学習を行ったところ,2乗平均誤差は50程度になった.特徴の重要性を可視化すると以下のようになり,特徴は順に,曜日,年初からの日にち,月,週が効いていることが分かる.
全ての製品を一度に予測
深層学習では,顧客名や製品名もカテゴリーデータとして用いることができる.これらの特徴を「埋め込み」を用いて適当な大きさのベクトルとして表現して,予測精度の向上を図るのである.ある製品の需要だけが1年分のデータしかないものとしよう.他の製品と同時に深層学習を行うことによって,どれだけ予測の精度が向上するか確認してみる.
上の深層学習と同じ程度の訓練を行うと,100製品に対する合計の2乗平均誤差が362となり,以下のような予測が得られた.この手法を用いると,販売実績の少ない新製品に対する予測も可能になる.
本ケーススタディで使用したのは需要予測システム BD Forecast (Bayes-Deep Learning Forecast ) は,サプライ・チェイン最適化システムSCMOPT に含まれています.
SCMOPTデモ&トライアルはこちら