【推薦アルゴリズム入門】基本的なメモリーベース協調フィルタリング(ユーザベース)

メモリーベース協調フィルタリング(Collaborative Filtering)

協調フィルタリングは、利用者間の好きなものやこと(嗜好)に基づいて類似度を計算し、その結果を元に推薦を行うアルゴリズムの総称です。

協調フィルタリングの名前の由来は、文章のフィルタリングは行う時に、
各ユーザが読んだ文章に対する感想などを記録し、
全ユーザーがその記録を用いて文章のフィルタリングに役立てたことらしいです。

協調フィルタリングはメモリーベースとモデルベースに分類できます。
メモリーベースでは全ユーザーの嗜好のリストを直接用いて推薦します。
一方でモデルベースでは全ユーザーの指向リストからなんらかの確率モデル等を生成し、そのモデルを用いて推薦します。

さらに協調フィルタリングではユーザベース、アイテムベースに分類できます。
今回はメモリーベースかつユーザベースの協調フィルタリングの基本的なアルゴリズムの紹介します。

メモリーベース協調フィルタリングのアルゴリズム概要

メモリーベース協調フィルタリングのアルゴリズムでは、以下のような手順で推薦します。

  1. 全ユーザーの指向のリストの用意
  2. 利用者の類似度の測定
  3. 類似度からk人を抽出
  4. 利用者aの未評価アイテムの推定評価値

各ステップについて説明します。

0. 全ユーザーの指向テーブルの用意

全ユーザーの以下のような指向テーブルを用意します。
各ユーザーの各アイテムに対する評価の行列ですね。

f:id:ttt242242:20190819081138p:plain

この指向テーブルを元に類似度の測定等を行います。

1. 利用者の類似度の測定

利用者\(u\)と利用者\(v\)の類似度\(w_{u, v}\)は以下のピアソン相関係数を用いて評価します。

$$\begin{aligned}
w_{u, v} = \frac{\sum_{i \in I} (r_{u, i}- \overline{r}_u)(r_{v, i}- \overline{r}_v)}{\sqrt{\sum_{i \in I} (r_{u, i} – \overline{r}_u)^2}\sqrt{\sum_{i \in I} (r_{v, i} – \overline{r}_v)^2}}
\end{aligned}$$

式中の変数は

  • \(I\):全アイテムの集合
  • \(u, v\):利用者
  • \(r_{u, i}\):利用者uのアイテムiに対する評価値
  • \(\overline{r}_{u}\):利用者uの全アイテムの平均評価値

この値\(w_{u, v}\)は-1〜1の間の値になります。
この値が大きければ大きいほど類似しているユーザーとなります。

2. 類似度から類似しているユーザを抽出

ここでは、類似しているユーザの集合を\(U\)とします。

3. 利用者aの未評価アイテムの推定評価値

ユーザー\(u\)がまだ評価していないアイテムを類似したユーザーの情報から評価値を推定します。

まだ評価していないアイテム\(i\)の評価値\(\hat{r}_{u, i}\)は以下の式で評価します。

$$\begin{aligned}
\hat{r}_{u, i} = \overline{r}_{u} + \frac{\sum_{v \in U}w_{u,v}(r_{v, i}-\overline{r}_{v})}{\sum_{v \in U}|w_{u, v}|}
\end{aligned}$$

実装

簡単な例を用いて協調フィルタリングを実装します。

今回は3人のユーザ(A, B, C)がいて、アイテムが1, 2, 3, 4, 5あるとし、
以下のような嗜好テーブルであるとします。

f:id:ttt242242:20190819082456p:plain

この時のユーザ間の類似度と
ユーザAの未評価アイテム4の推定値を見てみます。
(図の青の部分)

ソースコード

ソースコードを以下に示します。

実験 上記のコードを実行すると、A, B, Cの類似度及び、

ユーザAの推定値を出力します。

まずユーザの類似度を見てみます。

[[ 0.          0.76910311 -0.94347909]
[ 0.76910311  0.         -0.85160218]
[-0.94347909 -0.85160218  0.        ]]

この行列は(1, 2)であれば、ユーザA, Bの類似度を表しています。

この行列からユーザA, Bが類似していると判断していることがわかります。
正しく学習できているようです。

では、次にユーザAにアイテム4の推薦値がどうなっているか見てみます。

4.1736346231788275

比較的高い値を出力しています。
これは、類似しているユーザ(B)の嗜好が大きく反映していることがわかります。

参考文献

推薦システム:推薦システム: 統計的機械学習の理論と実践

コメント

タイトルとURLをコピーしました