Blog-JP

AutoMLによる多次元時系列予測への挑戦

背景

世界最大のデータサイエンスコミュニティであるKaggleとニコシア大学は、世界最大の小売業者であるウォルマートが販売する何千もの商品の売り上げを予測する国際コンペを主催し、4カ月間にわたるコンペには世界中から5,500以上のチームが参加しました。課題は米国3州にあるウォルマート10店舗における3000種類の商品の日次売り上げを予測するというもので、利用可能なデータは、商品レベル、部門、商品カテゴリー、カレンダー、販売価格と店舗詳細です。

今回、「M5 Forecasting – Accuracy」で公開されているデータにdotDataのAI自動化を適用したところ、上位1.8%(5,500以上の参加チーム中102位)相当のスコアを自動的に得ることができました(注:dotDataがチームとしてコンペに参加したわけではなく、コンペ終了後に公開されたデータによる検証となります)できる限り自動的に実施するために、データの前処理はほとんど実施せず、作業そのものは、dotData社員が一人で1時間程度でした。このブログでは、dotDataプラットフォームによって、ビジネスアナリストや業務部門のメンバーのような市民データサイエンティストであっても、最小限の作業によって世界レベルのデータサイエンティストとも競い合えるレベルの結果を出せるということをお伝えします。

 

タスク:超高次元時系列予測

需要予測、収益予測、売上予測といった時系列予測は多くのビジネスに共通する最も基本的な問題です。予測手法は多数ありますが(例:標準的な自己回帰モデルや状態空間モデル、最近では、長短期記憶ニューラルネットワーク(LSTM)など)、実世界の時系列予測問題は簡単なものではありません。

このコンペの課題はSKU(Stock Keeping Unit、最小在庫管理単位)レベルの商品需要を予測することで、これは小売業者が在庫管理を最適化するために非常に重要となります。データを扱う際に直面するいくつかの課題は次のとおりです。

  • データは基本的に超高次元時系列で構成されている(商品3000品目以上×10店舗で30000系列を超える時系列データ)
  • 店舗・商品レベルの時系列の多くはスパースでノイズが大きい
  • データは階層的な構造を持っており(州レベル – 店舗レベル – 商品カテゴリーレベル – 商品レベルなど)、時系列のスケールと動きが多様である
  • 多くの商品の販売が断続的である(例:2011年に販売された商品が、販売休止後2013年に再度販売される)
  • 異なる商品が異なる期間に販売され、時系列の期間が重複していない(例:2011年に販売開始した商品もあれば、2014年に販売開始した商品もある)
  • 標準的な時系列モデル化手法では組み込むことが難しい多くの「外部要因」(例:キャンペーンフラグ)がある

コンペの期間は4カ月で、参加者はさまざまな前処理法やモデル化アルゴリズムを適用してモデルを最適化しました。図1は上位40%の参加者のスコア分布を示しています(スコアが1.0未満の場合)。

  • スコア分布は平均値=6.09、最頻値=5.39と非常に裾が長い
  • しかし、0.75あたりに高いピークがあり(約900チーム=5,500チームの16.3%)、トップパフォーマーの中でもスコアは広く分布している

経験豊富なデータサイエンスチームであっても、高い精度を出すことは難しく、参加者の技量によってスコアが大きくばらついていることが分かります。

 

図1:トップ40%のスコア分布(スコア<1.0)

score distribution

試行1回目:前処理をほぼ行わずトップ3%のスコアを獲得

dotDataを使用した試行1回目では各店舗用に合計10のモデルを構築しました。実施したステップは次のとおりです。

ステップ0(dotData Platform外の前処理):

  • 唯一実施した前処理はSales Transaction(売り上げ取引)データのDATEカラムを使い、年、月、週番号の列を追加してSelling Price(販売価格)データと結合できるようにしたこと(これはExcelのYEAR、MONTH、WEEKNUM関数を使って、数分で実行可能です)。

ステップ1(GUIで学習タスクを設定):

  • 「Sales」カラムをターゲット変数として選択
  • 訓練データと検証でータのデータ分割の基準を指定
  • テーブル間の時間ベースの関係を指定(Dateカラムのペアの指定など)。時間ベースの関係を設定することで、dotDataが自動的に時間特徴量を探索

ステップ2(店舗ごとに学習タスクを実行):

  • 設定した学習タスクを実行し、自動的にデータ前処理、特徴量設計、MLアルゴリズムチューニングを実行。店舗ごとに3~4時間の計算を要した(作業時間は数分程度)。
  • 特徴量とモデルが構築された後、最適なRMSEモデルを選択

ステップ3(予測タスクを実行しテストスコアを計算):

  • 予測タスクを実行し予測結果を得て、最終スコアを得る

dotDataで全10モデルの訓練と予測を完了するための計算に要した時間は約48時間でした。この初回実行の予測によって、コンペのトップ3%相当のスコアを得ることができました(5,500以上の参加チーム中170位)。与えられた課題の複雑さと、ドメインからの入力や試行錯誤なしで得られた結果であることを考えると、十分すぎる結果であると言えます。

試行1回目:考察
モデルの分析

