Re:ゼロから始めるML生活

どちらかといえばエミリア派です

recsys-pythonをやる (第3章 類似度に基づく推薦・第4章 k近傍法)

この記事は (1人で)基礎から学ぶ推薦システム Advent Calendar 2022の2日目の記事です。

前回に引き続きrecsys-pythonをやっていきます。

www.nogawanogawa.com

今回は3章からやっていきたいと思います。

第3章 類似度に基づく推薦

考え方:ユーザーは過去に好んだアイテムに似たアイテムを好むだろう

いま、あるユーザーに何らかのアイテムをおすすめすることを考えます。

ここでどんな考え方に基づいてユーザーにアイテムをおすすめするかを考えます。 考え方は様々あると思いますが、今回取り扱う範囲では「ユーザーは過去に好んだアイテムに似たアイテムを好むだろう」という予想に基づいておすすめすることを考えます。

例として、過去にある種類のコーヒーAを高評価をしたユーザーがいたとします。 このユーザーは類似した種類ののコーヒーも好きなことが予想できそうですよね? このとき、類似のコーヒーBをおすすめするイメージです。 直感的にはそこまで間違っていない気がします。

このやり方の肝は、ユーザーとアイテムを同じ特徴空間で表現し、特徴空間内でのユーザーと距離が小さいアイテムを見つけることです。 類似度を定量的に評価する必要が出てきますが、類似度にはコサイン類似度がよく使われます。

特徴空間におけるコサイン類似度が近いものをおすすめしてあげれば「ユーザーは過去に好んだアイテムに似たアイテムを好むだろう」という考えに基づいて推薦できることがわかります。

やってみる

前提となる考えかたはこんなものなので、あとはやってみたいと思います。

recsyslab.github.io

第4章 k近傍法

考え方:未評価のアイテムは類似した評価済みのアイテムと似た評価をされるだろう

今度は先程とはちょっと変わって、未評価のアイテムの評価を類似した評価済みのアイテムを使用して推定することを考えます。

あるユーザーが未評価のアイテムAがあったとします。 その時、このアイテムに類似したアイテムB, Cがあったとして、これらB,Cをこのユーザーが高評価していたら、アイテムAも高評価しそうですね?

k近傍法では、特徴量空間において評価済みの近傍k個のアイテムを用いて、近傍のアイテムの評価を用いて未評価アイテムの評価値を推定することでおすすめ度合いを評価していきます。

やってみる

recsyslab.github.io

参考文献

下記の文献を参考にさせていただきました。

感想

類似度に関する考え方、取り扱い方は推薦システムに限らず重要な話だと思うので「ふむふむ、なるほどー」と思って読んでました。正直これだけで推薦するというよりかは、協調フィルタリングなどの一歩手前というイメージですが、それでも大事なことには変わらないので、面白かったです。