中間発表用スライド 2008.12.20 田中健太
本日の予定 レコメンドシステムとは ・協調フィルタリングとは メモリーベースのアプローチ ・ユーザーベースの協調フィルタリング ・アイテムベースの協調フィルタリング ・試しに実行してみた
ユーザーがまだ購入、レンタルしたことがなく、 きっとそのユーザーが満足するであろう商品を推薦、 提案しようというものである。 レコメンドシステムとは レコメンドシステムは、 ユーザーの趣味嗜好、購入履歴から ユーザーがまだ購入、レンタルしたことがなく、 きっとそのユーザーが満足するであろう商品を推薦、 提案しようというものである。
レコメンドシステムとは ・実際にどんなところに使われているか この部分
協調フィルタリングとは 過去のユーザーの評価や行動履歴などを利用して 推薦対象のユーザーの嗜好を推測するものである。 ここで重要になっている考え 推薦対象のユーザーと趣味嗜好が似ているユーザーが好むアイテムを推薦対象のユーザーも好むであろうという 協調フィルタリングには大きく分けて ・メモリーベース ・モデルベース というものが存在する
協調フィルタリングとは メモリーベース 基本的な考え あるアイテムについて推薦対象のユーザーの予測される評価を 他の類似したユーザーたちによる評価の加重平均を用いて計算する 一般に使われるアルゴリズムとして ピアソンの相関係数 ベクトル類似度 などが挙げられる メモリーベースの問題点 データセットの密度が疎の場合 →精度が悪くなる スケーラビリティの問題 →データセットが大きくなると計算が困難になる
メモリーベースのアプローチ ユーザーベースのアプローチ 推薦対象のユーザーと他のユーザー間の類似度を求める 推薦対象のユーザーの未評価アイテムについて 他のユーザーとの類似度とそのユーザーの評価で予測をする アイテムベースのアプローチ 各アイテム間の類似度を求める 推薦対象となるユーザーの未評価アイテムについて 推薦対象のユーザーが評価したアイテムとの類似度とその評価で予測する
表記法の定義 アイテムの集合 I = {i1,i2,...,im} データセット内のユーザーの集合 U = {u1,u2,...,un} 推薦対象ユーザー ua ユーザーuごとに、Ru(i)はユーザーuによるアイテムiの評価 Ruはユーザーuの平均評価
(1) ua と他のユーザーu との類似度を計算する。 ユーザーベースの協調フィルタリング (1) ua と他のユーザーu との類似度を計算する。 (2) ua の未評価アイテムごとに ua と各ユーザーu の 類似度× u の評価値の総和 を求める。 そしてuaの未評価アイテムごとに総和を 各ユーザーu の 類似度の和で割る。(正規化)
データの持ち方
(1) ua と他のユーザーu との類似度を計算する。 今回は類似度を求めるのにピアソンの相関係数を用いた。 相関係数の値について 相関係数の値の範囲は-1~1 -1に近い:ユーザー間の類似度が低い 1に近い:ユーザー間の類似度が高い
(2) ua の未評価アイテムごとに ua と各ユーザーu の 類似度× u の評価値の総和 を求める。 そしてuaの未評価アイテムごとに総和を 各ユーザーu の 類似度の和で割る。(正規化) 式で表現するならば下のような式
(2) ua の未評価アイテムごとにua の未評価アイテムと ua の評価済みアイテムとの類似度×ua の評価 アイテムベースの協調フィルタリング (1) 各アイテムi 間の類似度を計算する (2) ua の未評価アイテムごとにua の未評価アイテムと ua の評価済みアイテムとの類似度×ua の評価 済みアイテムの評価値の総和を求める。 そしてuaの未評価アイテムごとに総和を ua の未評価アイテムとua の評価済みアイテムとの 類似度の和 で割る(正規化)
データの持ち方
(1) 各アイテムi 間の類似度を計算する ユーザーベースの協調フィルタリングと同様に 類似度を求めるのにピアソンの相関係数を用いた 相関係数の値について 相関係数の値の範囲は-1~1 -1に近い:アイテム間の類似度が低い 1に近い:アイテム間の類似度が高い
(2) ua の未評価アイテムごとにua の未評価アイテムと 済みアイテムの評価値の総和を求める。 そしてuaの未評価アイテムごとに総和を ua の未評価アイテムとua の評価済みアイテムとの 類似度の和で割る(正規化) 式で表現するならば下のような式
試しに実行してみた 使用したデータセットについて。 MovieLens データセットの中身 943人のユーザー、1682の映画、評価数10万 100000/(943×1682)=0.06・・・
試しに実行してみた ユーザーIDが1番の人のデータをいくつか抜いて そのアイテムの評価を2つの協調フィルタリングで予測させてみた
試しに実行してみた結果 ぱっとみユーザーベースのほうが精度がよさそう。 疎のデータに対してはアイテムベースのほうが精度がいいらしいのだが (集合知プログラミングより)
今後の課題 ・実装したプログラムの見直し ・自分なりの工夫をしてみる ・実験の方法を考える などなど