糞糞糞ネット弁慶

読んだ論文についてメモを書きます.趣味の話は http://repose.hatenablog.com

Personalized Purchase Prediction of Market Baskets with Wasserstein-Based Sequence Matching (KDD 2019) 読んだ

Personalized Purchase Prediction of Market Baskets with Wasserstein-Based Sequence Matching

KDD 2019 の Accepted papers が出たのでひとまずタイトル一覧に目を通し, arXiv などに既にあるものから読んでいこうと思います.しかしあまりにも Graph Convolutional Network が多すぎる.

ユーザ ck 回目の購買 b_c^{k} において複数の商品を購入している (この時,各購買を basket と呼びます) 状況において,m_c 個の購買の系列を学習データとして m_c + 1 回目において購入される商品 b_{c}^{m_c + 1}exact set の予測に取り組んでいる.

わざわざ exact set と強調した理由ですが,これまでの next basket recommendation,たとえば

では「m_c+1 の購買においてどの商品を買いそうか」を推定・予測していました.すなわち,これら既存研究におけるモデルの出力は各商品が購買される確率です.が,本研究では basket の中身を直接出力します.「m_c+1 回目の購買において商品 A は 0.3, B は 0.21, C は 0.17 の確率で購入される」ではなく,「basket b^{m_c + 1}_{c} は A と D と J である」を予測結果として出力する.

しかし,このタスクはただ難しくなっただけのように見え,実際これが解けるとどう嬉しいのかがよくわかりません (著者らも明確に述べていないように見える).クーポン配信などを考えた場合には商品の購買確率が出る方が嬉しいように思います.複数の商品をすることでまとめ買いなどの効果がある,ということなのでしょうか.

手法

一言でまとめると,あるユーザ c の過去の全 basket から構成される系列 B_c について最も類似した basket の部分系列 B_i[i_s:i_e] を検索し,その部分系列のひとつ先 B_i [i_{e + 1} ] を予測対象である b^{m_c + 1}_c として出力します. そのために

  • 商品の集合である basket のペアについて類似度を計算する
    • それぞれの商品をある次元に埋め込む
    • 埋め込みの集合で表現された basket 対について Wasserstein Distance を計算する
  • B_c に最も類似した部分系列を高速に計算する

という作業を行う必要がある.

商品の埋め込み

埋め込みは

\sum_{p \in b^{i}_c} \sum_{q \in b^{i}_c,p \neq q} \log Pr(p|q)

Pr(p|q) = \frac{\exp(u^{T}_p v_q)}{\sum_r \exp(u^{T}_p v_r)}

と同一 basket 内で同時に購買された全ペアについて計算する.これだけなら追試ができそう.

Wasserstein Distance の計算

Wasserstein Distance を計算する.

部分系列の高速な検索

類似度の計算には Dynamic Time Warping を使うが,ナイーブにやるとクエリであるセッションの系列長を n ,部分系列の検索対象であるセッションの系列長を m とすると O(nm^{2}) かかる.全ユーザが k なのでこれでは重くて困る.しかし Stream Monitoring under the Time Warping Distance (ICDM 2007) を使うと O((n+1)m) に落ちるので嬉しい(らしい).この論文誰かに解説して欲しい.

実験

Instacart datasetTa Feng Grocery Dataset を用いた実験を実施. 比較手法があまりにシンプルで悲しくなる.アソシエーションルール以外には「全体の人気順に上位 n_c 個」「ユーザごとの人気順に上位 n_c 個」という手法 (n_cc の 最後の購買において買った商品数) を採用しているわけですが,既存の商品ごとに計算する session-based な手法の結果の上位 n_c 件とも比較しないとフェアではないと思う.