需要予測はビジネスの現場では非常に重要なことです。ただ、データによらない経験と勘といい加減による予測が蔓延っている世界でもあります。
面倒だから、昨年と一緒、昨年の売上を1.1倍する、取り急ぎ右肩上がりに描く、みたいないい加減なものもあります。
経験と勘による予測は、センスの良い方がいる間は、非常に良い結果をもたらすかもしれませんが、いつまでもいるわけでもありませんし、時代とともに上手く予測できなくなる危険性があります。その人の調子によって変わってくるかもしれません。なによりも再現性がありません。
そのため、過去データをもとに需要予測モデルを構築し予測することは、需要予測業務を安定的に実施するという意味でも、人やその人の調子に大きく依存しないという意味でも、再現性という意味でも重要です。
今回は、「需要予測モデル構築時に検討すべき5つのポイント」というお話しをします。
Contents
5つのポイント
以下、需要予測モデル構築前に検討すべき5つのポイントです。
- データ粒度(Granularity)
- SKU集合(Sets)
- 予測期間(Forecast horizon)を含む4つの時間
- アルゴリズム(Algorithm)
- 売上要因(Drivers)
需要予測モデルを構築する前に、この5つのポイントを検討しておく必要があります。
それぞれについて、説明していきます。
データ粒度(Granularity)
売上×時間で検討していきます。
売上の粒度とは、全体・国別・事業別・エリア別・カテゴリー別・SKU(Stock keeping unit)別などのことです。
時間の粒度とは、年単位・四半期単位・月単位・週単位・日単位・時間単位などのことです。
データサイエンス的には、粒度は細かい方が嬉しいです。しかし、現実はそう甘くはありません。そもそもデータが存在しないという可能性もありますし、データの粒度が細かいほどノイズの影響が大きく外れ値処理などの処置が必要になります。
現実的には、ビジネス的な要求と、データ上の制約の間で決まることでしょう。
SKU集合(Sets)
SKU (Stock keeping unit)の売上の時系列推移は、同じようなSKU(同じカテゴリーに属するSKUなど)ほど、似たような推移をします。
例えば、同じカテゴリーのSKUの需要予測を1つの予測モデルで実施するのか、SKUごとに個々に予測モデルを構築し実施するのか、という検討が必要になります。
ここでモデリングの話しは避けますが、同じカテゴリーのSKUの需要予測を1つの予測モデルで実施する方が、データ量が増え、モデル構築という観点では好ましいです。ただ、きめ細やかさが失われます。
このあたりはバランスの問題です。
予測期間(Forecast horizon)を含む4つの時間
予測期間(Forecast horizon)とは、予測開始時点(Cutoff)から予測する期間の長さです。
例えば、予測開始時点(Cutoff)は1日後、予測期間(Forecast horizon)は3ヶ月間とした場合、明日から3ヶ月間(CutoffからCutoff + Horizonの間の期間)を予測します。
ちなみに、Cutoffは正確には、モデル構築時の学習データとテストデータを分けるポイントを指します。運用時は、取得できた過去データの次の日などを指します。
さらに、学習データ期間(Rolling window size)、予測間隔(Period)の検討も合わせて必要になります。
要するに……
- 予測間隔(Period):どのくらいの間隔(もしくは頻度)で、
- 予測開始時点(Cutoff):どの時期を堺に、
- 学習データ期間(Rolling window size):どのくらい過去のデータでモデルを学習し、
- 予測期間(Forecast horizon):どのくらい先まで予測するのか
……を検討しておく必要があります。
例えば……
- 予測間隔(Period):毎週月曜日の朝(もしくは日曜日の夜)に予測実施
- 予測開始時点(Cutoff):毎週月曜日
- 学習データ期間(Rolling window size):過去1年間のデータ
- 予測期間(Forecast horizon):1週間先(月曜日から日曜日まで)
……となります。
ここで、予測モデル検討時のCV(cross validation)のお話しをします。
需要予測モデルなどの時系列系の予測モデルを検証するとき、通常のCVは利用できません。
なぜならば、時系列系の予測モデルの場合、時間の流れの中で過去のデータを使い未来を予測する、という前提があることと、その過去データは連続した時間のデータでなければならない、という前提があるからです。12月13日のデータを使って12月10日を予測することはない、ということです。
通常のCVのように、元のデータセットをランダムに分割すると、この前提が崩れてしまいます。時系列系の予測モデルの場合、この2つの前提を崩さずに、CVする必要があります。
よく利用されるのがROCV(rolling-origin cross validation)というCVの方法です。
詳しくはお話ししませんが、以下を元にデータセット幾つかに分解し、クロスバリデーションを実施していきます。
- 予測間隔(Period)
- 予測開始時点(Cutoff)
- 学習データ期間(Rolling window size)
- 予測期間(Forecast horizon)
実務でどのように活用するのか、という意味だけでなく、どのアルゴリズムが良いのか、というアルゴリズム選定上も、上記の4つの検討が必要になります。
アルゴリズム(Algorithm)
需要予測のための予測モデルを構築するアルゴリズムには、大きく2種類あります。
- 時系列データに対する時系列解析モデル
- テーブルデータ系の機械学習モデル
時系列データに対する時系列解析モデルとは、ARIMAモデルやProphetモデル、状態空間モデルなどが有名です。需要予測で利用する売上データなどが時系列データのため、非常に相性がいいです。
テーブルデータ系の機械学習モデルとは、線形回帰モデルや決定木モデル、XGBoostなどのよく目にする機械学習モデルです。
こちらは、一工夫必要です。特徴量(説明変数)を工夫して時系列風にして予測モデルを構築します。例えば、ラグ変数を追加する、周期成分を追加する、などです。テーブルデータ系の機械学習モデルの中では、決定木モデルやXGBoostなどの木系のアルゴリズムの予測精度が非常にいいです。
他にも、LSTM(Long Short Term Memory)のような時系列系のニューラルネットワークのアルゴリズムなどもあります。時系列系のニューラルネットワークのアルゴリズムも、色々なものがあります。テーブルデータ系の機械学習モデルと同様に、特徴量(説明変数)を工夫する必要があります。
以上のように、需要予測をするためのアルゴリズムには色々なものがあります。
需要予測をするための予測モデルを構築検討するとき、候補となる予測モデルをたくさん作ることになります。そのとき、どの予測モデルがいいのかを評価する必要があります。
先程も述べましたが、よく利用されるのがROCV(rolling-origin cross validation)というCVの方法です。
現実には、ROCVの結果の善し悪しだけでなく、計算スピードの問題や、解釈性の問題などを考慮し、どの予測モデルを利用するのかが決まるかと思います。
売上要因(Drivers)
売上は通常、広告やキャンペーン、天候、曜日、などの影響を受けます。
これらの売上に影響を与える要因(Drivers)を把握しデータを入手し予測モデルに組み込むことができれば、需要予測の精度は向上します。
先程あげたアルゴリズムは、売上要因(Drivers)がなくても予測モデルを構築することができます。過去の売上データのみだけで、予測モデルを構築することができるのです。
売上データのみで構築した予測モデルでも、データの粒度が荒い場合には、それなりの予測精度が出るケースが多いです。しかし、データの粒度が細かくなるほど、予測精度が悪化します。
そこに、特徴量(説明変数)として売上に影響を与える要因(Drivers)を予測モデルに組み込むことができると、予測精度を向上させることができます。データの粒度が細かい場合ほど、売上の要因(Drivers)を追加することによる、予測精度の改善効果は大きいでしょう。
では、売上に影響を与える要因(Drivers)をどのように見つけるのか? というお話しになります。
多くの場合、相関分析を実施します。売上と相関の高い変数を売上要因(Drivers)とする、ということです。
ただ、通常の相関分析のようには行きません。時系列データだからです。
例えば、広告効果が遅れて出てくることは容易に想像が付きますし、カレンダー上のイベント(クリスマスや正月、バレンタインデー、ハロウィン、実施したキャンペーンなど)が売上を大きく左右することもあります。
カレンダー情報による影響を分析したり、タイムラグ相互相関(TLCC、Time Lagged Cross Correlation)分析を実施したりし、売上要因(Drivers)を検討していきます。
難しい表現で記載していますが、簡単に言うと、例えばクリスマスと売上が関係しているのか、広告出稿量が売上の先行指標になっているのか、などを分析していきます。
今回のまとめ
今回は、「需要予測モデル構築時に検討すべき5つのポイント」というお話しをしました。
以下、需要予測モデル構築前に検討すべき5つのポイントです。
- データ粒度(Granularity)
- SKU集合(Sets)
- 予測期間(Forecast horizon)を含む4つの時間
- アルゴリズム(Algorithm)
- 売上要因(Drivers)
需要予測モデルを構築する前に、この5つのポイントを検討しておくことは重要です。
運用時に、どのような予測値をだすのか、そのために、どのようなデータでどのようなアルゴリズムで予測モデルを構築するのか、というイメージが明確になるからです。
最初は、ざっくりイメージで検討し、その後実際にデータを集めてみて検討する、このような流れになるかと思います。
悪魔は細部に宿ると言います。売上要因(Drivers)の検討など面倒な根気のいるものもありますが、需要予測モデルを構築する前に、しっかり検討していきましょう。