サマリー
- 「RecSys Challenge 2025」において、ドコモチーム(SenseLab)として参加し、世界第3位に入賞しました。著名な企業や大学が合計416チーム参加するコンペでした。
- RecSys Challenge では離反予測や購買傾向予測などECサイトにおける複数の異なる分析タスクで共通的に利用可能なユーザ埋め込みベクトル(Universal Behavioral Profile)を開発することが出題されました。
- ドコモチームでは統計的な特徴量と3種類のグラフニューラルネットワーク(GNN)を用いた手法を開発しました。手法の論文およびソースコードは以下のリンクで公開されています。
論文: https://dl.acm.org/doi/10.1145/3758126.3758139

はじめに
サービスイノベーション部の橋本と明石です。レコメンド系のトップカンファレンスのRecSysが開催するデータ分析コンペRecSys Challenge 2025において、ドコモチーム(SenseLab)として参加し416チーム中 第3位に入賞いたしました。本記事ではその解法を紹介します。 また、この入賞については9/26に報道発表を行いました。

RecSys概要
RecSys はレコメンド分野のトップ国際会議であり、レコメンドAIモデルはもちろん、レコメンドの公平性・評価方法などレコメンド技術に関する世界最先端の研究について議論が行われます。
第19回目となるRecSys 2025 はチェコ・プラハで開催されました。
参加の背景
ドコモでは、様々な顧客データを用いてユーザの行動属性を推定しマーケティングに活用するシステム「docomo Sense」の開発を行っております。今回のRecSys Challengeのタスクが我々の業務と親和性があると感じSense開発チームの有志メンバーで参加をしました。
docomo Sense についての詳細はこちらに書かれております。
ssw.web.docomo.ne.jp
RecSys Challenge 2025 概要
ECサイトをはじめとしたWebサービスにおけるデータ分析において、ユーザの離反予測や購買傾向予測などユーザの行動を理解することはサービス利便性向上のために重要な取り組みです。従来、これらの予測を行うためには各タスクそれぞれにおいてAIモデルを開発することが一般的でした。しかし、個別にAIモデルを作成することはシステム開発・運用のコストがかかったり、システムの複雑性が増す原因になります。
タスクごとにAIモデルを作るのではなく共通的に使える1つのAIモデルを作成することができればこれらの問題を解決することができます。さらに、様々なタスクを考慮するようモデルを学習することで相乗効果による精度向上も期待できます。
RecSys Challenge 2025のタスクではECサイトのデータを用いて、異なる6つのタスクにおいて共通的に扱えるユーザ埋め込みベクトル Universal Behavioral Profile: UBPを作成するアルゴリズムを開発することが出題されました。性能評価は6つのタスクから独立して行われそれぞれの総合順位で評価が決まります。作成したユーザ埋め込みベクトルを主催者側で用意されたニューラルネットワークに入力することで各タスクの評価が行われる流れでした。
様々なタスクに汎用的に使えるUBPの開発が求められるため、6つのタスクのうち3つは公開されますが、3つは秘匿タスク(Hidden Task)として競技中は非公開でした。
公開されている3つのタスクは以下です。
① 離反予測 (Churn)
アクティブユーザ(少なくとも 1 回の購入履歴があるユーザ)が、その後 14 日間で全く購入を行わなくなるかどうかを 予測します。この課題では、ユーザエンゲージメントの低下や興味喪失など、行動パターンの変化をどれだけ 捉えられるかが問われます。
② 商品購買予測 (Propensity-sku)
アクティブユーザが、その後 14 日間で指定した 100 種類の商品群の中からいずれかを購入する可能性を予測します。 ユーザの嗜好を個々の商品レベルでどこまで精度高く把握できるかが評価されます。
③ カテゴリ購買予測 (Propensity-category)
アクティブユーザが、その後 14 日間で指定した 100 種類の商品カテゴリの中からいずれかを購入する可能性を予測します。 個別商品だけでなく、カテゴリ単位での興味や関心の予測精度が問われます。

