Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kaggle M5 Forecasting - Accuracy 14th place sol...
Search
Tsuru
July 22, 2020
1
260
Kaggle M5 Forecasting - Accuracy 14th place solution
Kaggle M5 Forecasting - Accuracy memo
Tsuru
July 22, 2020
Tweet
Share
Featured
See All Featured
A Philosophy of Restraint
colly
203
16k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
Building Your Own Lightsaber
phodgson
103
6.1k
Visualization
eitanlees
146
15k
Producing Creativity
orderedlist
PRO
341
39k
4 Signs Your Business is Dying
shpigford
181
21k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Raft: Consensus for Rubyists
vanstee
137
6.7k
Transcript
- M5 Forecasting – Accuracy – 14th Place Solution Tsuru
1
自己紹介 Kaggle: Tsuru Twitter: Stat 銀行員 & 社会人大学院生(D) 統計検定1級保有 コンペの経験
• Signateは何回かチャレンジしたことがあったが、KaggleはこれまでPublic Notebookをコピーして投稿してみた程度。 2
解法の概要 3 モデル LightGBM(Objective:Tweedie, Weight:Total Sales Weight, ES無し) • 検討したもの
Objective:Tweedie, Poisson, Custom Weight: Total Sales Weight, Total Sales Weight/Scale of RMSSE モデルの単位 • store_id x dept_id毎に個別の商品の売上数量を予測するモデルを推定。全部で70個のモデル。 ただし、特徴量のTarget Encodingには、他のstore_id/dept_idの過去の売上数量も織り込んでいる。 • day-by-day modelとRecursive model(11個のモデル) ◦終盤、時間がなかったので、1,2,3,4,5,6,7,14,21,28day lagのモデルを作り、リークが無いようにできるだけ極力直近のデータを用いるモデルを用い、 予測値を採用。なお、CVは若干改善することを確認。 ◦CVが改善するものは一部Recursive modelを採用。 • 以上トータルで770個(70x11)のモデルを推定。 データの期間 2014/1/1~ (2013以前は、含めるとCV悪化。トレンドも違う印象。) 主な特徴量 • 曜日、月、イベントなどとid系の組み合わせなどで、28day lagの過去1年や3ヶ月の値で目的変数の平均や標準偏差をとり、target encodingしたもの (ざっくりいうとグルーピングしたラグ変数)。 • 日付(1日から31日(or30日、28日))をsin, cos変換したもの。 • 同一商品のCA_3の価格(標準化) • 商品取り扱い開始からの日数 • ラグ変数(recursive model: CVが改善する場合のみ使用。) CV 直近の28日×3の平均(昨年の同時期も参照し、ざっくりと相関を確認。CVの精度は荒い認識) CVは0.590(Private:0.551)。(28-day lag modelでCV:0.608(Private:0.555))
モデル モデル • LightGBM ハイパーパラメータ • いくつか手動で試しつつCVの結果が良いものを選択。主なものは以下の通り。 • Objective: tweedie
(1.1) • 他に検討したもの:poisson, custom, mse • Customは、gradiant:(, − � , )/ , hessian: 1/ • RMSSEのスケール の調整をTweedieがうまく吸収しているとざっくり理解。 (後で、0の分布をうまくとらえているらしいと知る。分散が小さいものがウェイトが大きくなるスケールもうまく代替か) • Weight: • 他に検討したもの︓ • Learning rate: 0.03, n_estimators:300(day-by-day), 700(recursive) ≔ 4
モデルの単位 idのグルーピング • Store_id x dept_id毎に個別の商品の売上数量を予測するモデルを推定。全部で70個のモデル。 • EDAのNotebookで傾向が大きく違ったのが背景。 day-by-day modelとRecursive
model • day-by-day modelにしたかったが、終盤、時間がなかったので、1,2,3,4,5,6,7,14,21,28day lagのモデルを作り、リークが無いようにできるだけ極力 直近のデータを用いるモデルを用い、予測値を採用。なお、CVは若干改善することを確認。 • CVが改善するものは一部Recursive modelを採用。 以上全体で770個(70x11)のモデルを推定 5
CV 方針 • Shake Downを2度ほど被った経験があり、また今回のPublic LBは、時系列方向に28日のみでリスクがあると判断。 手法 • 以下の簡単な検証を踏まえ、直近3 x
28dayとし、去年の同期間も参考に見ていた。 • 検証により、1年前の同期間とその前の3 x 28dayで相関が荒いが取れていた。期間をずらすとずれも発生しリスクは高い。 CVの水準 • CV:0.590(Private:0.551) (なお、28-day lag modelでCV:0.608(Private:0.555)) 6 CVの検証の詳細:(次ページ結果) • 1年前の同じ時期でCVの相関がとれるかの確認 • 2014/1/1を起点に検証期間の直前までで学習し、検証期間28日間を予測し、予測期間(oof)のLevel12のスコアを計算。 • 予測にあたり、変数は、day by day / recursive両方を含み、@kyakovlevのNotebookの変数をベースにしたいくつかの変数グループを作り、それぞれのグループを使用/不使用 の組み合わせで特徴量の組み合わせをいくつも作り、それぞれでCVをテスト。 • CA_3のストアでFOODS3のみを選択し、しかも1/3程度にサンプリングしている。 結果的にそれほど外れたものではなかったですが、もう少しきちんと確認すべきでした(反省)。。。
CVの確認 7 train last valid eval train last day by
day day by day 0.75付近 recursive 0.75 0.76 0.76 0.77 0.77 0.78 0.80 0.80 0.81 0.81 0.82 0.82 0.83 0.70 0.75 0.80 0.85 0.90 0.95 1.00 0.78 0.80 0.82 0.84 0.86 0.88 0.90 0.92 0.94 0.74 0.75 0.75 0.76 0.76 0.77 0.77 0.78 0.78 0.79 0.80 0.80 0.81 0.81 0.82 0.82 0.77 0.77 0.77 0.78 0.78 0.78 0.78 0.78 0.79 0.79 0.69 0.70 0.71 0.72 0.73 0.74 0.75 0.70 0.75 0.80 0.85 0.90 0.95 0.70 0.75 0.80 0.85 0.90 0.95 0.77 0.78 0.78 0.79 0.79 0.70 0.71 0.72 0.73 0.74 0.75 0.75 0.76 0.76 0.77 0.77 0.78 0.78 0.74 0.75 0.75 0.76 0.76 0.77 0.77 0.78 0.70 0.72 0.74 0.76 0.78 0.80 0.82 0.84 0.86 0.88 0.90 0.75 0.80 0.85 0.90 0.95 1.00 0.74 0.75 0.75 0.76 0.76 0.77 0.77 0.78 0.78 0.74 0.75 0.76 0.77 0.78 0.79 0.80 0.81 0.82 0.75 0.76 0.76 0.77 0.77 0.78 0.73 0.74 0.74 0.75 0.75 0.76 0.76 0.77 0.77 0.78 0.70 0.75 0.80 0.85 0.90 0.95 1.00 0.74 0.79 0.84 0.89 0.94 0.99 0.74 0.75 0.76 0.77 0.78 0.79 0.80 0.81 0.82 0.83 0.84 0.74 0.75 0.76 0.77 0.78 0.79
主な特徴量 Target Encoding 時系列方向にリークが無いようにTarget Encoding • 曜日、月、イベントなどとid系の組み合わせなどで、28day lagの過去1年(28day x 13)や3ヶ月(28day
x 3)の値で目的変数の平均や標準偏差 をとり、encoding。全部で128変数を生成 • 一種ラグ変数。ただし、store_id x dept_id毎にモデルを推定しているが、encodingには他のstore_id/dept_idの過去の売上数量も織り込んでいる。 重要度が高い変数 • [曜日]×[id系] ⇒ほぼすべてで効果あり(特にFOODS系で効果) • [id系] ⇒全体的に効果あり(HOBBIESやHOUSEHOLDを中心に重要) • [Snap, or National etc..] x [id系] ⇒ FOODS_2, FOODS_3で特に効果あり。 なお、一部重複がある変数はPermutation Importanceで除外。 • ただし、終盤追加した変数で一部冗長変数は残っている。 8
主な特徴量 価格系 効果があったもの • 誤差検証やクラスター分析(後述)などをしていると、特にFOODS系で商品の一定期間連続したzero sales期間が、CA_3の価格の価格と連動して いることがあった。そのため、同一商品のCA_3の価格の中央値からの乖離を説明変数に追加。重要度でも上位に位置。 • 上記と同様に、単に自身の価格の(平均でなく)中央値で標準化した変数も上位に位置。 ⇒
こちらのNotebookの変数をベースにしていたが独自に追加したものの方が比較的効果があった。 9 Sell_price demand FOODS_3_090の例 CA_3の価格のみ zero salesと連動
重要度上位8変数(28-day lag model) 10 CA_1 CA_2 CA_3 CA_4 TX_1 TX_2
TX_3 WI_1 WI_2 WI_3 HOBBIES_1 1 enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_std_v2 enc_item_id_state_id_wd_v2std enc_item_id_state_id_wd_v2std enc_id_wd_mean enc_id_wd_v2mean 2 enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_state_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_id_std_v2 enc_id_wd_v2mean enc_id_wd_v2mean enc_item_id_wd_v2std enc_id_std_v2 enc_item_id_store_id_wd_v2mean 3 enc_item_id_state_id_wd_v2mean enc_item_id_state_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_state_id_wd_v2std enc_item_id_store_id_wd_v2mean enc_item_id_store_id_std_v2 enc_item_id_wd_v2std enc_item_id_state_id_std_v2 enc_id_wd_v2mean enc_item_id_store_id_wd_std 4 enc_id_wd_mean enc_item_id_state_id_wd_v2std enc_item_id_state_id_wd_mean enc_item_id_wd_v2mean enc_id_National_mean enc_item_id_store_id_wd_v2mean enc_item_id_state_id_wd_v2mean enc_item_id_state_id_wd_v2mean enc_id_National_std enc_id_wd_mean 5 enc_item_id_state_id_wd_v2std enc_item_id_store_id_wd_std enc_item_id_state_id_mean_v2 enc_item_id_state_id_wd_v2mean enc_id_mean_v2 enc_id_National_std enc_item_id_state_id_std_v2 enc_id_std_v2 enc_item_id_store_id_std_v2 enc_id_std_v2 6 enc_id_mean enc_id_wd_v2std enc_item_id_state_id_wd_v2std enc_item_id_wd_v2std enc_id_snap_mean enc_id_Religious_std enc_item_id_store_id_wd_v2mean enc_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_std_v2 7 enc_item_id_store_id_wd_mean enc_id_National_mean enc_id_National_mean enc_id_snap_std enc_item_id_store_id_mean_v2 enc_id_National_pre_std enc_id_wd_v2std enc_item_id_store_id_std_v2 enc_item_id_store_id_wd_mean enc_id_Cultural_pre_std 8 price_norm4 enc_item_id_wd_v2mean enc_id_wd_mean enc_id_mean enc_item_id_store_id_std_v2 enc_item_id_state_id_wd_v2mean enc_item_id_wd_v2mean enc_id_Religious_pre_std enc_id_snap_pre_std enc_id_wd_v2std HOBBIES_2 1 enc_id_std_v2 enc_id_mean_v2 enc_id_mean_v2 enc_id_Cultural_pre_mean enc_id_mean enc_id_mean enc_id_Cultural_mean enc_id_mean_v2 enc_id_mean enc_id_mean 2 enc_item_id_store_id_std_v2 enc_id_Sporting_mean enc_item_id_state_id_mean_v2 enc_id_National_mean enc_item_id_store_id_mean enc_item_id_state_id_mean_v2 enc_id_National_mean enc_item_id_store_id_mean_v2 enc_id_National_std enc_id_National_mean 3 enc_id_wd_v2mean enc_id_snap_pre_mean enc_id_snap_mean enc_id_mean enc_id_std enc_id_std_v2 enc_id_mean_v2 enc_item_id_month_mean enc_id_National_mean enc_id_mean_v2 4 enc_item_id_store_id_wd_v2mean enc_item_id_state_id_wd_mean enc_id_Sporting_mean enc_item_id_store_id_mean_v2 tm_d_sin enc_item_id_state_id_std_v2 enc_item_id_store_id_mean_v2 enc_id_std_v2 enc_item_id_store_id_mean enc_item_id_store_id_mean 5 enc_id_Religious_pre_std enc_id_National_pre_mean enc_id_snap_pre_mean enc_id_mean_v2 tm_d_cos enc_id_wd_v2mean tm_d_sin enc_id_wd_v2mean enc_id_mean_v2 enc_item_id_store_id_mean_v2 6 enc_id_Cultural_std enc_item_id_state_id_std_v2 enc_id_National_pre_mean enc_item_id_state_id_std_v2 enc_item_id_month_wd_std enc_id_std tm_d_cos enc_id_National_std enc_id_Religious_mean enc_id_Cultural_pre_mean 7 enc_id_snap_pre_std enc_item_id_month_mean enc_item_id_month_mean enc_id_Cultural_mean enc_id_mean_v2 tm_d_cos enc_item_id_National_std enc_id_Sporting_std enc_item_id_month_wd_mean tm_d_cos 8 enc_item_id_wd_v2mean enc_id_National_mean tm_d_sin enc_id_std_v2 enc_id_month_std tm_d_sin enc_id_National_std enc_id_National_pre_mean tm_d_sin enc_id_snap_pre_mean HOUSEHOLD_1 1 enc_id_National_mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean 2 enc_item_id_state_id_mean_v2 enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_id_wd_mean enc_item_id_state_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean 3 enc_id_mean_v2 enc_id_wd_mean enc_id_wd_mean enc_item_id_state_id_std_v2 enc_id_std_v2 enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_state_id_wd_v2mean enc_id_wd_mean enc_id_snap_pre_mean 4 enc_item_id_wd_v2mean enc_item_id_store_id_wd_mean enc_item_id_store_id_wd_mean price_norm3 price_norm4 enc_item_id_store_id_wd_mean enc_item_id_state_id_wd_mean enc_id_wd_mean enc_item_id_store_id_wd_mean enc_id_wd_mean 5 enc_item_id_store_id_mean_v2 price_norm4 price_norm4 enc_id_std_v2 enc_id_mean_v2 enc_item_id_state_id_wd_v2mean price_norm4 enc_id_mean_v2 price_norm4 enc_item_id_store_id_wd_mean 6 enc_item_id_state_id_mean enc_item_id_wd_v2mean price_norm3 enc_id_National_pre_std enc_item_id_store_id_std_v2 price_norm4 enc_id_wd_mean enc_item_id_store_id_wd_mean price_norm1 enc_id_Cultural_pre_mean 7 enc_id_Sporting_mean enc_id_month_mean enc_item_id_state_id_wd_v2mean enc_id_wd_mean enc_id_National_mean enc_id_snap_pre_std enc_item_id_state_id_wd_v2std price_norm4 enc_id_std_v2 enc_id_National_std 8 tm_d_sin price_norm3 enc_id_wd_v2std enc_item_id_state_id_wd_v2std enc_id_National_std enc_id_std_v2 enc_item_id_state_id_std_v2 enc_id_National_std price_norm3 enc_item_id_state_id_wd_v2mean HOUSEHOLD_2 1 enc_id_wd_v2mean enc_id_wd_mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_mean enc_id_std_v2 enc_id_mean_v2 enc_id_National_mean enc_id_mean enc_id_mean 2 enc_item_id_store_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_mean enc_item_id_store_id_wd_v2mean enc_id_mean_v2 enc_id_mean_v2 enc_item_id_store_id_mean_v2 enc_id_mean_v2 enc_item_id_store_id_mean enc_id_std_v2 3 enc_id_wd_mean enc_item_id_store_id_wd_mean enc_item_id_store_id_wd_v2mean enc_id_wd_mean enc_id_snap_pre_mean enc_item_id_store_id_mean_v2 enc_id_National_mean enc_id_snap_mean enc_id_wd_mean enc_id_mean_v2 4 enc_item_id_wd_v2mean enc_item_id_wd_v2mean enc_item_id_store_id_wd_mean enc_item_id_store_id_wd_mean enc_item_id_store_id_mean_v2 enc_item_id_state_id_mean enc_item_id_state_id_wd_v2mean enc_item_id_state_id_mean_v2 enc_id_mean_v2 enc_item_id_store_id_std_v2 5 enc_item_id_store_id_wd_mean enc_item_id_store_id_wd_v2mean enc_item_id_state_id_wd_v2mean enc_item_id_state_id_month_mean enc_item_id_store_id_mean enc_item_id_state_id_std enc_id_wd_v2mean enc_item_id_store_id_mean_v2 enc_id_National_mean enc_id_National_std 6 enc_item_id_state_id_wd_v2mean enc_id_mean_v2 price_norm4 enc_id_Cultural_pre_mean enc_id_snap_mean enc_id_National_pre_mean enc_item_id_wd_v2mean enc_item_id_state_id_mean enc_id_National_std enc_id_wd_v2mean 7 price_norm4 enc_item_id_state_id_wd_v2mean enc_item_id_wd_v2mean enc_item_id_month_std enc_id_Religious_mean enc_id_National_mean enc_id_Cultural_pre_mean enc_id_wd_v2mean enc_item_id_store_id_mean_v2 enc_id_snap_std 8 enc_id_National_std enc_id_snap_mean enc_item_id_state_id_month_mean enc_item_id_month_mean enc_item_id_wd_v2mean enc_id_National_std enc_item_id_store_id_wd_mean enc_item_id_wd_v2mean enc_item_id_wd_v2mean enc_id_Sporting_std FOODS_1 1 enc_id_std_v2 enc_id_wd_v2mean enc_id_wd_v2mean enc_id_Sporting_mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean 2 enc_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_state_id_wd_mean enc_item_id_store_id_wd_v2mean enc_item_id_state_id_mean_v2 enc_id_wd_mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean 3 enc_item_id_store_id_std_v2 enc_id_wd_mean enc_id_wd_mean enc_item_id_state_id_mean_v2 enc_id_mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_id_mean enc_id_wd_mean enc_id_std_v2 4 enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_mean enc_item_id_state_id_wd_mean enc_id_wd_mean enc_id_mean_v2 enc_id_Cultural_pre_mean enc_id_Cultural_pre_mean enc_item_id_state_id_std enc_id_mean_v2 enc_item_id_state_id_wd_v2std 5 enc_id_Cultural_pre_std price_norm4 enc_item_id_state_id_wd_v2mean enc_id_mean_v2 enc_item_id_store_id_mean enc_id_National_mean enc_id_snap_mean enc_item_id_store_id_mean enc_item_id_state_id_wd_v2mean enc_item_id_state_id_wd_v2mean 6 enc_item_id_wd_v2mean enc_id_National_mean enc_item_id_store_id_wd_mean enc_id_National_mean enc_item_id_store_id_mean_v2 enc_item_id_store_id_mean_v2 enc_id_Religious_mean enc_id_National_mean enc_item_id_store_id_wd_mean enc_item_id_state_id_mean 7 enc_id_Cultural_std enc_item_id_store_id_mean_v2 price_norm4 enc_id_wd_v2mean enc_id_wd_mean price_norm4 enc_id_Sporting_mean enc_item_id_state_id_mean enc_id_std_v2 enc_id_National_pre_std 8 enc_id_Sporting_std enc_item_id_month_mean enc_id_mean enc_item_id_store_id_wd_mean enc_id_Sporting_mean enc_item_id_month_std enc_id_mean_v2 enc_item_id_std enc_item_id_store_id_mean_v2 enc_item_id_wd_v2std FOODS_2 1 enc_item_id_state_id_wd_v2std enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_snap_std 2 enc_item_id_state_id_wd_v2mean enc_id_wd_mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_state_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_id_wd_v2mean 3 enc_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_id_wd_v2std enc_item_id_store_id_wd_mean enc_item_id_store_id_wd_mean enc_id_mean enc_item_id_state_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_id_wd_mean enc_item_id_store_id_wd_v2mean 4 enc_item_id_state_id_std_v2 enc_item_id_store_id_wd_mean enc_item_id_store_id_wd_v2std enc_id_wd_mean enc_item_id_store_id_wd_v2mean enc_item_id_state_id_wd_mean enc_id_wd_mean enc_id_snap_mean price_norm4 enc_id_snap_mean 5 enc_item_id_state_id_std enc_id_mean_v2 price_norm4 enc_item_id_state_id_wd_v2std enc_id_mean_v2 enc_id_snap_std price_norm4 enc_id_snap_std enc_item_id_store_id_wd_mean price_norm4 6 enc_id_wd_mean price_norm4 enc_item_id_store_id_wd_mean enc_id_snap_mean enc_id_Sporting_mean enc_item_id_store_id_wd_mean enc_item_id_state_id_wd_v2std price_norm4 enc_id_snap_std enc_item_id_state_id_wd_v2mean 7 enc_id_snap_mean enc_id_Cultural_mean enc_id_National_pre_std price_norm3 price_norm4 enc_item_id_state_id_mean enc_item_id_state_id_mean enc_item_id_month_mean enc_id_std_v2 release2 8 release2 enc_item_id_state_id_wd_v2mean enc_item_id_state_id_month_mean price_norm1 enc_id_National_mean enc_item_id_state_id_wd_v2mean enc_item_id_store_id_wd_mean enc_item_id_state_id_wd_v2std price_norm3 enc_id_National_std FOODS_3 1 enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean enc_id_wd_v2mean 2 enc_id_snap_std enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean enc_item_id_store_id_wd_v2mean 3 enc_item_id_store_id_wd_v2mean enc_id_wd_mean enc_id_wd_mean enc_id_wd_mean price_norm4 enc_id_wd_mean enc_item_id_state_id_wd_v2mean enc_item_id_state_id_wd_v2mean enc_id_wd_mean enc_id_snap_mean 4 price_norm4 enc_item_id_state_id_wd_v2mean enc_item_id_store_id_wd_mean enc_item_id_store_id_wd_v2mean enc_item_id_state_id_wd_v2mean enc_item_id_state_id_wd_v2mean enc_id_wd_mean enc_id_Religious_mean enc_item_id_store_id_wd_mean enc_item_id_state_id_wd_v2std 5 enc_id_snap_mean price_norm4 price_norm4 enc_item_id_state_id_wd_v2mean enc_item_id_wd_v2mean price_norm4 enc_item_id_wd_v2mean enc_id_mean price_norm4 enc_id_snap_std 6 enc_item_id_state_id_wd_v2mean enc_item_id_store_id_wd_mean enc_item_id_state_id_wd_v2mean enc_item_id_wd_v2mean enc_id_National_pre_mean enc_item_id_store_id_wd_mean enc_item_id_store_id_wd_mean enc_item_id_wd_v2mean enc_id_month_wd_mean price_norm4 7 price_norm3 enc_id_National_pre_mean enc_id_Cultural_pre_std enc_id_snap_mean enc_id_Religious_mean enc_item_id_wd_v2mean enc_id_month_wd_mean price_norm4 enc_item_id_state_id_wd_v2mean enc_item_id_state_id_std_v2 8 enc_id_wd_v2std enc_item_id_state_id_wd_mean enc_id_wd_v2std enc_item_id_store_id_mean enc_id_mean_v2 enc_item_id_month_wd_mean price_norm4 enc_id_wd_mean enc_id_std price_norm3 rank day of week x id encoding month x id encoding item_id or some id encoding day of a month sin-cos transf snap x id encoding (event) x id encoding days after product release normalized price of same item in CA_3
効果が無かったもの & 試していたもの Target Encoding • 2年などの期間変更は効果なし 同一dept_id内でk-meansによるclustering • 誤差が大きかった商品でzero
sales期間にパターンがあるものを発見し、傾向を確認したくPCAやclusteringを実行。 • Clusteringは、店舗間で合計した商品毎のdemandを標準偏差で基準化した後にk-meansを実行。 non-zero salesがスタートする期間やzero sales期間のパターンが同じようなものが分類できた(以下ある同一clusterの例)。 • Cluster毎にモデル構築も行いたかったが、モデル数が増えるので諦めた。商品取り扱い開始からの日数を説明変数に追加したり、同一商品のCA_3の価 格で連続したzero sales期間が説明できたので、これも説明変数に追加したりした。ただ、これ以上時間の制約もあり深堀りは出来なかった。 11
まとめ 12 • コンペの理解 • サンプルノートの作成 • WRMSSEの計算の実装 3月 •
目的関数のテスト • 交差検証の検討 • データの傾向確認/EDA • モデルの誤差分析 • GitHub/atomのテスト • Discussionの調査 • 色々あり取り組めず 4~5月 6月前半 今回の取組 感想や反省 • CVを信じてモデル構築したのは良かった。ただ、もう少しCVの精度は上げたかった。 • 商品は多いが、時系列方向のサンプルが28日のみとどうしても少ないので、CVの精度(CV vs Private)はかなり荒いコンペ(運要素)だったと 思う。また、Public LBが, Privat LBと相関が弱く(しかも6月に入り崩壊)、他の参加者と比べたときの相対的な優位性が途中分からなかったの は、順位を競うコンペの観点で厳しかった。ただし、題材としては、非常に勉強になる課題であった。 • 時系列方向のサンプルが少ないという点で、判断が難しいと思うが、説明変数を増やしすぎると、CVも含めた過学習になる可能性は高いと思う。 • 後半、特にプログラムの整理ができず、その場当たりで取り組んでしまった。もう少し、手持ちのコードなども色々と汎用的に使えるようにしていきたい。 • 順位は驚きで、今後も精進したい。 • Weightの再計算 • TEベースの特徴量作成 • モデルの選択 6月後半
(参考)モデルの周辺の話 13
WRMSSEの効率的な計算の実装について Lv.1~Lv.11のdemandを計算するには、pandasのgroupbyを用いることが一案。ただし、、行数が多く組み合わせも多い ため、計算時間を要する。 ⇒ SciPyのcsr_matrixを用い、grouping用の疎行列を作り、Lv.1~Lv.11を効率的に計算。 以下のNotebookを公開。 Python: https://www.kaggle.com/girmdshinsei/for-japanese-beginner-with-wrmsse-in-lgbm R: https://www.kaggle.com/girmdshinsei/for-beginner-r-lightgbm-japanese
(30490 × ) (42840 × 30490) × (42840 × ) TXに属するidが1になるベクトル 0-1weight:疎行列変換 sales 1,1, ⋯ , 1 Lv.1 Lv.2 ⋯ Lv.12 id = Lv.1 Lv.2 Lv.12 Aggregated sales id 14
WRMSSEのLightGBMのmetricとしての実施 当初、前ページの効率的なWRMSSEの計算について、LightGBMのEarly Stoppingのmetricとして使用することを考え た。しかし、以下の①、②から実施せず。 ①計算効率性 • Metricで計算するには、前ページのsalesの(30490 × )の行列が必要である。 しかし、分析用のlong
formatのデータ形式をwide formatに変換(pivot処理)する必要がある。 • 計測期間において、全データ30490個の商品すべてが観測され、並び順が整っていればreshapeで簡単にwide formatに変換可能。 しかし、d_1845以前は一部欠落しているデータがあり、wide formatの変換にpivot処理が必要で非効率的。 ②時系列方向のサンプルの少なさ • 時系列方向のデータが少なく感覚的にearly stoppingが過学習しそう。 15
weightの計算 RMSSEの①scale weightと、WRMSSEの②直近28日の売上金額のweightは、validation dataの公開後、再計算。 • zero sales期間によって、大きくウェイトが変わる商品も。 WRMSSEの実装とWeightの計算について、validation部分でpublic LBの数値とほぼ一致することを確認。 16