推薦系統-基於用戶行爲數據的推薦

爲什麼要根據用戶行爲

爲什麼不根據用戶語言?

標題是利用用戶的數據行爲, 是根據用戶的實際動作進行演算的方法, 那爲什麼不利用用戶語言進行演算呢? 最大的原因就是用戶也說不清楚自己到底喜歡什麼, 而用戶的實際行爲往往能夠暴露其真實想法, 有些想法用戶自己可能都還沒有意識到.

一個經典的例子 - 尿布和啤酒

一個數據挖掘的經典案例: 一個超市人員發現很多人會同時購買啤酒和尿布, 後來他們認爲這是因爲很多婦女要在家照顧孩子, 就讓自己的丈夫去買尿布, 而丈夫買尿布時還不忘買一下自己喜歡的啤酒, 於是二者產生了聯繫. 然後超市將這兩個商品擺在臨近的貨架上, 發現銷售量增長了.

從中可以看到用戶的行爲數據中蘊含了很多不是那麼顯而易見的規律, 而我麼的個性化推薦算法的任務就是通過計算機去發現這些規律, 從而爲產品的設計提供指導, 提升用戶體驗.

協同過濾

協同過濾算法就是指用戶可以齊心協力, 通過不斷與網站互動, 使自己的推薦列表能夠不斷過濾掉不感興趣的物品, 變得越來越個性化, 這也和亞馬遜的爲每個用戶打造一個屬於自己的商店的思想不謀而合.

僅基於用戶行爲數據設計的推薦算法稱爲協同過濾算法. 在學術界對這方面有深入的研究, 提出來多種方法, 比如基於鄰域的算法, 隱語義模型, 基於圖的隨機遊走算法等. 本文僅介紹兩種基於鄰域的算法.

  • 基於用戶的協同過濾算法
  • 基於物品的協同過濾算法

收集用戶的行爲

有多種方式收集用戶的行爲

  • 打日誌
  • 收集用戶都商品的喜好程度
  • 記錄用戶所有訪問記錄等

在設計算法前, 需要對收集到的數據進行分析.

基於用戶的協同過濾算法

基於用戶的協同過濾算法主要包含如下兩個步驟

  • 找到和目標用戶相似的用戶集合
  • 找到這個用戶集合中用戶喜歡的, 且目標用戶沒有聽說過的物品推薦給用戶

即先找同類用戶, 再找同類用戶喜歡的商品

用戶相似度的計算

該算法的難點在於尋找相似的用戶集合, 意味着需要對每一個目標用戶意外的用戶和目標用戶進行相似度計算, 取最高的那一部分, 最常規的方法是使用餘弦相似度進行計算. 但這樣會造成某些用戶與目標用戶原本一點關係都沒有還需要計算一次的浪費.

爲了解決這個問題, 可以在物品中添加用戶id的冗餘數據, 通過對所有物品的用戶id組件稀疏矩陣, 只針對有聯繫的用戶進行計算.

目標用戶對某一物品感興趣程度的計算

就是所有與目標用戶相似的用戶對該目標物品感興趣的程度的累加. 即越多相似用戶喜歡目標物品, 則用戶可能越感興趣

熱門商品的處理

算到最後會發現, 所有用戶都看過或喜歡熱門商品, 但目標用戶不一定喜歡該熱門商品. 比如所有人都買過新華字典, 但這並不能說明他們興趣相似, 所以推薦新華字典並不是一個好的選擇. 換句話說, 兩個用戶對冷門物品採取過同樣的行爲更能說明他們的興趣相似度. 因此計算時應該去除或將其熱門商品的權重.

基於物品的協同過濾算法

該算法是目前業界使用最多的算法. 無論是亞馬遜, 還是Netflix, Youtube, 其推薦算法的基礎都是該算法.

基於用戶的協同過濾算法的問題

隨着用戶的增長, 用戶相似度矩陣會呈平方增長, 而當今互聯網用戶量及其龐大, 因此帶來了用戶相似度計算的浪費.

針對這個問題, 亞馬遜提出了基於物品的協同過濾算法. 它主要通過分析用戶的行爲記錄計算物品之間的相似度.

基於物品的協同過濾算法

該算法主要分爲兩步

  • 計算物品之間的相似度
  • 根據物品相似度和用戶的歷史行爲給用戶生成推薦列表

物品相似度計算

物品i和物品j的相似度, 可以用: 喜歡i的用戶中, 喜歡j的用戶所佔比例 進行計算. 可以想見. 物品相似度的計算, 就是計算物品被很多用戶共同喜歡的程度.

是根據用戶對物品的歷史記錄進行計算, 即一個用戶對應購買過的多個物品. 這一點恰好和基於用戶的協同算法想法( 它是一個物品存儲購買過它的用戶冗餘數據 )

生成推薦列表

計算出物品相似度, 從高到低排列, 剔除用戶購買歷史, 即爲推薦列表.

去除活躍用戶的影響

活躍用戶會造成任何兩個物品都存在相似度, 於是物品相似矩陣編程稠密矩陣, 浪費大量的算力. 一個例子就是如果某個書店在噹噹購買了所有書籍, 把它當成一個常規用戶的話, 顯然噹噹的所有書都有一定的相似度了, 顯然這是不對的. 因此計算中需要考慮去除活躍用戶的影響.

兩種領域算法的對比

項目 基於用戶的協同過濾算法 基於物品的協同過濾算法
性能 適用於用戶較少場合, 用戶過多造成計算用戶相似度矩陣過大 適用於物品數量明顯小於用戶數的場合, 物品過多會造成物品相似度矩陣過大
場景 時效性較強, 但用戶個性化不太明顯的場合 長尾物品豐富, 用戶個性化需求強烈的領域
實時性 用戶新行爲不一定造成推薦結果立即變化 用戶新行爲一定造成結果立即變化
冷啓動 新用戶對很少物品產生行爲時, 不能立即進行個性化推薦; 新物品上線後只要有行爲就能被推薦給興趣相似的用戶 相反, 這裏新用戶只要有一個行爲就可以推薦; 新物品上線後要有足夠的訪問量才能被推薦出去
推薦解釋 難以提供給用戶信服的推薦理由 利用用戶的歷史行爲做推薦解釋, 比較令人信服
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章