データセット概要
データセットはECサイトにおける複数種類のイベントログと商品のプロパティ情報が含まれます。イベントログは以下の5種類が提供されました。
1、商品購入履歴 (product_buy) 1,775,394件
2、商品のカートへの追加履歴 (add_to_cart) 1,775,394件
3、商品のカートからの削除履歴 (remove_from_cart) 1,775,394件
4、ページ訪問履歴 (page_visit) 156,032,014件
5、検索履歴 (search_query) 156,032,014件
各データセットの期間を以下の表にまとめます。
| 期間名 | 日付範囲 | 提供状況 |
|---|---|---|
| フルデータセット | 2022年6月23日 – 11月9日 | 提供 |
| オフライントレーニング | 2022年6月23日 – 10月26日 | 提供 |
| オフライン検証 | 2022年10月27日 – 11月9日 | 提供 |
| オンライン検証 | 2022年11月10日 – 11月23日 | - |
また、メタデータとして商品の名前、価格、カテゴリ、URL、検索クエリが提供されました。商品名、URL、検索クエリの3つは事前にテキストエンコーディングと量子化が実施され、整数の状態で提供されました。
ドコモ解法

概要
主にHandcrafted特徴量とグラフニューラルネットワーク(GNN)の2つの手法の組み合わせです。
- ①Handcrafted特徴量を作成する。
- ②グラフを作成し3つの異なるGNNをそれぞれ適用し、3種類のGNNEmbeddingを獲得する。
- ③Handcrafted特徴量と②GNNEmbeddingの結合する。
Handcrafted特徴量はコンペ開始初期にコンペの感覚をつかむことを目的として実施し、コンペ初期でかなりの精度が出たのでコンペを通じて解法のベースラインとして採用されました。また、GNNは以下のSenseチームが関わるプロジェクトにおいて、GNNを用いたレコメンドシステムを構築しており、そこで得られた知見が活かせるのではと考えコンペの中で積極的に検証を行った結果精度向上に貢献できたため採用されました。
次節から手法の詳細を説明します。
①Handcrafted特徴量
各ユーザの行動や商品情報などから、統計的な特徴量を数十種類作成しました。例えば、ユーザ毎の各イベントの時間間隔、週間/月間イベント数、直近の検索キーワードなどです。詳細は論文のTable 3に示しています。

公開タスクにおいてはユーザの短期的な行動が重要と考え、直近の行動を反映するような特徴量を作成すると同時に、秘匿タスクにも対処するため長期的な行動も特徴量として入れ込んでいます。
提供されたのは実際のECサイトでのデータであるため、中には不自然なユーザやイベントも存在します。そのような外れ値となるデータを除去する処理も実施することで、後続のAIモデルが正しく学習できる工夫も行いました。
②GNN
まず、各ユーザの行動をエッジとしたマルチドメインの2部グラフ(異種グラフ)を構築しました。グラフ構成は論文のTable4に示されております。

また、ノード特徴量として対応するデータのHandcrafted特徴量を設定しました。
グラフの一部をサンプルして可視化した図を示します。

