商品の補完関係に注目した推薦システムを考えてみませんか？

みなさんは「レコメンドされた商品が実際どのようにユーザに消費されるか？」を考えた推薦システムを構築できていますか？

本記事は、推薦システムに関するトップカンファレンス [ACM RecSys'24](https://recsys.acm.org/recsys24/) に採択された論文を当人が解説（＝宣伝）しながら、ついでに「**補完推薦（Complementary Recommendation）**」の概況を簡潔にまとめた記事となっています。

採択された論文はこちら ↓

https://doi.org/10.1145/3640457.3691705

## 補完関係とは

### 定義

論文によって定義はマチマチですが、最近は「ある商品について、一緒に購入（消費）すべき商品」を補完関係としているものが多く、私もこれに賛同しています。

![relationship.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529987/90371727-f891-6ed6-fedb-8d75fbccfa48.jpeg)

言葉だけでは伝わりにくいと思うので、例を挙げるならば、
- スマートフォン本体とスマホケース
- フォークとスプーン
- シャープペンシルと替芯

のような、一方の商品をもう一方の商品が補完する関係です。

また、補完関係を議論する際は、
- A社のスマートフォン本体と、B社のスマートフォン本体
- デザインが赤色のシャープペンシルと、デザインが黒色のシャープペンシル

のように互いに代替可能な関係のものを「代替関係」と呼び、補完関係と区別して考慮します。

では、補完関係を考慮することの利点とは何でしょうか？

### 利点

一般的な推薦システムは、ユーザの過去のインタラクション履歴やアイテムの特徴を見て、ユーザの嗜好にあった商品をレコメンドします。

ここで、冷蔵庫を最近購入し、気に入ったため高評価を付けたAさんがいたとします。
推薦システムが次にAさんに推薦する商品は何が考えられるでしょうか・・・？
→ <INS>別の冷蔵庫</INS>、食品、トレー、製氷器

そうです。"冷蔵庫を高評価したユーザに冷蔵庫を勧めたら高評価を付けてくれるだろう" とシステムが考えてしまい、何も考慮していないと、代替可能な商品を推薦してしまう可能性があります。
直感的に、買ったばかりのユーザに同じ機能を持つ別の商品を薦めてしまうのはユーザの満足度を低下させてしまいそうです。

![cpr.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529987/80b80c4c-062a-deed-6d75-8937174abdea.jpeg)

一方で、補完関係を考慮した推薦システムでは、ユーザが直近インタラクションした商品に対して、補完関係となる商品をユーザにオススメします。

「スマートフォンを買ったところ（買おうとしていたところ）で、ちょうどケースも欲しかったんだよ！」のようなニーズに答えることができます。
そのため、商品の併売による売上向上や、ユーザが気づかなかった組み合わせ商品をオススメすることでサービスに対する満足度向上（これと組み合わせると便利になるんだ！なるほど！）も期待できます。

![スクリーンショット 2024-10-21 22.49.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529987/0f71b6f7-014c-0a4a-227a-08080ecee366.png)

実際にAmazonを覗いてみると、上図のような補完関係となるアイテムを提示するレコメンドエリアが設けられています。

また、これは私の頭の中の話ですが、EC以外の他のドメインにも補完推薦の適用は期待できそうです。
- レシピ推薦システム：主菜のレシピを閲覧中のユーザに、よく合う副菜のレシピを推薦
- 動画推薦システム：あるアーティストのMVを視聴中のユーザに、解説系YouTuberの解説動画を推薦
- 飲食店推薦システム：居酒屋を訪れたユーザに、締めに合うラーメン屋を推薦

## 補完推薦をどう実現するか

ユーザが "閲覧した" や "購入した" のような単純なシグナルだけでは、代替商品を排除できていないため、補完商品を推薦するための学習は困難です。

そのため、補完推薦に関する既存研究は、ユーザの行動履歴・購入履歴からルールで見つけ出した補完関係のシグナルに基づいており、およそ2パターンに分けられます。

1. 協調フィルタリング的アプローチ：
補完関係を取り出せそうなアイテム系列を見つけ、パターンを学習する
1. コンテンツベース的アプローチ：
データから補完関係となっていそうな商品ペアを予め見つけ、学習したコンテンツベースのモデルで補完関係ペアを拡張する

### 協調フィルタリング的アプローチ

#### [Substitutes or complements: another step forward in recommendations](https://doi.org/10.1145/1566374.1566394)

![スクリーンショット 2024-10-21 23.21.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529987/523c7b79-5558-3bc6-251f-1046e3a7eaef.png)

補完推薦に（明示的に）取り組んでいる研究としては、古く、源流とも言えるものです。

ユーザの "閲覧 → 購入 → 購入後の閲覧 → ..." の行動をライフサイクルと捉え、「購入した（Pay it）」を基準として、商品ペアの代替関係スコアと補完関係スコアを算出します。
上図の例で説明すると、Pay it の前に閲覧された (ipod, inano) の代替関係スコアが高く、Pay it を跨ぐ (inano, battery) は補完関係スコアが高く算出されます。

このようにして得られたスコアから特定の閾値内に収まったペアを補完関係ペアとして取り出します。
具体的なスコアの算出法や、ノイズに対する取り組みなどは、論文をご確認ください。

#### [Representing and Recommending Shopping Baskets with Complementarity, Compatibility, and Loyalty](https://doi.org/10.1145/3269206.3271786)

Item2Vecは推薦モデルとして有名ですが、同じようにアイテム表現を学習することで補完推薦を行う Triple2Vec というものです。

まず、ユーザのバスケットから共起Triplet (アイテムi, アイテムj, ユーザu) を取り出します。
![スクリーンショット 2024-10-21 23.39.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529987/10e3d092-6bcc-8504-ea29-413b80d9bcf9.png)

そして、次式を用いて、2種類のアイテム表現と1種類のユーザ表現を学習します。
（Item2Vecと同じ枠組みで負例サンプリングにより学習できます。）
![スクリーンショット 2024-10-21 23.39.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529987/0c2a775e-b5d8-db0d-6e17-da81e0b38e09.png)

### コンテンツベース的アプローチ

#### [Inferring Networks of Substitutable and Complementary Products](https://doi.org/10.1145/2783258.2783381)

前述の通り、①データセットから補完関係ペア（と考えられるもの）を抽出し、その後、②モデルによる補完関係ペアを拡張します。

この研究では、①の方法として、当時の Amazon.com の4つのレコメンドエリアに表示された補完関係ペアと代替関係ペアをクローリングし、データセットを構築しています。
（このデータセットは以降の研究でスタンダードに使用されています。）

具体的には、以下の4種類のレコメンドエリアを対象としています。
1. Users who viewed $x$ also viewed $y$ → 代替関係
2. Users who viewed $x$ eventually bought $y$ → 代替関係
3. Users who bought $x$ also bought $y$ → 補完関係
4. Users frequently bought $x$ also $y$ together → 補完関係

当然ながら、当時の Amazon.com のレコメンドロジックは公開されていないため、データセットの構築を1から再現することは非常に困難です。
とはいえ、自社のデータセットで再現する際は、この定義どおりにユーザの閲覧・購入の共起をカウントすることで、ある程度の質で抽出ができると考えられます。

![スクリーンショット 2024-10-21 23.57.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529987/36f4a216-a925-b173-fd9f-1d36a4b8de56.png)

肝心の②ですが、「コンテンツベース的」と分類している通り、商品説明文・レビュー文を用いたモデルを提案しています。
文章のトピックモデルとロジスティック回帰を組み合わせることで、商品間に補完関係があるか予測します。
※学習・評価データは①を使用します。

#### その他、読むべき論文

スペースの都合上割愛しますが、補完推薦を理解するにあたって重要な論文を共有します。

- [P-Companion: A principled framework for diversified complementary product recommendation, CIKM '20](https://doi.org/10.1145/3340531.3412732)
- [A Path-constrained Framework for Discriminating Substitutable and Complementary Products in E-commerce, WSDM '18](https://doi.org/10.1145/3159652.3159710)

## "Is it really complementary?"

さて、ここからは、私が修士時代の後輩と指導教員と共著で書いた論文の話題を始めたいと思います。

https://doi.org/10.1145/3640457.3691705

### モチベーション

コンテンツ的アプローチの冒頭で述べた、ユーザの閲覧履歴・購入履歴から構築したラベルですが、実際に厳密な補完関係となるラベルが収集できているでしょうか？

1. Users who viewed $x$ also viewed $y$ → 代替関係
2. Users who viewed $x$ eventually bought $y$ → 代替関係
3. Users who bought $x$ also bought $y$ → 補完関係
4. Users frequently bought $x$ also $y$ together → 補完関係

例えば、コロナ禍においては、「マスク」と「トイレットペーパー」が需要高によりよく売れました。
この場合、商品ペア (マスク, トイレットペーパー) は3か4のラベルが割り当てられ、補完関係とみなされますが、果たして本当に補完関係と言えるでしょうか？

我々は、実データセットを分析することにより、上記の例以外にも実際には補完関係と言えないものが3と4に割り当てられている事例を多く観察しました。
つまりは、Amazon.com データセットのように作られたラベル（我々は **行動ベースラベル（Behavior-based Labels; BBLs）** と読んでいます）の信頼性に疑問を持ちました。

### 改めて補完とは何か？を考える

「Users who bought $x$ also bought $y$」のような抽象的な表現でつくられる行動ベースラベルを一旦忘れ、商品の機能の側面から補完関係とは何か？を再考しました。

行動ベースラベルに含まれるペアを定性的に観察することにより、最終的に8種の **機能ベースラベル（Function-based Labels; FBLs）** を考案しました。

1. Items 𝑥 and 𝑦 have the same function and usage → 代替関係
1. Item 𝑥 can be replenished with item 𝑦 → 補完関係
1. Item 𝑦 can be replenished with item 𝑥 → 補完関係
1. Items 𝑥 and 𝑦 must be combined to be usable → 補完関係
1. When combined with item 𝑦, item 𝑥 becomes more useful → 補完関係
1. When combined with item 𝑥, item 𝑦 becomes more useful → 補完関係
1. Combining 𝑥 and 𝑦 makes them more useful → 補完関係
1. Items 𝑥 and 𝑦 have no relationship → 無関係

精査した結果、補完関係は、商品にもう一方の商品をあとから足す補充的関係（2と3に該当）や、片方でも物として機能するが両方あったら便利にする関係（5, 6, 7に該当）、両方ないと機能しない関係（4に該当）に細分化されることがわかりました。

機能ベースラベルの良い点は、抽象的な補完関係を記述することで、真の補完関係の定義のもとでの首尾一貫したラベル構築を容易にすることです。
実際に、我々の先行研究ではアノテーターを用意し、上記の8種のラベルをおよそ2800件のアイテムペアに付与しました。

詳細はこちら：

https://www.ieice.org/publications/ken/summary.php?contribution_id=128632

### 行動ベースラベルは本当に低品質なのか？（RecSysへの貢献①）

本研究では、アノテーションにより作成した機能ベースラベルとの定量比較により、行動ベースラベルの品質の低さを明らかにしました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529987/1faf7415-15a2-d542-de0b-0430f3026d4c.png" width="400">

BBL は行動ベースラベルをそのまま使って補完アイテムを推薦するモデルであり、Sceptre と P-Companion は行動ベースラベルを使って学習させたコンテンツベース的モデルです。

Hit@1 が 50% を下回っていることから、行動ベースラベルに基づき推薦したモデル（BBL、Sceptre、P-Companion）は「これが補完アイテムです（ドヤッ）」と1件提示しても、1/2の確率で外していることがわかります。

### 行動ベースラベルを修正できないか？（RecSysへの貢献②）

ここまで話題にあげた2種類のラベルは

- 行動ベースラベル：データから構築できるのでコスト小 / 低品質
- 機能ベースラベル：アノテーションが必要なのでコスト大 / 高品質

と整理できます。
ここでMLに精通されたみなさんはお気づきだと思いますが、両方のいいとこ取りをすれば、品質の高いラベルを大量生産できるのではないか？を考えることができそうです。

そこで、我々は少量の機能ベースラベルから、行動ベースラベルの修正手法を提案しました。
（ただし、この研究では予備的実験程度にとどめ、さらなる修正精度の追求はFuture Workとしています。）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529987/d136a0ce-3347-c6d9-99ea-deec84f9ab78.png" width="400">

修正手法には LightGBM を採用しました。具体的には、評価用とは別に用意した機能ベースラベルで学習した LightGBM を構築し、行動ベースラベルと LightGBM の予測ラベルをアンサンブル（どちらも補完ラベルとなるアイテムを補完ランキングの上位とする）した BBL+LGBM を考案しました。
※ LGBM は LightGBM の予測ラベルをそのままランキングとしたものです。

結果的に、改善幅はわずかでありますが、行動ベースラベルの質の向上（BBL+LGBM > BBL）が確認できました。

## おわりに

「行動ベースラベルが教師データとして使われています」と紹介した上で、我々の研究がちゃぶ台ひっくり返したような形の説明になってしまいました（汗）。
実務で推薦システムの開発に従事されている方には恐縮です。。。

おそらく伝わっているように、補完推薦は通常の推薦よりも繊細で、より厳密に実現しようとするとラベル構築など手間のかかるものと言えます。

補完推薦を実用可能にするためにも、今後の補完推薦研究の方向性としては、
個人的に次のようなパターンになっていくのではないか（なってほしい）と考えています。

- 行動ベースラベルを使う前提のまま、algorithm-centric な方法でノイズ除去を行う
- 高品質なラベルを低コストで（大量とまではいかなくとも）最低限必要な数を作成するラベル構築法を考える
- 少量の高品質ラベルで行動ベースラベルを修正する（我々の貢献②の拡張）

## 謝辞

ご紹介した我々の研究は、アスクル株式会社からデータ提供と研究遂行にあたっての助言をいただきました。
改めて、関わっていただいた皆様に感謝申し上げます。