Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Kaggle M5 Forecasting (日本語)

Kaggle M5 Forecasting - Accuracy/Uncertaintyの解説、及び、私の解法の説明です。Accuracy 75位(銀)、Uncertainty 4位(金、in the money)です。

  • Be the first to comment

Kaggle M5 Forecasting (日本語)

  1. 1. Copyright (c) 2020 The Japan Research Institute, Limited 1 /12 Kaggle M5 Forecasting 株式会社日本総合研究所 先端技術ラボ 森 2020/7/21
  2. 2. Copyright (c) 2020 The Japan Research Institute, Limited 2 /12 1.コンペ概要 Kaggle M5 Forecastingは過去の売上データから将来の売上を予測することを目標としてKaggleプラ ットフォーム上で開催されたコンペ。売上を予測する「Accuracy」と売上分布を予測する「Uncertainty」 の2部門がある。与えられるデータは両部門で同一であり、提出物と評価方法が異なる。 概要 (参考)M Competitionとは ニコシア大学のSpyros Makridakis教授が創設した「the Makridakis Open Forecasting Center (MOFC)」が主催 するコンペ。1982年から過去4回のコンペが開催されており、今 回は5回目。 (ニコシア:地中海の島国であるキプロス共和国の首都) 項目 内容 テーマ 米国3州(カリフォルニア州、テキサス州、ウィスコン シン州)に存在するウォルマート10店舗における 3049種類の商品の将来28日間における売上 (販売数量)を予測する。 主催者 ニコシア大学 協賛 Google, Uber, Warmart, IIF (International Institute of Forecasters) 開催期間 2020年3月3日~2020年6月30日 賞金総額 $100,000 ルール • 外部データ利用可能(予測時点で利用可 能なもののみ) • コンピューターリソースの制限なし
  3. 3. Copyright (c) 2020 The Japan Research Institute, Limited 3 /12 2.データ概要(1/2) 与えられるデータは①売上、②カレンダー、③価格の3つのCSVファイル。Training期間の①売上と②カ レンダー・③価格の情報を元に、Validation期間とEvaluation期間の売上を予測する。 Validation期間の予測値はPublic Leaderboardの順位、Evaluation期間の予測値はPrivate Leaderboardの順位に反映され、最終的な順位はEvaluation期間の予測値で決まる。 データ 内容 期間 Training 2011/1/29~2016/4/24 Validation ~2016/5/22 Evaluation ~2016/6/19 ①売上 (sales) 店舗ごと・商品ごとの日付単位の販売数 量の時系列データ (ある店舗である商品がある日にどれだけ の数売れたか) あり 予測対象 (2020/6/1公 開) 予測対象 (非公開) ②カレンダー (calendar) 宗教行事やスポーツ等のイベント開催日と SNAP(連邦栄養補助プログラム、低所 得者向けクーポン)が利用できる日 あり あり あり ③価格 (prices) 店舗ごと・商品ごとの週単位の販売価格 あり (販売されている期間のみ) あり あり <注意点> 店舗や商品の属性情報は与えられない。 商品はその時点でまだ販売されていない場合があり、それまでは「①売上」はすべて「0」となっている。「③価格」でその時点で販売されて いたかどうかの判定が可能。
  4. 4. Copyright (c) 2020 The Japan Research Institute, Limited 4 /12 2.データ概要(2/2) 予測対象の店舗数は10店舗、商品数は3049種類となっている。 売上(販売数量)は多くの日付で0となっており、商品によって平均的な販売数量が異なる。 画像はAKuni氏によるKaggle Notebook「【日本語】Back to (predict) the future - M5 EDA」より転載。 (https://www.kaggle.com/marutama/back-to-predict-the- future-m5-eda) 州 店舗数 カリフォルニア州(CA) 4 テキサス州(TX) 3 ウィスコンシン州(WI) 3 合計 10 カテゴリ 分類 商品数 食料品(FOODS) 3 ? 娯楽(HOBBIES) 2 ? 家庭用品 (HOUSEHOLD) 2 ? 合計 7 3049 <店舗数> <商品数> <売上データのサンプル>
  5. 5. Copyright (c) 2020 The Japan Research Institute, Limited 5 /12 3.評価方法(1/3) 評価は集計する単位によって12種類、合計42840個の時系列データ(28日間)に対して行われる。 Accuracy部門は評価指標としてWRMSSEが用いられる。 (1)集計単位 Level 集計単位 数 店舗 商品 1 全店舗 全商品 1 2 州 全商品 3 3 個別店舗 全商品 10 4 全店舗 カテゴリー 3 5 全店舗 分類 7 6 州 カテゴリー 9 7 州 分類 21 8 個別店舗 カテゴリー 30 9 個別店舗 分類 70 10 全店舗 個別商品 3,049 11 州 個別商品 9,147 12 個別店舗 個別商品 30,490 合計 42,840 下記の単位で集計した時系列データ(28日間)で評価される。 (2)Accuracy部門の評価指標 𝑛は訓練データ数、ℎは予測期間のデータ数、 𝑌𝑡 は売上実測値、 𝑌𝑡は売上予測値。 𝑾𝑹𝑴𝑺𝑺𝑬 = 𝑖=1 42,840 𝑤𝑖 ∗ 𝑅𝑀𝑆𝑆𝐸 , 𝑹𝑴𝑺𝑺𝑬 = 1 ℎ 𝑡=𝑛+1 𝑛+ℎ 𝑌𝑡 − 𝑌𝑡 2 1 𝑛 − 1 𝑡=2 𝑛 𝑌𝑡 − 𝑌𝑡−1 2 , 数式はMOFCの「THE M5 COMPETITION Competitors’ Guide」か ら引用。(https://mofc.unic.ac.cy/wp- content/uploads/2020/03/M5-Competitors-Guide-Final-10- March-2020.docx) ウェイト𝑤𝑖は合計が1になるように、下記のルールで決める。 ① 12種類の時系列データで等配分(それぞれ12分の1) ② 訓練データの直近28日間の売上金額合計に応じて配分 →個別商品の予測誤差は全体の評価にあまり影響しない。 Accuracyの評価指標であるRMSSE(Root Mean Squared Scaled Error)は、通常のRMSE(Root Mean Squared Error)を、訓練データ における前日の売上実測値をそのまま翌日の売上予測値とした場合の RMSEで割ることでスケールをそろえたもの。
  6. 6. Copyright (c) 2020 The Japan Research Institute, Limited 6 /12 3.評価方法(2/3) Uncertainty部門は予測分布の9つの分位点で評価される。 (3)Uncertainty部門の提出物(9分位点) 12種類、42840個の時系列データについて、予測期間28日それぞれの売上分布の9分位点を提出する。 分位点は0.5%、2.5%、16.5%、25%、50%(中央値)、75%、83.5%、97.5%、99.5%。 下記は全店舗・全商品の時系列データの訓練期間(2011/1/29~2016/4/24)の売上分布と9分位点。 元となる時系列データはトレンドや周期性があるものの、大まかに言って(対数)正規分布のように見える。(中心極限定理?) 0.5% 2.5% 16.5% 25% 50% 中央値 75% 83.5% 97.5% 99.5% 12/25は営業していないためか、売上がほぼ0となっている。
  7. 7. Copyright (c) 2020 The Japan Research Institute, Limited 7 /12 3.評価方法(3/3) Uncertainty部門は評価指標としてWSPL (Weighted Scaled Pinball Loss) が用いられる。 (4)Uncertainty部門の評価指標 𝑛は訓練データ数、ℎは予測期間のデータ数、 𝑌𝑡 は売上実測値、 𝑄𝑡 𝑢 は時点𝑡における予測分布の分位点𝑢の分位数。 ウェイト𝑤𝑖はAccuracy部門と同じ。 𝟏はかっこの中身が真であれば1、そうでなければ0となる関数。 𝑾𝑺𝑷𝑳 = 𝑖=1 42,840 𝑤𝑖 ∗ 1 9 𝑗=1 9 𝑆𝑃𝐿(𝑢𝑗) , 𝐒𝐏𝐋(𝐮) = 1 ℎ 𝑡=𝑛+1 𝑛+ℎ 𝑌𝑡 − 𝑄𝑡(𝑢 )𝑢𝟏 𝑄𝑡 𝑢 ≤ 𝑌𝑡 + 𝑄𝑡(𝑢 − 𝑌𝑡)(1 − 𝑢)𝟏{𝑄𝑡 𝑢 > 𝑌𝑡} 1 𝑛 − 1 𝑡=2 𝑛 𝑌𝑡 − 𝑌𝑡−1 , 数式はMOFCの「THE M5 COMPETITION Competitors’ Guide」から引用。 (https://mofc.unic.ac.cy/wp-content/uploads/2020/03/M5-Competitors-Guide-Final-10-March-2020.docx) 実測値が分位点の右側であれば、 実測値と分位点の差に分位点uをかける。 実測値が分位点の左側であれば、 実測値と分位点の差に 1-分位点u をかける。
  8. 8. Copyright (c) 2020 The Japan Research Institute, Limited 8 /12 4.データ観察 時系列データの分布を確認したところ、集計レベル1~9と10~12で大きく分布が異なるように見受けら れる。そのため、集計レベル1~9の予測を行う正規分布またはT分布のモデルと、10~12の予測を行う 負の二項分布のモデルの二つのモデルでそれぞれ予測を行う。 Level 集計単位 数 店舗 商品 1 全店舗 全商品 1 2 州 全商品 3 3 個別店舗 全商品 10 4 全店舗 カテゴリー 3 5 全店舗 分類 7 6 州 カテゴリー 9 7 州 分類 21 8 個別店舗 カテゴリー 30 9 個別店舗 分類 70 10 全店舗 個別商品 3,049 11 州 個別商品 9,147 12 個別店舗 個別商品 30,490 合計 42,840 正規分布またはT分布に従うと仮定してモデルを作成。 負の二項分布に従うと仮定してモデルを作成。 (ガンマ分布、ポアソン分布、Tweedie分布も候補としては考 えられる)
  9. 9. Copyright (c) 2020 The Japan Research Institute, Limited 9 /12 5.モデル構造 直近の28日間のデータ(売上・カレンダー・価格)と予測対象28日間のデータ(カレンダー・価格)を 元に予測対象28日間の売上を予測するモデルを作成。モデルパラメータは最尤推定で求める。 入力データ エンベディング層 (カテゴリー特徴量をエンコーディングする) LSTM層1 LSTM層2 FC (月) FC (火) FC (日) FC (土) ・・・ 出力データ 28日間それぞれの 売上分布のパラメータ 予測対象28日間の カレンダー・価格 モデル ・・・ 直近28日間の 売上・カレンダー・価格 ・・・ 当初出力層は曜日ごとのFC層ではなくLSTM層にしていたが、うまく周期性を表現できなかったため、曜日ごとのFC層に変更。 Batch Norm・Layer NormはLSTMと相性が悪いようなので見送った。
  10. 10. Copyright (c) 2020 The Japan Research Institute, Limited 10 /12 6.特徴量エンジニアリング 前述のモデル構造としたことからラグ特徴量や直近N日間のターゲットエンコーディングは使用しない方針と した。 将来にわたって作成できる特徴量のみからその日の売上を予測するモデルをLightGBMで作成し、 Permutation Importanceを見て特徴量を選択。 価格データは集計レベル1~9では使用しない方がスコアが上昇したので、使用しない。 売上データは集計レベル1~9では時系列ごとにPower Transformerで正規分布に近づける。(予測 時には逆変換を行う) 集計レベル10~12では分布の形状を維持するために前処理を行わない。(例えば、平均1個売れる商 品と平均10個売れる商品では分布の形状が大きく異なる) 各時系列ごとの曜日のターゲットエンコーディングを入れたことでわずかにLocal CVスコアが上昇した。(リ ークの対処はせず、全期間の平均値を利用) ターゲットエンコーディングの値は最終層の曜日ごとのMLPの入力とした。
  11. 11. Copyright (c) 2020 The Japan Research Institute, Limited 11 /12 7.ハイパーパラメーター探索 グリッドサーチでハイパーパラメーターを調整。(全部の組み合わせは試していない) • Seed=1/2/3/4 • 2015年の訓練データを2倍、2016年を4倍にオーバーサンプリングするかどうか • 時系列ごとのウェイトを損失関数に反映するかどうか • LSTM層のノード数(8/16/32/64) • 正規分布/T分布(自由度=1,2,5,10) • ドロップアウト確率(0.0/0.1/0.2/0.5) • オプティマイザー(Adam/SGD) • 学習率(0.1/0.01/0.001/0.0001) • weight_decay(0.0/0.001/0.01) • スケジューラー(CosineAnealingLR/なし) • ターゲットエンコーディングあり・なし • バッチサイズ(4096/1024/256) スコアを算出する期間によってかなりスコアが異なるため、Local CVのバリデーション・テスト期間を土壇場 で4週間→8週間に変更。 集計レベル1~9のモデルはSeed値によって大きくスコアが変動する。Validation期間の売上データは 使用せずにモデルを訓練し、Publicのスコアで最終seedを確定。
  12. 12. Copyright (c) 2020 The Japan Research Institute, Limited 12 /12 8.感想 Kaggleのコンペに本格的に参加したのは今回が初めてでしたが、まさか4位とは、未だに信じられません。 Public Leaderboard ではコンペ期間中ずっと下から数えたほうが早かったので、最初にPrivateの順位 を見たときには目を疑いました。 応援してくださった皆さん、このコンペの主催者の皆さん、共に戦ったKagglerの皆さん、本当にありがとうご ざいました。 Accuracy は最初から諦めていたのですが、Uncertainty なら参加チームも少ないし、ワンチャン銅メダル ぐらい取れるんじゃないかと思って参加しました。実際に参加してみるとデータ量とメモリ管理に苦労し、それ でいて一向に Public Leaderboard は上がらず、心が折れそうになっていましたが、最後までがんばり続 けたことで自分としては最高の結果を残すことができました。本当に嬉しいです。 今回のコンペを通して、時系列データの扱いについてはいろいろと勉強になりました。主催者がベースライン のモデルを公開していたり、Pyroの開発者がPyroのソリューションを公開してくれているので、それらを見な がら引き続き勉強していきたいと思います。 実装はこちらで公開しました。 https://github.com/marisakamozz/m5

×