このグラフに3つの異なるRelational Graph Convolutional Network (RGCN) エンコーダをベースとしたGNNを用いて学習・推論を行いました。 RGCN はエッジの種別ごとに異なるGCNレイヤを保持することで異なるエッジ種別をもつ異種グラフを処理できるようにしたものです。 GCNをはじめとしたGNNのアルゴリズムについては以下の記事で紹介されてます。
主に知識グラフ埋め込みで使われる手法ですが、今回のようなクロスドメイン2部グラフにも同じ異種グラフですので適用することができます。
次に、3つの異なるGNNについて手法を説明します。
RGCN-MTL
様々なタスクに対応すべく、複数のタスクを同時に学習するマルチタスク学習を実施したモデルです。学習タスクは以下の2つです。
| タスク | Loss | 目的 | |
|---|---|---|---|
| 1 | リンク予測 | Binary Cross Entropy(BCE) | Propensity sku / Propensity category の精度出すために、ユーザの購買傾向を学習すること |
| 2 | ノード回帰 | Mean Squered Error(MSE) | Churnタスクで精度を出すため、ユーザの離反に相関がある代理タスクを予測できるよう学習すること。 |
2つ目のノード回帰タスクでは、ユーザ離反(直近2週間の購買有無)を直接予測する2値分類ではなく、最後の購買からの期間を予測する回帰タスクを代理タスクとして採用しました。これは、より直近の購買データを学習に取り込むためです。2週間の購買有無を正解データとすると、その期間のデータはリークするため学習に利用できません。そこで、この2週間分のデータも学習データとして活用するために、事前の検証でユーザ離反と相関があることが判明した「最後の購買からの経過期間」を予測する回帰タスクを解くことにしました。これにより、より多くの情報を学習できるようにしました。マルチタスク学習のLossは試行錯誤の結果、BCEとMSEの和にすることにしました。
RGCN-TSE
事前分析により商品の購買に季節性があることが判明したため、この季節性・時系列性を捉えるべく、グラフのエッジにタイムスタンプ情報を組み込みました。具体的には、エッジの重みとして、月、週、日単位のcos/sin、およびそれらの和・積を組み合わせた計9次元のPositional encodingベクトルを付与しました。
また、RGCNの近傍集約時には、このエッジベクトルを線形レイヤーに通し、近傍のノードベクトルとの積を取る処理を追加しました。
(この処理はまだ改善の余地があると考えています。具体的には、線形レイヤーは不要であったり、積ではなく和の方が適切であったかもと考えています。)
これにより時系列性を考慮したモデルが構築でき、少なくとも純粋なRGCNと比較してPropensity-sku / Propensity-category において精度が向上しました。
RGAT
RGCNのGCN部分を純粋にGATに置き換えたものです。RGCNの近傍ノードの畳み込み処理とは異なり、Attention機構により近傍のどのノードに注意して集約するかを動的に学習するモデルです。純粋なRGCNよりもPropensity-sku / Propensity-categoryで精度向上が見られました。
最終的にこれら3つのGNNはそれぞれ独立して学習・推論を行いました。得られたノード埋め込みの内、ユーザの埋め込みとユーザが最後に購入またはカートへの追加した商品の埋め込みをconcatして最終的なユーザ埋め込みとしました。出力次元数は128でしたので、128(user) + 128(sku) = 256 次元のベクトルが3つGNNモデル分で合計 256 x 3 = 768次元になりました。
①Handcrafted特徴量と②GNNEmbeddingの結合
Handcrafted特徴量について、PCAにて256次元に圧縮を行いました。また、下流タスクで使われるMLPの学習をしやすくするため、歪度が1.0以上の変数について、対数変換を行うことで正規分布に近い分布形状をもつ特徴量に変換する処理を行いました。GNNについては、RGAT、RGCN-TSE、RGCN-MTLの順にconcatしました。その後PCAを用いて384次元に圧縮を行いました。最終的に、256次元のHandcrafted特徴量と384次元のGNN特徴量を連結し、合計640次元の最終的なユーザー埋め込み(UBP)として最終成果物としました。
結果
各手法でのオンラインリーダボードの比較です。
(i)と(ii)を比べると、Hidden2以外のすべてのタスクで精度向上がなされています。ですので、Handcrafted特徴量単体だけではなく、それを特徴量としたGNNを組み合わせることがよりユーザの傾向を捉える上で重要であることがわかります。
(ii)、(iii)、(iv)では、順に手法を組み合わせていくことで精度が向上していくことがわかります。多様なモデルを組み合わせることで様々なタスクに有効な特徴量が獲得できることを示していると考えられます。
| Method | Churn | Category Prop. | Product Prop. | Hidden1 | Hidden2 | Hidden3 |
|---|---|---|---|---|---|---|
| (i) Handcrafted features (HC) | 0.7313 | 0.7991 | 0.7937 | 0.7461 | 0.8014 | 0.7983 |
| (ii) RGCN-MTL + RGCN-TSE | 0.7358 | 0.8135 | 0.8071 | 0.7569 | 0.7843 | 0.8057 |
| (iii) HC + RGCN-MTL + RGCN-TSE | 0.7369 | 0.8138 | 0.8081 | 0.7593 | 0.8052 | 0.8065 |
| (iv) HC + RGCN-MTL + RGCN-TSE + RGAT | 0.7374 | 0.8180 | 0.8081 | 0.7637 | 0.8081 | 0.8116 |
もう一点比較を行っています。こちらはオフライン評価での比較です。オフラインではNVIDIA H100 マシンで学習・評価を行いました。
(v)と(vi)を比較すると、モデルの特性ごとに異なる精度を持つことがわかります。特にChurn(離反予測)について、(v)RGCN-MTLが(vi)RGCN-TSEより精度が高いことはMTLがPropensity-sku / Propensity-category(リンク予測)だけでなくChurn(離反予測)も学習対象にしていることの効果かと考えられます。また、(vii)においても、2つの手法を組み合わせることで精度向上が確認できました。
| Method | Churn | Cat. Prop. | Prod. Prop. |
|---|---|---|---|
| (v) RGCN-MTL | 0.8586 | 0.8057 | 0.7958 |
| (vi) RGCN-TSE | 0.8563 | 0.8091 | 0.7919 |
| (vii) RGCN-MTL + RGCN-TSE | 0.8586 | 0.8095 | 0.7955 |
発表の様子
RecSys2025の1日目である現地時間9/22にRecSys Challengeワークショップが開催され、入賞チームの解法および解法論文を提出しAcceptされたチームの発表が行われました。


