推荐算法--利用用户行为数据(02)
文章目錄
- 目錄
- 1.什么是用戶行為數據?
- 1.1用戶行為分類
- 2.用戶行為數據如何使用?
- 2.1 用戶活躍度和物品流行度的分布
- 2.2 用戶活躍度和物品流行度的關系
- 2.3 協同過濾算法
- 3.實驗設計和算法評測
- 4.基于鄰域的的推薦算法
- 4.1 基于用戶的協同過濾算法
- 4.2 基于物品的協同過濾算法
- 4.3 userCF和itemCF的比較
- 5.基于隱語義模型的推薦算法
- 6.基于圖模型的推薦算法
目錄
1.什么是用戶行為數據?
用戶行為數據在網站上最簡單的存在形式為日志。很多互聯網業務會把多種原始日志按照用戶行為匯總成會話日志,其中會話表示一次用戶行為和對應的服務。如電子商務網站記錄的用戶行為包括網頁瀏覽、購買、點擊、評分和評論等。
1.1用戶行為分類
1.按照反饋的明確性分
- 顯示反饋行為
對某些物品的喜歡、不喜歡;對某條事物的評論 - 隱性反饋行為
指的是那些不能明確反應用戶喜好的行為。代表性的為頁面瀏覽行為。用戶瀏覽一個頁面并不代表用戶喜歡這個頁面展示的物品,可能是因為頁面鏈接顯示在首頁,用戶更容易點擊它,隱性反饋雖然不明確,但數據量更大。在很多網站中,可能只有隱性反饋而沒有顯性反饋。
下面是一個各代表網站中的一些對比:
2.按照反饋的方向分:
- 正反饋
用戶的行為傾向于喜歡 - 負反饋
用戶的行為傾向于不喜歡
2.用戶行為數據如何使用?
2.1 用戶活躍度和物品流行度的分布
長尾分布:
1 物品流行度的長尾分布
2 用戶活躍度的長尾分布
2.2 用戶活躍度和物品流行度的關系
- 一般的,不活躍的用戶要么是新用戶,要么是只來過網站一兩次的老用戶。
- 一般的,新用戶傾向于瀏覽熱門的物品,因為他們對網站不熟悉,只能點擊熱門物品 ,而老用戶會逐漸開始瀏覽冷門的物品
2.3 協同過濾算法
- 協同過濾算法:僅僅基于用戶行為數據設計的推薦算法
- 經協同過濾算法的深入研究,又提出了很多方法,比如基于鄰域的方法(neghborhood-based)、隱語義模型(latent factor model)、基于圖的隨機游走算法(random walk on graph)
廣泛應用并最著名的是基于鄰域的方法,主要包含下面兩種算法:
- 1 基于用戶的協同過濾算法:給用戶推薦和他興趣相似的其他用戶喜歡的物品
- 2 基于物品的協同過濾算法:給用戶推薦和他之前喜歡的物品相似的物品
3.實驗設計和算法評測
def SplitData(data,M,k,seed):test = []train = []random.seed(seed)for user, item in data:if random.randint(0,M) == k:test.append([user,item])else:train.append([user,item])return train,test
召回率描述有多少比例的用戶—物品評分記錄包含在最終的推薦列表中,而精確率描述最終 的推薦列表中有多少比例是發生過的用戶—物品評分記錄。下面兩段代碼給出了召回率和準確率 的計算方法
4.基于鄰域的的推薦算法
4.1 基于用戶的協同過濾算法
性能分析指標:
-
準確率和召回率 可以看到,推薦系統的精度指標(準確率和召回率)并不和參數K成線 性關系。在MovieLens數據集中,選擇K=80左右會獲得比較高的準確率和召回率。因此選 擇合適的K對于獲得高的推薦系統精度比較重要。當然,推薦結果的精度對K也不是特別 敏感,只要選在一定的區域內,就可以獲得不錯的精度。
-
流行度 可以看到,在3個數據集上K越大則UserCF推薦結果就越熱門。這是因為K決定 了UserCF在給你做推薦時參考多少和你興趣相似的其他用戶的興趣,那么如果K越大,參 考的人越多,結果就越來越趨近于全局熱門的物品。
-
覆蓋率 可以看到,在3個數據集上,K越大則UserCF推薦結果的覆蓋率越低。覆蓋率的 降低是因為流行度的增加,隨著流行度增加,UserCF越來越傾向于推薦熱門的物品,從 而對長尾物品的推薦越來越少,因此造成了覆蓋率的降低。
為了避免全部推送的都是熱門的產品,我們需要對熱門的產品進行懲罰
4.2 基于物品的協同過濾算法
4.3 userCF和itemCF的比較
UserCF的推薦更社會化,反映了用戶所在的 小型興趣群體中物品的熱門程度,而ItemCF的推薦更加個性化,反映了用戶自己的興趣傳承
在新聞網站中,用戶的興趣不是特別細化,絕大多數用戶都喜歡看熱門的新聞。即使是個性 化,也是比較粗粒度的,比如有些用戶喜歡體育新聞,有些喜歡社會新聞,而特別細粒度的個性 化一般是不存在的。比方說,很少有用戶只看某個話題的新聞,主要是因為這個話題不可能保證 每天都有新的消息,而這個用戶卻是每天都要看新聞的。因此,個性化新聞推薦更加強調抓住 新聞熱點,熱門程度和時效性是個性化新聞推薦的重點,而個性化相對于這兩點略顯次要。因 此,UserCF可以給用戶推薦和他有相似愛好的一群其他用戶今天都在看的新聞,這樣在抓住熱 點和時效性的同時,保證了一定程度的個性化。這是Digg在新聞推薦中使用UserCF的最重要 原因。
UserCF適合用于新聞推薦的另一個原因是從技術角度考量的。因為作為一種物品,新聞的更 新非常快,每時每刻都有新內容出現,而ItemCF需要維護一張物品相關度的表,如果物品更新很 快,那么這張表也需要很快更新,這在技術上很難實現。絕大多數物品相關度表都只能做到一天 一次更新,這在新聞領域是不可以接受的。而UserCF只需要用戶相似性表,雖然UserCF對于新 用戶也需要更新相似度表,但在新聞網站中,物品的更新速度遠遠快于新用戶的加入速度,而且 對于新用戶,完全可以給他推薦最熱門的新聞,因此UserCF顯然是利大于弊。
但是,在圖書、電子商務和電影網站,比如亞馬遜、豆瓣、Netflix中,ItemCF則能極大地發 揮優勢。首先,在這些網站中,用戶的興趣是比較固定和持久的。一個技術人員可能都是在購買 技術方面的書,而且他們對書的熱門程度并不是那么敏感,事實上越是資深的技術人員,他們看 的書就越可能不熱門。此外,這些系統中的用戶大都不太需要流行度來輔助他們判斷一個物品的 好壞,而是可以通過自己熟悉領域的知識自己判斷物品的質量。因此,這些網站中個性化推薦的 任務是幫助用戶發現和他研究領域相關的物品。因此,ItemCF算法成為了這些網站的首選算法。 此外,這些網站的物品更新速度不會特別快,一天一次更新物品相似度矩陣對它們來說不會造成 太大的損失,是可以接受的。
同時,從技術上考慮,UserCF需要維護一個用戶相似度的矩陣,而ItemCF需要維護一個物品 相似度矩陣。從存儲的角度說,如果用戶很多,那么維護用戶興趣相似度矩陣需要很大的空間, 同理,如果物品很多,那么維護物品相似度矩陣代價較大。 在早期的研究中,大部分研究人員都是讓少量的用戶對大量的物品進行評價,然后研究用 戶興趣的模式。那么,對于他們來說,因為用戶很少,計算用戶興趣相似度是最快也是最簡單 的方法。但在實際的互聯網中,用戶數目往往非常龐大,而在圖書、電子商務網站中,物品的 數目則是比較少的。此外,物品的相似度相對于用戶的興趣一般比較穩定,因此使用ItemCF是 比較好的選擇。當然,新聞網站是個例外,在那兒,物品的相似度變化很快,物品數目龐大, 相反用戶興趣則相對固定(都是喜歡看熱門的),所以新聞網站的個性化推薦使用UserCF算法的 更多。
新聞網站的個性化推薦使用UserCF算法的 更多
5.基于隱語義模型的推薦算法
LFM(latent factor model)隱語義模型的核心思想是通過隱含特征(latent factor)聯系用戶興趣和物品,采取基于用戶行為統計的自動聚類。
隱含語義分析技術的分類來自對用戶行為的統計,代表了用戶對物品分類的看法。隱含語義分析技術和ItemCF在物品分類方面的思想類似,如果兩個物品被很多用戶同時喜歡,那么這兩個物品就很有可能屬于同一個類。隱含語義分析技術允許我們指定最終有多少個分類,這個數字越大,分類的粒度就會越細,反正分類粒度就越粗。隱含語義分析技術會計算出物品屬于每個類的權重,因此每個物品都不是硬性地被分到某一個類中。隱含語義分析技術給出的每個分類都不是同一個維度的,它是基于用戶的共同興趣計算出來的,如果用戶的共同興趣是某一個維度,那么LFM給出的類也是相同的維度。隱含語義分析技術可以通過統計用戶行為決定物品在每個類中的權重,如果喜歡某個類的用戶都會喜歡某個物品,那么這個物品在這個類中的權重就可能比較高。
LFM通過如下公式計算用戶u對物品i的興趣:
這個公式中p(u,k)和q(i,k)是模型的參數,其中p(u,k)度量了用戶u的興趣和第k個隱類的關系,而q(i,k)度量了第k個隱類和物品i之間的關系。這兩個參數是從數據集中計算出來的。要計算這兩個參數,需要一個訓練集,對于每個用戶u,訓練集里都包含了用戶u喜歡的物品和不感興趣的物品,通過學習這個數據集,就可以獲得上面的模型參數。推薦系統的用戶行為分為顯性反饋和隱性反饋。LFM在顯性反饋數據(也就是評分數據)上解決評分預測問題并達到了很好的精度。不過這里主要討論的是隱性反饋數據集,這種數據集的特點是只有正樣本(用戶喜歡什么物品),而沒有負樣本(用戶對什么物品不感興趣)。對負樣本采樣時應該遵循以下原則:
對每個用戶,要保證正負樣本的平衡(數目相似)。
下面的Python代碼實現了負樣本采樣過程:
def RandomSelectNegativeSample(self, items):ret = dict()for i in items.keys():ret[i] = 1n = 0for i in range(0, len(items) * 3):item = items_pool[random.randint(0, len(items_pool) - 1)]if item in ret:continueret[item] = 0n + = 1if n > len(items):break def LatentFactorModel(user_items, F, N, alpha, lambda):[P, Q] = InitModel(user_items, F)for step in range(0,N):for user, items in user_items.items():samples = RandSelectNegativeSamples(items)for item, rui in samples.items():eui = rui - Predict(user, item)for f in range(0, F):P[user][f] += alpha * (eui * Q[item][f] - lambda * P[user][f])Q[item][f] += alpha * (eui * P[user][f] - lambda * Q[item][f])alpha *= 0.9def Recommend(user, P, Q):rank = dict()for f, puf in P[user].items():for i, qfi in Q[f].items():if i not in rank:rank[i] += puf * qfireturn rank綜上在LFM中,重要的參數有4個:隱特征的個數F;學習速率alpha;正則化參數lambda;負樣本/正樣本比例 ratio。通過實驗發現,ratio參數對LFM的性能影響最大。
6.基于圖模型的推薦算法
如上,用戶A對物品a,b,d有行為。
利用隨機游走的personalRank算法來為用戶推薦物品:
假定要給用戶u進行個性化推薦,可以從用戶u對應的節點vuvu節點重新游走,如果繼續游走,那么從當前節點指向的節點按照均勻分布隨機選擇一個節點作為游走下次經過的節點。
這樣重復之后,每個物品節點被訪問的概率收斂到一個數,最終的推薦列表中物品的權重就是物品節點的訪問概率。
講PR轉換成為矩陣的形式,令M為用戶物品二分圖的轉移概率矩陣,即:
只需要計算一次(1?αMT)?1(1?αMT)?1即可。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的推荐算法--利用用户行为数据(02)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Python Cookbook 3rd
- 下一篇: PaperNotes(8)-Stein