見出し画像

レコメンド(推薦)系コンペまとめ


はじめに

本記事は、Japan Digital Design Advent Calendar 2023 の17日目の記事になります。

三菱UFJフィナンシャル・グループ(以下MUFG)の戦略子会社であるJapan Digital Design(以下JDD)でMUFG AI Studio(以下M-AIS)に所属する永友遥です。
今年の5月からjoinし、主に与信スコアリングモデルの開発に携わっていますが金融ドメインの知見が0からのスタートでしたので日々勉強の毎日です。
さて、M-AISでは業務以外にR&Dテーマを各自が設けて自身の興味がある技術分野への研鑽を積める制度があります。私はかねてから個人的に興味があったレコメンド(推薦)ロジックをテーマとしてkaggleをはじめとする過去に開催されたレコメンド系コンペの解法についてのリサーチをテーマとしています。そこで今回の記事では社内の勉強会でも共有した内容ではありますが2つのコンペについて取り上げたいと思います。

1. H&M Personalized Fashion Recommendations

コンペ概要

  • 開催期間: 2022/02/08 ~ 2022/05/10

ファッションブランドH&Mの顧客のECストア上におけるアイテムの購買履歴および顧客・アイテムのメタ情報が与えられており、ユーザーが将来購入しそうなアイテムを推薦するというものでした。
2年程度の購買履歴が学習データとして提供され、学習データの最後の日付から未来7日間に購入するアイテムをユーザー毎に予測します。提出時はユーザーあたり12件ずつ推薦リストを作成する必要があり、評価指標はMAP@12で計算されます。評価指標の性質上、実際に購入したアイテムが推薦リストの上位に位置しているほどスコアが高くなります。

データセットについて

  • 購買履歴

    • 2年分で約3000万レコード

    • タイムスタンプ, ユーザーID, アイテムID, 価格など

  • 商品情報

    • 10万レコード

    • ジャンル, カラー, 商品説明文

    • 商品画像データ

  • 顧客情報

    • 130万件

    • 年齢, ハッシュ化された郵便番号など

本コンペのポイント

  • 購買履歴は実際に商品を買ったというimplicit feedback(暗黙的評価)に該当するデータのため負例が明示的に存在しません。(買わなかったからユーザーにとって興味がないアイテムとは限らないため。)そのため教師あり学習で解けるタスクに落とし込めるよう学習データを作成する必要がありました。

  • シンプルに全ユーザーx全アイテムの総当たりでデータセットを作成するとレコード数が莫大になり計算負荷も高くなり現実的ではないため、ある程度ユーザー毎に購入確率が高そうなアイテムに絞って候補集合を作成する必要がありました。

よく取り組まれていたアプローチ

多くの参加者が取り組んでいたのは前半で多種多様な手法でアイテム候補を生成し、その候補集合に対して特徴量を付与しGBDTなどで教師あり学習を行なって並び替えを行う2-stage制のアプローチ(多段階推薦)が人気でした。
(本コンペでこのアプローチが広く認知されてから次のOTTOコンペなどのちの推薦系コンペでも使われるようになったと感じています。)

  • 1st stage(候補生成フェーズ)

    • 10万程度あるアイテム集合からユーザー毎に購入しそうなアイテムを数百点まで絞り込み候補集合を生成します。

    • 候補生成手法としてはルールベースもあればモデルベースなど多種多様でした。

      • ユーザーが過去に購入したアイテム

      • 直近人気アイテム

      • 協調フィルタリング

      • etc.

    • 後段のフェーズは並び替えをするだけなのでいかにここで興味がありそうなアイテムを拾い切れるか(Recallを上げられるか)が重要でした。

  • 2nd stage(リランキングフェーズ)

    • 1st stageでユーザーあたり数百アイテムとのペアが生成されたのでこのペアに対して特徴量を付与していきます。教師ラベルは実際にそのアイテムを購入したかどうかのバイナリになります。

    • 特徴量例

      • ユーザー x アイテムを掛け合わせたもの

        • 購入数

        • 前回購入からの経過日数

      • アイテム・ユーザーのメタデータ

        • 購入頻度

        • 価格

    • アルゴリズムとしてはGBDTあるいはNNでランク学習として解くパターンが多かったですが二値分類として解く参加者もいました。

    • 上記の教師あり学習で得られた予測スコアで降順ソートしてユーザー毎に上位12件のアイテムを推薦リストとします。

2-stageアプローチのイメージ

上位解法の紹介

上位に入賞したチームの解法からユニークそうだった部分をピックアップしました。

1st place

  • 候補生成

    • 再購入した商品

    • アイテムベース協調フィルタリング

    • 同じproduct_codeを持つアイテム

    • 人気アイテム

    • Graph embedding(ProNE)の類似度TopN

    • アイテムカテゴリによるロジスティック回帰

  • リランキング

    • ハンドクラフト特徴量以外の工夫をしていました。

      • Word2Vecを用いてアイテム間の類似度

        • ユーザーの候補集合で類似度を計算?

      • ProNEによるユーザーとアイテム間の類似度

    • LightGBM, CatBoostのアンサンブルモデル