その他気になった点
一般的なコンペティションでは、評価サーバーでの評価後、自チームのベストスコアが自動的に公開リーダーボード(LB)に反映され、参加者全員が他チームの順位を把握し、戦略を練る上で貴重な情報となります。
しかし、今回のコンペでは評価結果をLBに反映させるかを選択できる方式でした。そのため、コンペ期間中は自チームの現在の順位が不明瞭なままで進行し、最終日に初めてLBに登場するチームもありました。
コンペにおいて、順位や上位とのスコア差は、取り組みの量や内容を決定する重要な要素です。それが不明確な状態での進行は非常に困難であり、このルールは改善の余地があると感じました。
コンペの振り返り
👍良かった点
業務で利用しているGNN技術がコンペティションで良い結果を出し、上位に入賞できたことが大変嬉しかったです。Concatしただけの多少強引な組み合わせ手法ではありましたが、これまでの知見を活かせたことは、大きな自信につながりました。また、初めて実装したマルチタスク学習が結果に貢献できた点も良かったです。当日、他の上位チームもマルチタスク学習を取り入れていることを知り、コンペティションにおけるこのアプローチの妥当性を確認できたことも自身の考えが妥当であることがわかり嬉しく感じました。
👎悪かった点
コンペ中の実験結果はスプレッドシートで管理していました。柔軟にできる一方、実験管理が煩雑になるので、この後はMLflowの利用などを検討していく予定です。
当初Transformerも検討しましたが、事前のEDAの中で購入数が1つや2つしかないユーザが大半だったので、あまり行動の連続的な時系列性が捉えにくく、効かないだろうと判断してやめてしまいました。しかし、結果を見てみると1位と2位のチームはTransformerモデルを利用して高いスコアを出しているので、検討するべきでした。昨今はLLMによるコード支援もあるので、まずは軽く手を出してみても良かったなと反省してます。
最終的に複数の異なるモデルの埋め込みベクトルをconcatして結合することしか考えてませんでしたが、上位チームを見るとconcatしたうえでさらに工夫を加えたりしていたので、このあたりのテクニックについて知見が不足していたなと思いました。今後すぐに手を動かせるように精進します。
所感まとめ
