Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DeNA・MoT AI技術共有会発表資料 H&Mコンペの振り返り

5473f177bf5562e68645e1a6e0428f9c?s=47 Kyohei Uto
May 27, 2022
1.4k

DeNA・MoT AI技術共有会発表資料 H&Mコンペの振り返り

DeNA, Mobility TechnologiesのAI技術共有会で発表した資料です。
kaggleで開催されていたH&M Personalized Fashion Recommendationsというコンペを振り返り、自チームの解法を中心にコンペのポイントや使われていた手法、上位解法について紹介しています。

コンペページ:
https://kaggle.com/competitions/h-and-m-personalized-fashion-recommendations/

5473f177bf5562e68645e1a6e0428f9c?s=128

Kyohei Uto

May 27, 2022
Tweet

Transcript

  1. 2022.05.26 宇都 恭平 株式会社ディー・エヌ・エー + 株式会社 Mobility Technologies Kaggle H&Mコンペ振り返り

  2. 2 項目 01|コンペ概要 02|チーム解法 03|上位解法まとめ

  3. 3 項目 01|コンペ概要 02|チーム解法 03|上位解法まとめ

  4. 4 コンペ概要 H&M Personalized Fashion Recommendations アパレル商品の購入履歴をもとに、1週間後にユーザが購入する商品を予測する レコメンデーションタスクのコンペ。 submissionは全ユーザに対する12個の推薦アイテムのリスト

  5. 5 Twitterで知り合った社外の方とチームを組んで参加し、 Public:14th -> Private: 23thで銀メダル 参加したコンペの結果 本日は弊チームの解法を中心にコンペのポイントや使われていた手法、 上位解法についてお話しします

  6. 6 ▪ ユーザデータ ▪ 約137万件 ▪ 年齢、会員情報、郵便番号 etc… ▪ アイテムデータ(画像データあり)

    ▪ 約10万件 ▪ 色や商品のカテゴリ等のtext情報、説明文 etc… ▪ 2年分の購買トランザクションデータ ▪ 3000万件 提供されているデータセット 提供されている商品画像の例
  7. 7 ▪ ポイント ユーザごとに最大12個の商品を予測値として使用可能 ユーザが購入した商品(正解)が予測した12個内に含まれているとスコアがつく 購入した商品が推薦リストの上位にあるほどスコアが上がる(予測値の順序が重要) 評価指標 • U: ユーザ数

    • p(k) : rank kでのprecision • n: ユーザの予測数 • m: ユーザの正解数 • rel(k): 予測が正解の場合1それ以外は0 MAP@K: レコメンデーションのタスクでよく用いられる評価指標
  8. 8 ▪ 学習データセットの作成 ▪ ここが今回のコンペの肝であり難しい点だった。データの特性上負例が存在 しないためMLで解ける形式にデータセットを作成するのが難しかった。 ▪ ファッションの特性を考慮したデータ・モデルの構造 ▪ ファッションという特性上サイズ違いによる再購入が割合として多く

    通常のレコメンドタスクとは特性が異なっていた。 ▪ cold start user/itemへの対応 ▪ まだ購入履歴のない新規ユーザや新規アイテムのこと ▪ 割合としてはユーザの0.7%,アイテムの0.9% に該当。 ▪ 結果的にはここで大きな差はつかなかったものの、レコメンドの一般的な 課題が今回のコンペにも含まれていた。 今回のタスクの主要な課題
  9. 9 explicit feedback(明示的評価) データの特徴 implicit feedback(暗黙的評価) 今回はこちら 日時 ユーザ アイテム

    評価 2020-12-01 A k 4 2020-12-22 A m 5 2021-02-01 A l 3 ユーザの評価が明示的に与えられている アイテムに対するネガティブな反応も直 接得ることができる ユーザがアイテムを購入したという情報しかな いため負例が存在しない。 (購入していない ≠ ユーザが好まないアイテム) 日時 ユーザ アイテム 2020-12-01 A k 2020-12-22 A m 2021-02-01 A l
  10. 10 項目 01|コンペ概要 02|チーム解法 03|上位解法まとめ

  11. 11 discussionで上位チームから紹介されていた2stageのアプローチを採用 ▪1st stage 粗い方法(主にルールベース)でユーザが購入する 可能性のある候補アイテムを抽出 この段階でアイテムをユーザあたり100~300に絞る ▪2nd stage 機械学習モデルで商品をさらに絞り込み順位づけする

    ほとんどの参加者がGBDTを使用。(以降もGBDTで説明する) このコンペでよく取り組まれていたアプローチ item corpus method1 method2 method3 ML model 1st stage 候補生成 2nd stage MLで絞り込み 予測
  12. 12 A. 複数の戦略で各ユーザの候補アイテムを抽出 B. ある週にユーザがそのアイテムを購入するかどうかをlabelとして付与 C. ユーザとアイテムの組み合わせから特徴量を生成 基本的なデータセット作成方法 user item

    week label feature A k 103 1 xxx A m 103 0 xxx A   B C データセット作成のTips: • 正例は全て学習に使うのではなく候補として上がった正例アイテムのみを使用する • 正例を1つも含まないuserはデータセットから除く • 負例の比重が多くなるので必要に応じてnegative sampling • 既に販売されていないアイテムを除く
  13. 13 おそらくここが最も重要なポイント ユーザが購入する可能性のある候補を複数の戦略で生成。購入アイテムが候補に 多く含まれるように戦略の配分などを行った。 ▪ 直近の人気アイテム ▪ 多くのユーザにリーチできるためシンプルだが有効な方法 ▪ 全体の人気アイテムに加え、商品カテゴリ別や年齢別のように集計単位を変えた人気商品も有

    効だった。 ▪ 直近に購入したアイテム ▪ ファッションというデータの特性上再購入が多かったため非常に強力 ▪ ユーザが過去に購入したアイテムと関連性の高いアイテム ▪ 協調フィルタリングによる関連アイテム ▪ 色違いアイテム ▪ ユーザと関連性の高いアイテム ▪ 協調フィルタリングによる関連アイテム 1st stage: 候補生成
  14. 14 アイテム情報は用いず、購入履歴のみからユーザの好みを獲得する推薦手法 候補生成や特徴量生成に使用することでスコアを伸ばすことができた 協調フィルタリング(CF: Collaborative Filtering) item based CF アイテムの共起性(よく一緒に購入されるか)を元

    にアイテム間の類似度を計算する推薦手法 user based CF 購入傾向からユーザ間の類似度を計算し対象ユーザの 類似ユーザがよく購入している商品を推薦する手法 ユーザとアイテムの類似度が得られるので、 それをもとにユーザの類似度上位K個のアイテム を候補として使用できる。 アイテム間の類似度が得られるので、 それをもとにユーザが直近で購入した商品の類似 度上位K個のアイテムを候補として使用できる。 前回購入 アイテム 任意のユーザの購入傾向 2.0 1.0 1.0 類似ユーザ 対象ユーザ 2.0 1.0 1.0 類似ユーザがよく買うアイテム
  15. 15 LightGCNによる協調フィルタリング https://arxiv.org/abs/2002.02126 モデル概要 • GCNを使った協調フィルタリング • userとitemの関係をグラフとみなし購入履歴のない アイテム(リンクが未知)に対するリンク予測を行う •

    モデルはuser,itemを入力として両者の類似度を出力 LightGCN BPRLoss 正例 購入履歴 5つrandom samplingしスコアが 高いものを負例として使用 positive score negative score userとitemの類似スコア embedding_size: 256 n_layers: 4 user*item特徴量として類似度と rankを使用 各userの類似度上位 itemを候補として追加 ・・・ Training (RecBoleを使用 https://recbole.io/) 負例 Candidates Features 正例のscoreを上げ、負例の scoreを下げるよう学習 通常のuser based CFの代わりにNNによるCFを使って候補生成と特徴量生成を行った
  16. 16 ▪ ユーザの静的特徴量 ▪ 年齢 ▪ 郵便番号 2nd stage: 特徴量生成

    ▪ アイテムの静的特徴量 ▪ アイテムカテゴリ ▪ textを全てconcatして BERT->UMAP6次元圧縮 ▪ ユーザの動的特徴量 ▪ 購入数 ▪ 前回購入した商品かのフラグ ▪ 前回購入した商品の色違いかのフラグ ▪ 前回購入してからの日数・週数 ▪ 購入品の金額・割引額の統計量 ▪ オンライン購入率 ▪ アイテムカテゴリごとの購入率 ▪ 再購入率 ▪ アイテムの動的特徴量 ▪ 売上の伸び率 ▪ 直近の売上数ランキング(年齢、カテゴリ別) ▪ 直近の売上数(年齢、カテゴリ別) ▪ オンライン購入率 ▪ CFによる特徴量 ▪ 前回購入品との類似スコア ▪ ユーザ×アイテムの類似スコアと 類似度ランキング transactionsから得られるユーザとアイテムを掛け合わせた(動的)特徴量が特に有効だった。 メモリの都合上、入れてもあまり効果なさそうな特徴量は除いたりもしていた。
  17. 17 ▪ データを週単位で扱いtrain、validに分割(train期間は3~5週の参加者が多かった) ▪ リークのないようにtrain期間より前の購入履歴からユーザの候補・特徴量を生成 ▪ train,valid期間のデータを使ってlabelを付与 2nd stage: Cross

    Validation戦略 train data week valid data week create candidates and features week 104 week 103 week 102 week 101 week 100 week 0 week transactions week
  18. 18 コンペ序盤で紹介されていたLightGBMのRanker modelを使用した。 終了後のsolutionを見ると2値分類として解いているチームも多かった。 実装はほぼ同じだが異なるのは以下の点。 2nd stage: 機械学習モデル • 目的関数はlambdarank

    • datasetのgroupにその週のcustomerの購入数のリストを渡す(customer_idで事前にsort済み)
  19. 19 候補・特徴量が異なる6つのモデルでアンサンブルをした。 今回のタスクは予測の順番が重要なので公開notebookを参考に 予測したアイテムの順位に応じて重みをつけてアンサンブルを実施。 https://www.kaggle.com/code/titericz/h-m-ensembling-how-to アンサンブルのTips:(他チーム情報) ▪ 各モデルの12個の推薦リストではなく24個のように大きめのリストを使用 ▪ 上位のアイテムが優先されすぎないように重みを調整

    アンサンブル
  20. 20 ▪ 概要 購入履歴を持たない9699人(0.7%)の新規ユーザに対してルールベースで推薦 直近の人気アイテム上位12個を一律に推薦する場合に比べてスコアがわずかに改善 1. 年齢別の人気アイテム x歳のユーザに対して直近3週間におけるx±w歳の人気アイテム上位12個を推薦 直前の売り上げを重要視したいのでテスト期間との日数の差に応じて売上に重みをつけ評価 2.

    購入可能性の低いアイテムの除去 「郵便番号ごとの店舗利用率」をもとに新規ユーザがオンライン/ストアのどちらを利用する かを推定 オンラインを利用すると推定されたユーザからオンラインで購入されにくいアイテムを推薦 アイテムから除く(逆も同じ) 後処理
  21. 21 弊チームの解法まとめ

  22. 22 項目 01|コンペ概要 02|チーム解法 03|上位解法まとめ

  23. 23 基本的な方針は上位もおおよそ同じなので 上位solutionの中からユニークな部分のみを抜粋

  24. 24 1st place solution 候補 - graph embedding(ProNE)の類似度上位 - アイテムカテゴリを使ったロジスティック回帰

    特徴量 - word2vecから得たアイテム間の類似度 - graph embeddingによるユーザとアイテムの類 似度 Tips: - catboost-gpuでlightgbm-cpuの30倍の高速化 - feature storeを実装し特徴生成を短縮 - データのencodingや型変換によるメモリ節約 モデリングや特徴量エンジニアリングよりも候補生成の戦略が今回の鍵だったとコメント https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations/discussion/324070
  25. 25 BPR matrix factorizationを使用した特徴量生成 BPR: (Baysian Personalized Ranking) ▪ implicit

    feedbackデータに対する推薦アルゴリズム ▪ ユーザの購入アイテムとサンプリングした未観測アイテムを使用 ▪ 購入アイテムとユーザのベクトルを近づけるように、反対に未観測アイテム とユーザのベクトルを遠ざけるように学習する ▪ この方法で学習したユーザとアイテムの類似度を特徴量として使用すること でスコアを大きく伸ばした。 3rd place solution https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations/discussion/324129
  26. 26 ▪ アイテムの属性情報をembedding ▪ ユーザの属性情報をembedding ▪ 両者のembeddingから類似度を算出 ▪ ユーザのembeddingをする際にgating network

    というものを利用しユーザのアクティブ度合いに 応じてNNを分けて学習するよう工夫 4th place solution https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations/discussion/324094 Two tower NN modelによる候補生成
  27. 27 ユーザが過去に購入した全商品のtext情報を全てconcatして1つの文章とみなし てTF-IDF+SVDをかけユーザの特徴量として生成 アイテムのtext情報をそのままアイテムの特徴量として使用するのではなく、 ユーザの特徴量としていて納得感が強かった。 6th place solution アイテムのメタデータ https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations/discussion/324075

    ユーザの特徴量として過去購入アイテムのtext情報を使用
  28. 28 ▪ implicit https://github.com/benfred/implicit implicit feedback用の協調フィルタリングを提供するライブラリ。 ▪ RecBole https://github.com/RUCAIBox/RecBole PyTorchベースのNN系の推薦アルゴリズムライブラリ。

    ▪ recommenders https://github.com/microsoft/recommenders microsoft製の推薦アルゴリズムライブラリ。古典的手法から最新のNNモデルま で幅広く実装されている。 解法で使われていた推薦アルゴリズムのライブラリ