引用: https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations/discussion/324070


2nd place

  • 候補生成

    • ユーザー毎に人気のある600アイテム

      • 全体での人気アイテム + ユーザーが過去購入したアイテムの同一カテゴリの人気アイテム

    • ユーザーが過去購入したアイテムと同じ属性を持つ人気アイテム

      • 直近1, 3, 7, 30, 90日間などバリエーションを変えてカウント

    • MobileNetによるアイテム画像の埋め込みを用いた類似アイテム

    • アイテム-ユーザーグラフのランダムウォーク

  • リランキング

    • アイテムベース協調フィルタリングの類似度

    • ユーザーがアイテム, 同一カテゴリなど連続して購入した回数

    • ユーザーの過去購入したアイテム属性との平均類似度

      • 個々のアイテムに紐づく属性(おそらくカテゴリなど)とのjaccard係数の平均値

3rd place

  • リランキング

    • Word2Vecを用いてアイテム間の類似度

    • BPR(Baysian Personalized Raking)のユーザーアイテム間の類似度

      • Implicit feedback(暗黙的評価)向けの推薦アルゴリズム

      • ユーザーu, 暗黙的に評価したアイテムi, 未観測アイテムjのデータをもとに、ユーザーuと評価アイテムiのベクトルが近くなるように評価アイテムiと未観測アイテムjのベクトルが遠ざけるように学習します。

    • GBDT系のアンサンブル(XGBoost, LightGBM, CatBoost)

Tips

  • 2nd stageでの学習データの計算効率化

    • 1st stageで候補を絞ったといえ負例レコードが大量に生成されるため計算時間を削減するためにnegative down samplingを行うチームもありました。

  • implicit feedback向けのアルゴリズムのライブラリ

    • implicit

      • BPRや行列分解といったimplicit feedback向けモデルが実装されています。

    • RecBole

      • 古典的なものからNNベースのものまで推薦アルゴリズムを気軽に試すことができます。

    • LightFM

2. OTTO – Multi-Objective Recommender System

コンペ概要

  • 開催期間: 2022/11/02 ~ 2023/02/01

ドイツのECショップOTTOのセッションベースの行動履歴が与えられ、セッション単位である時点以降にインタラクションイベント(clicks, carts, ordersの3タイプ)が発生しそうなアイテムを予測します。
4週間分の行動履歴のうち最初の3週が学習データで残り1週分がテストデータになりテストデータの各セッションは途中時点までの情報であり、その時点以降にclicks/carts/ordersされるであろう商品などを予測するというタスクでした。
評価指標はインタラクション毎に20個のアイテムを予測しそれぞれのRecall@20を加重平均されたものがスコアになります。

score = 0.1 x Recall(clicks) + 0.3 x Recall(carts) + 0.6 x Recall(orders)

データセットについて

  • 行動履歴

    • 4週間分

    • 1200万セッション, 180万アイテム

    • カラムについて

      • セッションID

      • アイテムID

      • タイムスタンプ

      • タイプ(click/cart/order)

本コンペのポイント

  • 先ほどのH&Mコンペと比較すると与えられたデータセットが行動履歴のみと非常にシンプルです。またユーザーやアイテムのメタ情報もないため行動履歴を十分に活用する必要がありました。

  • 評価指標はこちらの方がやや複雑です。ただ加重平均の重みを鑑みてclicks/cartsよりもorders(注文)に至ったアイテムをうまく予測できるか?がスコアを上げる点で重要でした。

よく取り組まれていたアプローチ

大まかなアプローチでは先ほどのH&Mコンペの後に開催された関係もあり、候補生成->リランキングからなる2-stage制のアプローチが主流でした。
その中でも候補生成手法としてCo-visitation matrix(共起行列)が注目を集めました。
考え方はシンプルで同一セッション内に同時に出現したアイテム同士の頻度をカウントします。これを全セッションにまたがって集計することである2アイテムが同一セッション内で同時に出現する共起回数の行列を得ることができます。
候補を生成する時はたとえばセッションの最後にインタラクションしたアイテムをクエリとし、Co-visitation matrixとjoinさせて関連度が大きいアイテムTopN個を抽出することでそのセッションと対応する候補集合を作ることができます。
実装がシンプルな上に有用な候補生成手法であったことから多くの参加者が1st stageのアプローチに取り入れ、単に同時に出現した頻度をカウントするだけでなくタイプで重みづけをしたり時間減衰を加えたりなど関連度の計算に工夫をこらすことで多様な候補を抽出することが可能でした。

引用: https://blog.brainpad.co.jp/entry/2023/04/06/151913

上位解法の紹介

同様にユニークな部分をピックアップしました。

