1. 程式人生 > >推薦系統(利用使用者行為資料 )

推薦系統(利用使用者行為資料 )

基於使用者行為分析的推薦演算法是個性化推薦系統的重要演算法,一般稱為協同過濾演算法。
很多網際網路業務會把多種原始日誌按照使用者行為彙總成會話日誌,其中每個會話表示一次使用者行為和對應的服務
會話日誌通常儲存在分散式資料倉庫中,如支援離線分析的Hadoop Hive和支援線上分析的Google Dremel
網際網路很多資料都遵循長尾分佈:即熱門的物品往往只佔物品總和的很小部分,推薦系統的作用不在於推薦熱門產品,而是更多的推薦長尾部分,讓更多的產品被推薦出來。

使用者活躍度和物品流行度的關係:一般新使用者傾向於瀏覽熱門的物品,因為他們對網站還不熟悉,而老使用者會逐漸開始瀏覽冷門的物品,也就是說,使用者越活躍,越傾向瀏覽冷門的物品。

業界運用最廣泛的演算法是 基於領域的演算法,此演算法包含兩個演算法,
基於使用者的協同過濾演算法:這種演算法給使用者推薦和他興趣相似的其他使用者喜歡的物品。
基於物品的協同過濾演算法:這種演算法給使用者推薦和他之前喜歡的物品相似的物品。


基於使用者的協同過濾演算法包括兩個步驟
1,找到和目標使用者興趣相似的使用者集合
2,找到這個集合中的使用者喜歡的,且目標使用者沒有聽說過的物品推薦給目標使用者

協同過濾利用使用者行為計算相似度,假如N(u1)和N(u2)分別表示使用者u1,u2有興趣(喜歡)
的物品集合,那麼u1,u2的相似度f(u1,u2)=(N(u1) & N(u2))/sqrt(N(u1) * N(u2))
為了計算方便,可以在庫中建立物品到使用者的倒排表,即儲存每個物品有哪些些使用者產生過行為。
通過相似度計算,找出了使用者u的前k個最相似使用者,那麼使用者u對i的興趣度=與這k個使用者相似度*每個使用者對i的興趣(偏好評分,單一行為可以全設為1,另外這k個使用者應該與對物品i有過行為的使用者做個交集)之和。

使用者相似度有改進的空間,一般來說,兩個使用者對冷門物品採取過同樣的行為更能說明他們興趣的相似度。
可以採用如下公式計算相似度
f(u1,u2)=(i ∈ N(u1) & N(u2) )*(1/log1+N(i)) /sqrt(N(u1) * N(u2))此公式通過 (1/log1+N(i))懲罰了使用者u1,u2共同興趣列表中熱門物品對他們相似度的影響


基於物品的協同過濾演算法
這個演算法目前是應用最多的。該演算法認為,物品A和物品B具有很大的相似度是因為喜歡物品A的使用者大都也喜歡物品B。
基於物品的協同過濾演算法包括兩個步驟
1,計算物品之間的相似度
2,根據物品的相似度和使用者的歷史行為給使用者生成推薦列表。
計算物品相似度和使用者行為相似度差不多,假如N(i)表示喜歡物品i的使用者數,N(j)表示喜歡物品j的使用者數,那麼i和j的相似度f(i,j)=(N(i) & N(j))/sqrt(N(i) || N(j))
計算itemcf也可以首先建立使用者-物品倒排表,即對每個使用者建立一個包含他喜歡的物品的列表,然後對於每個使用者,將他物品列表中的物品兩兩在共現矩陣這種加1.
通過相似度計算,找出了物品i的前k個最相似物品,那麼使用者u對i的興趣度=與這k個物品相似度*使用者對這k個物品的評分(沒有對這個使用者的行為則為0分,當然一般這種資料應該先用這k個物品與使用者的歷史列表做個交集,排除無行為的資料)之和
基於ItemCf計算使用者u對一個物品j的興趣的描述:和使用者歷史興趣感興趣的物品越相似的物品,越有可能在使用者的推薦列表中獲得比較高的排名(興趣度)

和使用者相似度一樣,物品相似度也有改進的空間,一般來說,不活躍的使用者對於物品相似度的貢獻應該大魚活躍使用者。
可以採用如下公式計算物品相似度
f(i,j)=(u ∈ N(i) & N(j) )*(1/log1+N(u)) /sqrt(N(i) || N(j))此公式通過 (1/log1+N(u))懲罰了過於活躍的使用者

物品相似度的歸一化:可以消除同類物品之間相似度過大造成推薦列表傾向於某類物品。


隱語義模型(LFM)
它的核心思想是通過隱含特徵聯絡使用者興趣和物品

基於圖的模型
即計算交叉兩點(兩點分別為使用者和物品)的相關性。使用者和物品的相關性高,那麼物品在這個使用者的推薦列表靠前。演算法和PageRank類似,即不停的迭代計算pr值,直到這個值收斂到預先設定好的閥值。pagerank演算法的java實現版本可以參考
http://duyunfei.iteye.com/blog/1532798