1. 程式人生 > >常用的推薦演算法小結

常用的推薦演算法小結

推薦系統的必然

網際網路發展到現階段,資訊已經不是匱乏,而是爆炸。所以良好的使用者體驗就是把使用者喜歡的,感興趣的從大量的資料中篩選出來,再呈現給使用者,實現千人千面的效果。

所以推薦系統的出現就是必然了,他可以推薦每個使用者感興趣的產品,同時也將每個產品呈現到感興趣的使用者面前。實現使用者和產品的雙贏。

推薦系統架構

一個常見的推薦系統架構一般如下圖: 
這裡寫圖片描述 
可以看到分為資料來源、推薦引擎和推薦互動三個方面。 
資料 60%,產品30%,演算法10%,這是一個基本的共識

資料來源

將一個產品推薦給一個使用者。設計到的物件有兩個,產品和使用者。還有兩者的互動。所以資料來源有三個方面。

  • 產品資料:價格,標籤,類別等
  • 使用者資料: 性別,年齡,年級等
  • 互動資料:對產品的評價打分(構建評價模型)

評價模型,通過真實的使用者行為資料構建,包括對產品是否瀏覽,瀏覽時間,是否收藏,是否分享等等。通過這些指標構建評價模型。(相關性分析+迴歸?)

推薦引擎

推薦引擎主要是推薦系統的演算法,主要包括 基於人口統計學的推薦,基於內容的推薦,協同過濾三種。下文詳細分析。

另外現在推薦引擎都構建在搜尋引擎的基礎上,貼一個推薦架構: 
這裡寫圖片描述 
這是基於Mahout 和 Elasticsearch 實現推薦系統 
更多見這裡

使用者互動

將“推薦”理解為“推送”

 
如果主動推送給使用者,很有可能會引起使用者反感,雖然在一定程度上會提升使用者活躍度。當然這個也可以通過演算法去控制要不要主動推送,對於活躍度一直很低的可以主動推薦,甚至是通過發簡訊來推送,其他使用者則可以轉為被動。

當下無數的網際網路產品都有一個“發現”模組,包括微信,Twiiter等大量產品。使用者有需求的時候,會主動的找“推薦”,避免被打攪。而對於推薦系統,也避免對使用者形成打擾,引起使用者反感。

參考這裡

推薦演算法

基於人口學的推薦

核心是基於使用者資料建模 
這裡寫圖片描述 
這是最為簡單的一種推薦演算法,它只是簡單的根據系統使用者的基本資訊發現使用者的相關程度,然後將相似使用者喜愛的其他物品推薦給當前使用者。

系統首先會根據使用者的屬性建模,比如使用者的年齡,性別,興趣等資訊。根據這些特徵計算使用者間的相似度。比如系統通過計算髮現使用者A和C比較相似。就會把A喜歡的物品推薦給C。

  • 優勢: 
    a 不需要歷史資料,沒有冷啟動問題 
    b 不依賴於物品的屬性,因此其他領域的問題都可無縫接入。
  • 不足: 
    演算法比較粗糙,效果很難令人滿意,只適合簡單的推薦

推薦系統的「冷啟動」包含兩個層面: 
1. 使用者的冷啟動,應該是80%的「冷啟動」所描述的問題,新的使用者因為沒有在產品上留下行為資料,你自然無法得知他/她的喜好,從而做出靠譜的推薦。這時一般需要藉助使用者的背景資料,或者引導性地讓使用者選擇,或者暫時用熱門啟動替代個性化推薦來解決,線上推薦系統可以做到在使用者產生行為資料後立馬更新推薦列表。 
2. 物品的冷啟動,主要適用於ItemBased的場景,即對一個物品推類似的物品,因為新物品還沒有使用者行為資料,自然也就沒有辦法通過協同過濾的方式進行推薦,這時一般會利用物品屬性的相關程度來解決。 
作者:ershou 
連結:https://www.zhihu.com/question/19668164/answer/39133343 
來源:知乎 
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

基於內容的推薦

核心是基於內容資料建模 
這裡寫圖片描述 
與上面的方法相類似,只不過這次的中心轉到了物品本身。使用物品本身的相似度而不是使用者的相似度。 
系統首先對物品(圖中舉電影的例子)的屬性進行建模,圖中用型別作為屬性。在實際應用中,只根據型別顯然過於粗糙,還需要考慮演員,導演等更多資訊。通過相似度計算,發現電影A和C相似度較高,因為他們都屬於愛情類。系統還會發現使用者A喜歡電影A,由此得出結論,使用者A很可能對電影C也感興趣。於是將電影C推薦給A。

  • 優勢: 
    對使用者興趣可以很好的建模,並通過對物品屬性維度的增加,獲得更好的推薦精度
  • 不足: 
     a 物品的屬性有限,很難有效的得到更多資料 
     b 物品相似度的衡量標準只考慮到了物品本身,有一定的片面性 
     c 需要使用者的物品的歷史資料,有冷啟動的問題