1st place

  • 候補生成

    • バリエーションをもたせたCo-visitation matrix

    • NN(MLP, Transformer)で行動履歴を埋め込み、正例・負例のアイテムIDの埋め込みとのコサイン類似度を計算しcategorical cross entropyで学習(引用の下図参照)

  • リランキング

    • LightGBM

    • 特徴量

      • Co-visitation matrixのランク

      • NNベースの候補生成時のコサイン類似度

引用: https://www.kaggle.com/competitions/otto-recommender-system/discussion/384022

2nd place

  • リランキング

    • アイテム同士のセッション内のtimestampの順番の差

    • XGBoost, CatBoostのアンサンブル

引用: https://www.kaggle.com/competitions/otto-recommender-system/discussion/382790

3rd place

  • 候補生成

    • 20個のCo-visitation matrix

      • 前後nイベント以内のアイテム同士にフィルタリング

      • 出現回数に時間減衰を加える

Tips

  • H&M同様にnegative down samplingによる負例レコードを削減するのに加えてGBDTをGPUで実行することにより実験効率化に取り組んでいるチームもありました。

  • この頃からじわじわと巷でpolarsが注目を浴びはじめたのもありデータハンドリングの部分をpolarsで実装するチームが増えました。

3. まとめ

行動履歴をもとにした推薦タスクへの取り組み方

今回ご紹介した二つのコンペは、情報量は違えどどちらも購買履歴だったり行動履歴のようなimplicit feedbackに該当されるデータを用いて将来ユーザーが好ましそうな商品を推薦するというタスクでした。
膨大なユーザー・アイテム集合に対して愚直に総当たりで予測をするのは現実的ではありません。そのため、前段でルールベースなどを用いて荒い粒度で候補を生成し後段でユーザー・アイテムのペアに対して履歴やメタデータを元にした特徴量を付与しランク学習を行うリランキングの2-stageアプローチがコンペで広く取られていることが分かりました。
実際にECサイトの回遊ログだったり購買履歴をもとにレコメンドしたいというニーズは一般的ですのでコンペの場にとどまらず実務でもうまく活用できそうです。

両コンペの違い

大まかな解法は先述の2-stageアプローチで共通なのですが、あえて両コンペの違いを言うのであればsession-basedかsession-aware(sequence-aware)なのかというところだと感じています。
こちらの資料から引用しますと、

昔のセッションの情報を用いて行動予測を行う場合をsession-aware, 同一セッション内の情報のみを用いて行動予測を行う場合をsession-basedと呼ぶ。また、一般にセッションを切らず過去の行動から予測を行う場合をsequence-awareと呼ぶ

引用: https://speakerdeck.com/karakurist/user-behaviour-vol2?slide=4
  • H&Mコンペ

    • session-aware(sequence-aware)

      • 過去のセッションにまたがって予測を行う。

    • データセットにはセッションカラムはありませんがECサイトのログとして捉えるとシステム上何かしらのセッションIDには紐付きそうです。

  • OTTOコンペ

    • session-based

      • 単一のセッションに対して予測を行う。

セッションは特定期間のユーザー行動のまとまりという括りですが、予測の観点からですとsession-basedよりもsession-awareな状態で分析を行える方が候補生成や特徴量設計の自由度が高いと思います。(例えばユーザーとセッションの対応関係が分かればシンプルに同一ユーザーの情報量が増えるので過去の複数セッションを用いた候補生成や特徴量が作成可能になります。)

一方で大量に過去のセッション情報があるといえど過去の情報がノイズ(嗜好品のレコメンドがしたいとき、1年前の嗜好よりも今の嗜好は変化する可能性があるため直近の情報の方が重要となるケース)となる場合もありますので結局はドメインに依存するためケースバイケースだと感じています。

実務での応用を考えるとシンプルな行動履歴しか収集できないという場合はOTTOコンペのようなsession-basedでのレコメンドロジックが必要になってきますし、さらにユーザーやアイテムのメタデータも分析に使えるようなフェーズになるとH&Mコンペのようなsession-awareなアプローチが可能になるのでサービスの状況に合わせた推薦ロジックを設計する必要があるでしょう。

4. 最後に

ここまでお読みいただきありがとうございました。
今回はレコメンドのトピックについて取り扱いましたが金融ドメインでもお客様への金融商品のレコメンドなど推薦が活きる場面はありますのでこういった知見をもとに業務へ還元していきたいと思っています。

M-AISでは多種多様な経歴をもつデータサイエンティストが多く在籍しておりMUFGにおける金融ビジネス課題解決のためのデータ分析や機械学習モデルの開発に日々従事できるなかなかやりがいのある職場であると感じています。
そんなM-AISに興味を持っていただいた方はぜひカジュアル面談でお話ししましょう!お待ちしております!

5. 参考記事

本記事を作成するにあたり引用・参考にさせていただいた記事などを記載させていただきます。ぜひこちらもご覧ください。


Japan Digital Design株式会社では一緒に働いてくださる仲間を募集中です。カジュアル面談も実施しておりますので下記リンク先からお気軽にお問合せください。

この記事に関するお問い合わせはこちらからお願いします。

M-AIS
永友 遥