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.

Presentation 2

2018/7/5
ruikさん作成資料

  • Login to see the comments

  • Be the first to like this

Presentation 2

  1. 1. Copyright(C) 2018 KDDI Research, Inc. All Rights Reserved. 株式会社リンクバル イベントレコメンドエンジン作成コンペ 第3位ソリューション 2018年7月5日 株式会社KDDI総合研究所 ruik
  2. 2. Copyright(C) 2018 KDDI Research, Inc. All Rights Reserved.  SIGNATE: ruik / 木村 塁 / twitter:@ruik  KDDI総合研究所所属  社内のデータ分析コンペチームに所属しているものの、 SIGNATE / Kaggleは嗜む程度 自己紹介 2
  3. 3. Copyright(C) 2018 KDDI Research, Inc. All Rights Reserved. 3  始める前に考えた作戦  特徴量をどう作るかの勝負になりそう  モデルは使い慣れているLightGBM決め打ちである程度いってみて、余裕があれば他も試す  時系列でtrain/testが分かれていて、test期間が1週間なので、train最後の1週間をvalidation用 に使って評価するようにする  過去に自分が参加したコンペの復習から始めよう  Kaggle Instacartコンペの復習  各ユーザーがどの商品を再度買うかというコンペだったので、今回過去にアクションしていな いイベントへのアクションも予測するという点では違うが、特徴量の作り方の大まかな方針は 勉強になった • イベント単位の特徴量、ユーザー x イベントの特徴量を作らなきゃ、ということを思い出す  評価関数に対する最適化が必要だね、ということも思い出す • 今回だとnDCG@20最適化をすることになる 本コンテストでの手法・アプローチ
  4. 4. Copyright(C) 2018 KDDI Research, Inc. All Rights Reserved. 4  nDCG@20=ランキング最適化について  “LightGBM ランキング 最適化”でググると、lambdarankというobjectiveがある事がわかる  metric=ndcgにして、ndcg_at=20にすると、nDCG@20を最適化できそう  ということで、これを採用  ただし、lambdarankをobjectiveにするときのデータの渡し方などがわかるサンプルが少なく、 若干苦戦  実際の使い方はこんな感じでした • lgb_train = lgb.Dataset(X_train, label = y_train, weight = w_train) 本コンテストでの手法・アプローチ pandasのdataframeを query(今回だとuser_id) でソートしておく 評価関数にあった 2rj-1を計算して入れておく ※rj:購入3、BM2、View1、アクションなしも1 アクションがあったら1 なかったら0
  5. 5. Copyright(C) 2018 KDDI Research, Inc. All Rights Reserved. 5  特徴量の作り方  イベント単体 • イベントの開催日時とtest期間開始日時との差 • イベントへの直近のアクション数 • ある県の全イベントへの全アクションに対し、そのイベントへのアクションの割合 • どういう年齢制限のイベントがアクションされやすいか • どういう価格のイベントがアクションされやすいか  ユーザー x イベント • この組み合わせでの直近のアクション • 似たようなイベント(年齢制限、価格、都道府県、interestが一致)に直近でアクションしているか • 過去にアクションしたイベントの年齢上限/下限の平均との差(同性、異性) • 過去にアクションしたイベントの価格の平均との差(同性、異性) • どの県のイベントにアクションしやすいか • どのinterestにアクションしやすいか • どの曜日のイベントにアクションしやすいか  ユーザー(抽象化) x イベント • ある県のユーザーはどの県のイベントを選びやすいか • ある県のユーザーは直近でどのイベントにアクションしているか • ある年齢&性別のユーザーはどういう価格帯のイベントにアクションしやすいか • ある年齢&性別のユーザーはどういうinterestのイベントにアクションしやすいか  過去の部分を7日、14日‥等にしてバリエーションを増やしたものの、最終的には47特徴量 本コンテストでの手法・アプローチ
  6. 6. Copyright(C) 2018 KDDI Research, Inc. All Rights Reserved. 6  特徴量セットの増やし方  9/24週をtest 9/17週をvalidation 9/10週以前を1週間単位で train_1, train_2, … として、train用データを増やせる  特徴量を生成する時間、メモリ使用量、学習時間がどれもバカにならないので、基本的には train_1 + train_2の2週分を利用  testを予測するときには、validationで決めたパラメーター(主にイテレーション数)を用い て、validation + train_1の2週分で再度学習し直した  締切間際に、train期間を増やし始め、最終的には20週分をtrain期間にした • 1週から10週までは線形に増えていくことを確認したが、最終的には時間の関係で決め打ち 本コンテストでの手法・アプローチ 9/24 9/319/10 9/17 testvalidationtrain_1train_2 9/3 ・・・
  7. 7. Copyright(C) 2018 KDDI Research, Inc. All Rights Reserved. 7 datetime public private 2018/5/16 21:56 0.11252 0.10188 2018/5/16 22:45 0.11143 0.09793 2018/5/16 23:12 0.11582 0.1029・特徴量加工ほぼなしで、users, eventsをマージしたのみ 2018/5/17 14:06 0.11638 0.11498 2018/5/17 16:06 0.13317 0.12439・年齢制限特徴量追加 2018/5/17 21:33 0.14502 0.14519 2018/5/17 22:59 0.14243 0.14355 2018/5/18 10:33 0.16058 0.16142・イベント開催曜日・時間特徴量追加 2018/5/18 15:36 0.17829 0.16808・objective:binaryでauc最適化→lambdarank導入 2018/5/19 13:55 0.1792 0.17301 2018/5/19 18:32 0.19773 0.19552・interest選好度追加 2018/5/20 0:50 0.21609 0.21651・曜日特徴量追加 2018/5/20 9:27 0.23748 0.23718・同イベントへの過去X日のアクション特徴量を追加 2018/5/20 11:21 0.23768 0.2347 2018/5/20 13:51 0.25271 0.2403・類似イベントへの過去X日のアクション特徴量を追加 2018/5/20 19:49 0.256 0.24841 ・学習期間を2週→5週に ・学習時、一部のusersデータを無くす(testに合わせる) ・途中、バグが入ったり、バグを直したりして一進一退 2018/5/21 0:02 0.2556 0.23968 2018/5/21 10:35 0.25231 0.23678 2018/5/21 12:21 0.25833 0.24504 2018/5/21 19:18 0.26265 0.25072・学習期間を20週に Submit履歴での振り返り 水曜夜に始める 木曜のPMは仕事 しながらやっている 金曜はコンペの合間に 仕事をしている 土曜の午前に保育園の 遠足イベントをこなし、 その後ひたすらコンペ 月曜もコンペの合間に 仕事をしている ※学習期間を伸ばして時間が かかっているので、実稼働は あまりない
  8. 8. Copyright(C) 2018 KDDI Research, Inc. All Rights Reserved. 8 参考:変数重要度
  9. 9. Copyright(C) 2018 KDDI Research, Inc. All Rights Reserved. 9  短期間で集中して取り組めたのが良かった  特徴量追加すればするほど上がり続けた  モチベーションが下がらずやり続けられた  会社の同僚がコンペに参加していたことがモチベーション維持につながった  やり残したことはまだありそう  usersにデータがないuserについてはどのようにすればよかったのか? • 直前にtestと状況を合わせるために、train/validation側でも週の初めの段階で 登録されていないユーザーのデータは無くしたが、publicとprivateの値が乖離するだけで、 privateスコアは下がっているように見えた  パラメーターチューニングほとんどやれていない  異なる複数モデルの出力結果とアンサンブルしたらもっとよかったのではないか • 最後ギリギリでやろうとして間に合わなかった • いつも同じ状況になるから、事前にアンサンブルが簡単にできるようにしておくべきだった  AWSのリソースを使わせてくれた&業務時間中に取り組ませてくれる会社に感謝  土日に子供の面倒を見てくれた妻に感謝 本コンテストの感想
  10. 10. Copyright(C) 2018 KDDI Research, Inc. All Rights Reserved. 10

×