dotDataは標準的な設定を利用して、各店舗に対して、自動で100,000以上の特徴量を探索し、その統計的な有意性を検証して特徴量テーブルを生成しました。dotDataはそれらの特徴量を利用して、L1/L2 正則化回帰、回帰木、LightGBM、XGBoost、PyTorch、TensorFlowなどの、線形および非線形の機械学習アルゴリズムに対して、異なる組み合わせのハイパーパラメータを持つ500以上のモデルを生成しました。dotDataは時間的情報を時間特徴量にエンコードする様々な高度な手法に対応していて、MLアルゴリズムでそれらの時間特徴量の組み合わせを最適化して、最も高い予測精度を実現します。

あまり驚くことではありませんが、最も精度の高いモデルは、9モデル(9店舗)が XGBoost、1モデルがLightGBMでした(最終的にはすべてのモデルが勾配ブースティングアルゴリズムを選択したことになります)。図2は各モデルの訓練と検証スコアの比率を示しています。検証のMAEは訓練のMAEより1~2%劣るだけであることが分かります。RMSEに関する検証/訓練の比率はいくつかの店舗で高くなりましたが(3~5%)、これは売上の絶対値が大きかったためです。全体としてみると、dotDataで自動的に構築されたモデルの過学習はほとんどなく、よく一般化されています。

 

図2:各モデル(店舗)の訓練と検証スコアの比率(パーセント)。(検証/訓練 -1)* 100

validation training ratio

特徴量の分析

ご想像のとおり、ほとんどのKaggle参加者はXGBoost、LightGBMやNeural Networksを使用し、私たちも同じMLアルゴリズムを使用しました。では、なぜ、dotDataは初期段階からトップ3%相当のスコアを達成できたのでしょうか。それは、dotDataが多数の、高度な時間特徴量を設計したためです。

表1はdotDataが自動的に設計した時間特徴量の例を示しています。ご覧の通り、時間特徴量には異なる種類があります。面白いことに、これらの特徴量は、階層的パターンや周期パターンのような、データサイエンティストが作成する特徴量に対応づけることができます。これらの特徴量を発見した裏側には、dotDataが各モデルに対して100,000以上の特徴量を探索したこともぜひ強調しておきたい点です。手動で行うとしたら、複雑なクエリや何百・何千行ものクエリやコードを書く必要があるます。さらに、意味のある特徴量を生成するには、そのドメインへの理解が必要です。

表1:カリフォルニア州の店舗モデルで生成された時間特徴量の例

予測結果の分析

コンペの結果は2016年の28日間に対する予測で評価されました(テスト期間のデータは開示されないブラインドテスト)。図3は2016年のカルフォルニア州のある店舗(CA_2)における訓練期間の「実際の売り上げ」と、テスト期間(直近28日間)の「予測」の時系列プロットです。テスト期間の「実際の売り上げ」がないため、定量的な結果は議論できませんが、プロットが示すように、売り上げの傾向は予測によりかなり良く捉えられているといって差し支えないと思います。

図3:2016年の店舗CA_2における訓練期間およびテスト期間の売り上げ

Sales during training and test for store ca_2 in 2016

試行2回目:階層的スタッキングを使用して精度を最適化

トップ3%のスコアはそれだけでも満足のいく結果でしたが、私たちはこのトライアルをもう一歩進めてみました。対象データの階層的な性質(州レベル―店舗レベル―商品分類レベル―商品レベル)をモデルに入れることで、精度を改善できると考えました。階層の特定のレベルでモデルを構築すると、他のレベルよりもパフォーマンスが良い場合があるためです。

試行2回目の目標は、このような「階層的情報」を取り入れ、よりロバストで精度のよいモデルを作成することです。手順は非常に単純です。試行1回目と同じステップを使って、異なるレベルのモデルを構築します。

  • 全州向けに1モデル
  • 各州向けに3モデル
  • 各店舗に10モデル(施行1回目と同じ)
  • 各店舗の各カテゴリー(食品、趣味、家庭用品)に計30モデル(10店舗×3カテゴリー)

最終予測値は全4レベルの予測値の単純平均で、特別な後処理や最適化は実施していません。

図4はカルフォルニア州の1店舗(CA_2)における2016年の食品と家庭用品カテゴリーにおける訓練期間の「実際の売り上げ」とテスト期間(直近28日間)の「予測」を時系列でプロットしたものです。

図4:CA_2 店舗における2016年の食品、家庭用品の訓練期間およびテスト期間中の売り上げ

Figure 4 Sales for Foods

これによって、スコアは試行1回目の第170位から第102位(トップ1.8%)相当へと改善しました。また、試行2回目についても、前処理はカテゴリーごとのデータ分割(それもdotDataのGUI上で可能です)、後処理はスコアの単純平均のみで、ほぼ自動で実施できている点も重要なポイントです。ウォルマートの製品需要予測という非常に実用的な企業での使用例において、私たちの自動化手法が世界レベルのデータサイエンスチームと比較しても引けを取らない結果を出したことをとても嬉しく思っています。

まとめ

小売業者が予測を行うには、何カ月もかけて特徴量を構築し、モデル生成しながら予測を出す必要があります。今回の結果は、dotDataのデータサイエンスの自動化によって、多次元時系列予測を非常に効率的かつ高精度に解決する大きな可能性を示しています(トップ1.8%相当の予測結果を得るのにかかった時間は、約1時間の作業時間と約150時間の計算時間時間でした)。また、dotData外の作業も、Excelで可能な作業しかなく、dotDataの自動化によってデータサイエンスの専門知識がない「市民データサイエンティスト」も時系列予測に取り組むことができるようになり、企業における分析の民主化の起爆剤になれば幸いです。