協同過濾

核心是使用者互動資料建模 
基於協同過濾的推薦可以分為三個子類:基於使用者的推薦(User-based Recommendation),基於專案的推薦(Item-based Recommendation)和基於模型的推薦(Model-based Recommendation)。

基於使用者的協同過濾推薦

它的基本假設是,喜歡類似物品的使用者可能有相同或者相似的口味和偏好。根據所有使用者對物品或者資訊的偏好,發現與當前使用者口味和偏好相似的“鄰居”使用者群,在一般的應用中是採用計算“K- 鄰居”的演算法;然後,基於這 K 個鄰居的歷史偏好資訊,為當前使用者進行推薦。 
這裡寫圖片描述 
假設使用者 A 喜歡物品 A,物品 C, 
使用者 B 喜歡物品 B, 
使用者 C 喜歡物品 A ,物品 C 和物品 D; 
從這些使用者的歷史喜好資訊中,我們可以發現使用者 A 和使用者 C 的口味和偏好是比較類似的,同時使用者 C 還喜歡物品 D,那麼我們可以推斷使用者 A 可能也喜歡物品 D,因此可以將物品 D 推薦給使用者 A。

基於使用者的協同過濾推薦機制和基於人口統計學的推薦機制都是計算使用者的相似度,並基於“鄰居”使用者群計算推薦,但它們所不同的是如何計算使用者的相似度,基於人口統計學的機制只考慮使用者本身的特徵,而基於使用者的協同過濾機制是在使用者的歷史偏好的資料上計算使用者的相似度

基於專案的協同過濾推薦

基於專案的協同過濾推薦的基本原理也是類似的,只是說它使用所有使用者對物品或者資訊的偏好,發現物品和物品之間的相似度,然後根據使用者的歷史偏好資訊,將類似的物品推薦給使用者。 
這裡寫圖片描述 
假設使用者 A 喜歡物品 A 和物品 C, 
使用者 B 喜歡物品 A,物品 B 和物品 C, 
使用者 C 喜歡物品 A, 
從這些使用者的歷史喜好可以分析出物品 A 和物品 C 時比較類似的,喜歡物品 A 的人都喜歡物品 C,基於這個資料可以推斷使用者 C 很有可能也喜歡物品 C,所以系統會將物品 C 推薦給使用者 C。

與上面講的類似,基於專案的協同過濾推薦和基於內容的推薦其實都是基於物品相似度預測推薦,只是相似度計算的方法不一樣,前者是從使用者歷史的偏好推斷,而後者是基於物品本身的屬性特徵資訊

基於模型的協同過濾推薦

基於模型的協同過濾推薦就是基於樣本的使用者喜好資訊,訓練一個推薦模型,然後根據實時的使用者喜好的資訊進行預測,計算推薦。

協同過濾小結

  • 優點: 
    a. 它不需要對物品或者使用者進行嚴格的建模,而且不要求物品的描述是機器可理解的,所以這種方法也是領域無關的。 
    b. 這種方法計算出來的推薦是開放的,可以共用他人的經驗,很好的支援使用者發現潛在的興趣偏好
  • 缺點: 
    a. 方法的核心是基於歷史資料,所以對新物品和新使用者都有“冷啟動”的問題。 
    b. 推薦的效果依賴於使用者歷史偏好資料的多少和準確性。 
    c. 在大部分的實現中,使用者歷史偏好是用稀疏矩陣進行儲存的,而稀疏矩陣上的計算有些明顯的問題,包括可能少部分人的錯誤偏好會對推薦的準確度有很大的影響等等。 
    d. 對於一些特殊品味的使用者不能給予很好的推薦。 
    e. 由於以歷史資料為基礎,抓取和建模使用者的偏好後,很難修改或者根據使用者的使用演變,從而導致這個方法不夠靈活。

推薦演算法小結

  • 基於人口統計學或者內容的推薦 
    僅僅考慮使用者或者內容本身的特徵,並相相同特徵形成一個集合。這樣,如果你選擇了集合中的一個,就像你推薦集合中的另一個。
  • 基於協同過濾的推薦 
    充分利用集體的智慧,即在大量的人群的行為和資料中收集答案,以幫助我們對整個人群得到統計意義上的結論。物件客觀上不一定一樣,但是主觀的行為相似,就可以產生推薦。 
    完全基於使用者的行為習慣,即 
    1)相似消費習慣的使用者,很可能消費相同的東西 (可能兩個消費習慣相同的使用者,年齡,性別都不一樣) 
    2)相似消費習慣的產品,很可能同時被消費。(可能兩個相似消費習慣的產品種類,大小都不一樣)

推薦演算法發展方向

1 需要考慮在保證推薦準確性的同時增加推薦的多樣性,使特殊喜好的使用者得到推薦 
2 需要考慮使用者對系統的實時反饋,更好的利用反饋資料強化推薦演算法 
3 考慮時間,空間,任務等因素,來更好的完成推薦 
4冷啟動問題的解決思路這裡