推薦系統描述

一、常見的推薦算法原理(時間、位置影響)

目前常見的一些推薦如下:

  1. 基於內容推薦:分析用戶看過的內容(歷史內容等 )再進行推薦。
  2. 基於用戶的協同過濾推薦(UserCF):給用戶推薦和他興趣相似的其它用戶喜歡的物品。
  3. 基於物品的協同過濾推薦(ItemCF):給用戶推薦和他之前喜歡的物品相似的物品。
  4. 基於標籤的推薦:內容有標籤,用戶也會因爲用戶行爲被打上標籤,通過給用戶打標籤或是用戶給產品打標籤爲其推薦物品。
  5. 隱語義模型推薦(LFM):通過隱含特徵推薦和用戶興趣匹配的物品。
  6. 社會化推薦:讓好友給自己推薦物品。
  7. 根據時間上下文推薦:利用用戶訪問產品的時間優化推薦算法,或是根據季節性時令性變化進行推薦。(如春節推薦春節相關物品)
  8. 基於地理位置的推薦(LARS):根據用戶的地理位置進行推薦。

其中比較常見的就是前4種推薦,7、8實際上是在基本的推薦算法上加上了一層根據時間和位置的加權篩選。

各種推薦算法是可以疊加在一起的,根據不同算法的權重調整,給用戶最爲精準智能的推薦。

(一)、基於內容的推薦

基於內容的推薦是基礎的推薦策略。如果你瀏覽或購買過某種類型的內容,則給你推薦這種類型下的其他內容。

基於內容的推薦好處在於易於理解,但不足在於推薦不夠智能,多樣性和新穎性不足。

比如下圖中用戶某一天想買的是單反,但購買單反不是一個頻繁的行爲,且買的是高端單反,那麼接下來給用戶推薦的全是高端單反,推薦的轉化率就會低很多。

又或者是根據瀏覽歷史推薦,但假如我已經買過了該物品,再給我推薦,重複購買的可能性會低很多。

(二)、基於用戶的協同過濾算法:

基於用戶的協同過濾(UserCF)算法,通過用戶對不同內容的行爲,來評測用戶之間的相似性,基於用戶之間的相似性做出推薦。這部分推薦本質上是給用戶推薦和他相似的人感興趣的東西。

比如你曾經喜歡(多次觀看)的電影都是科幻類的電影,如異形,終結者、星球大戰等,通過數據分析我找到了和你一樣看過異形,終結者,星球大戰的人,我發現他還經常看復仇者聯盟的電

影,那麼我則可以推薦你很有可能也會喜歡看復仇者聯盟,那麼我就可以向你推薦復仇者聯盟。

以下對UserCF進行比較詳細的說明,其餘的算法會類似:

  • 用 N(u)表示用戶u曾經有過正反饋的物品集合
  • 用N(v)表示用戶v曾經有過正反饋的物品集合

用jaccard公式表示u和v的興趣相似度:

W(uv)=|N(u)∩N(v)|/|N(u)∪N(v)| 或者 用餘弦相似度 W(uv)=|N(u)∩N(v)|/√|N(u)||N(v)|

對應的表如下,該表的意思是用戶A對物品{a,b,c}有有過行爲,對{a,b,c}是感興趣的,用戶B對{a,c}是感興趣的

那麼用餘弦公式計算用戶A和用戶B的興趣相似度就是W(ab)=|{a,b,c}∩{a,c}|/√|{a,b,c}||{a,c}|=1/√6

實際上的話,很多用戶之間並沒有對同樣的物品產生行爲,即|N(u)∩N(v)|=0,爲了優化這種情況,我們可以先計算出|N(u)∩N(v)|≠0的用戶(u,v)再除以分母√|N(u)||N(v)|

首先需要建立物品到用戶的倒排表,對於每個物品都保存該物品產生過行爲的用戶列表,令稀疏矩陣C[u][v]=|N(u)∩N(v)|,假設用戶u和用戶v同時屬於倒排表K個物品對應的用戶列表

即C[u][v]=K,接着掃描倒排表中每個物品對應的用戶列表,將用戶列表中兩兩用戶對應的C[u][v]加1,最終就可以得到所有用戶之間不爲0的C[u][v]

如圖,建立了一個4X4的用戶相似度矩陣,對於物品a,將W[A][B]和W[B][A]加1,對於物品b,將W[A][C]和W[C][A]加1,掃描完所有物品後,可以得到最終的W矩陣,這裏的W就是餘弦

相似度公式的分子,再除以分母√|N(u)||N(v)| 就可以得到最終的用戶興趣相似度。

得到了用戶興趣相似度後,根據UserCF算法給用戶推薦和他興趣最相似的K個用戶喜歡的物品,以下的公式計算了UserCF中用戶u對物品i的感興趣程度,公式如下:

  • S(u,k):用戶u興趣最接近的K個用戶
  • N(i):對物品i有行爲的用戶集合
  • W(uv):用戶u和用戶v的興趣相似度
  • rvi:用戶v對物品i的興趣,因爲使用的是單一行爲的隱反饋數據,所以所有的rvi=1

以上的算法公式還比較粗糙,如果兩個人購買了同一個物品,不能說明他們的興趣一定相同,因此可以對算法進行改進,提高算法的性能。

新的公式會通過降權懲罰用戶u和用戶v共同興趣列表中熱門物品對他們相似度對影響。

不同的算法有各自不同的效果,也會有不同的限制和缺點,在使用中也要結合產品的用戶不停調整優化,達到最好的效果。

UserCF的限制和缺點:用戶數越來越大的話,計算用戶之間的相似度矩陣,系統運行的時間,複雜度,整體的成本都會大幅度增加。

(三)、基於物品的協同過濾算法

基於物品的協同過濾(ItemCF)算法,通過分析用戶的行爲記錄計算物品之間的相似度,比如物品A和物品B具有很大的相似度是因爲喜歡A的用戶大都也喜歡物品B。

比如下圖中,我曾經搜索過桌面擺件招財貓,然後系統推薦給我了同樣是桌面擺件的摩托車模型。

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

W(i,j)=|N(i)∩N(j)|/√|N(i)||N(j)|

N(i)和N(j)表示喜歡物品i的用戶數,ItemCF的算法結構基本與UserCF的算法類似,這裏不做過多說明了。

算法並不萬能,需要不斷調整和優化,或是根據形態簡化算法。

  • UserCF的推薦更社會化,反映了用戶所在的小型興趣羣體中物品的熱門程度,更快。
  • ItemCF的推薦更加個性化,反映了用戶自己興趣,用戶興趣需要穩定持久。

UserCF

  • 性能:適用於用戶較少的場合,用戶多則計算相似矩陣代價大
  • 領域:實效性強,用戶個性化興趣不太明顯的領域
  • 實時性:用戶有新行爲,不一定造成推薦結果的立即變化
  • 冷啓動:新用戶對很少的物品產生行爲後,不能立即對其進行個性化推薦。新物品上線後,一旦有用戶對物品進行了行爲,將可以將新物品推薦給和他產生行爲的用戶興趣相似的其它用戶。

ItemCF

  • 性能:適用於物品數明顯小於用戶數的場合,如果物品較多,矩陣計算代價大
  • 領域:長尾物品豐富,用戶個性化需求強烈的領域
  • 實時性:用戶有新行爲,一定會導致推薦結果的實時變化
  • 冷啓動:新用戶只要對一個物品產生行爲,就可以給他推薦和該物品相關的其它物品。不能在不離線更新物品相似度表的情況下將新物品推薦給用戶。

兩種算法的一些限制:

  1. 若某個物品太過熱門,則所有推薦中都可能出現該物品,需要對熱門物品作出懲罰,懲罰公式xxxx
  2. 不同領域的最熱門物品之間往往有比較高的相似度。(僅靠用戶數據不能解決這個問題)

(四)、基於標籤的推薦

基於標籤的推薦一般分爲兩種,一種是通過給用戶的某些特徵打上標籤,另一種則是讓用戶自己給物品打上標籤,這裏主要講用戶給物品打標籤(UGC)。

基於UGC的標籤推薦主要是利用用戶打標籤的行爲爲其推薦物品,在用戶給物品打標籤時也要提供合適該物品的標籤。用戶用標籤描述對物品的看法,標籤是反應用戶興趣的重要數據源。

一個用戶行爲的數據集一般由一個三元組的集合表示,其中記錄{u,i,b}表示用戶u給物品i打上了標籤b(當然實際中會包含用戶屬性、物品屬性等,更爲複雜)。

–(具體的算法這裏隱去,瞭解原理即可)–

給用戶提供標籤一般有 這麼幾種方法 :

  1. 給用戶推薦一個系統中最熱門的標籤
  2. 給用戶推薦物品i上最熱門的標籤
  3. 給用戶推薦他自己經常使用的標籤
  4. 將方法2和方法3融合,通過一個係數將上面的推薦結果線性加權,生成最終的推薦結果

常見的基於標籤(UGC)的推薦有豆瓣:

(五)、隱語義模型LFM

LFM的核心思想:通過隱含特徵聯繫用戶興趣和物品

對於某個用戶,首先要得到他的興趣分類,然後從分類中挑選他可能喜歡的物品,要得到他喜歡的的物品分類需要考慮到3個問題:

1.如何給物品分類?

目前比較簡單的做法是通過人工給物品分類,按照不同的物品分類方法。

另外則是通過隱含語義分析技術,採用基於用戶行爲統計的自動聚類來解決這個問題,比較著名的模型和方法有pLSA,LDA,隱含類別模型,隱含主題模型,矩陣分析等等。

2.如何確定用戶對哪些物品感興趣,以及感興趣的程度?

推薦系統的用戶行爲分爲隱性反饋和顯性反饋,主要討論隱性反饋數據集 ,這種數據集只有正樣本(用戶喜歡什麼物品),沒有負樣本(用戶對什麼物品不感興趣),在隱性反饋數據集上應用LFM解決推薦的問題需要給每個用戶生成負樣本,有這麼幾種方法:

  • 對於一個用戶,用他沒有過行爲的物品作爲負樣本
  • 對於一個用戶,用他沒有過行爲的物品中均勻採樣出一些物品作爲負樣本
  • 對於一個用戶,從他沒有過行爲的物品中採樣出一些物品作爲負樣本,採樣時,保證每個用戶的正負樣本數目相當
  • 對於一個用戶,從他沒有過行爲的物品中採樣出一些物品作爲負樣本,採樣時,偏重不熱門的物品。

採負樣本的一些原則:

對於每個用戶,採樣時要保證正負樣本的平衡。

對於每個用戶採樣負樣本時,要選取那些熱門,而用戶沒有行爲的物品。

綜合以上的方法結合用戶行爲頻率計算確定用戶感興趣的物品和程度。

3.對一個給定的類,選擇哪些屬於這個類的物品推薦給用戶,以及如何確定這些物品在一個類中的權重?

這個問題主要的解決方法就是通過1.2的計算結果綜合算法得出,根據算法計算調整不同物品的權重,通過迭代不斷優化算法中的參數。

LFM中重要的參數有(僅瞭解就可以,具體需要結合算法公式):

  1. 隱特徵的個數F
  2. 算法學習的速率
  3. 正則化參數
  4. 負樣本/正樣本比例

LFM具有學習能力,能實現自我學習不斷優化模型。

(六)、社會化推薦

根據某機構的調查,在購買物品時,90%左右的用戶會相信朋友的推薦,70%的用戶會相信網上其他用戶對商品的評論。

在互聯網中最明顯的社會化推薦則是利用社交網絡數據進行推薦,利用社交網絡數據推薦一般可以從以下幾個方面入手:

  1. 電子郵箱的社交關係信息
  2. 用戶註冊信息
  3. 用戶的位置數據,web的IP和手機的GPS
  4. 討論組和論壇
  5. 聊天工具中的好友關係列表
  6. 社交網站中的好友關係數據

基於社交信息的社會化推薦能夠利用好友的關係,解決一部分冷啓動的問題。

情況1.你通過朋友的分享進入的,你朋友在網站中玩的比較久,有推薦數據。由於你之前在該網站沒有任何數據,那麼我要想給你推薦物品,就可以根據你朋友的推薦列表來給你推薦你可能會喜歡的東西。

情況2.如果你是剛來到一個網站,你沒有朋友, 我想給你做社會化推薦的話,可以根據你的註冊信息、位置,共同興趣等給你推薦好友,再給你做好友推薦。

(七)、根據時間上下文推薦

上下文包括用戶訪問推薦系統的時間、地點、心情等,根據時間上下文的推薦是希望能夠準確預測用戶在某個特定時刻或某段時刻的興趣。

比如電商產品在賣衣服時,冬天推薦的衣物和夏天推薦的衣物是不同的。如下圖,淘寶網在冬季的推薦:

時間信息對用戶興趣的影響主要表現在以下幾個方面:

  • 用戶的興趣是變化的
  • 物品是有生命週期的
  • 季節效應

考慮到時間信息後,推薦系統也從一個靜態系統變成了一個時變的系統,而用戶行爲數據也變成了時間序列。

在給定數據集後,可以通過統計以下信息研究推薦系統的時間特性:

  1. 數據集每天獨立用戶數的增長情況(平穩階段、增長階段、衰落階段等)
  2. 系統的物品變化情況
  3. 用戶訪問情況

推薦系統的實時性

用戶的興趣是不斷變化的,其變化體現在用戶不斷增加的新行爲中,一個實時的推薦系統需要能夠實時響應用戶新的行爲,讓推薦列表不斷變化,從而滿足用戶不斷變化的興趣。

實時的推薦系統應該滿足:

  1. 對用戶行爲的存取有實時性(在用戶訪問推薦系統時計算)。
  2. 對推薦算法本身有實時性(考慮到用戶近期行爲和長期行爲)。

推薦算法的時間多樣性:推薦系統每天推薦結果的變化程度,有的推薦系統中用戶經常能看到不同的推薦結果。

時間上下文的推薦算法

  1. 推薦最新最熱門的物品
  2. 時間上下文的ItemCF算法,利用用戶行爲離線計算物品之間的相似度,根據用戶的歷史行爲和物品相似度矩陣,給用戶做在線個性化推薦。

物品的相似度計算:用戶在像個很短的時間內喜歡的物品有更高的相似度。

在線推薦:用戶近期行爲相比用戶很久之前的行爲,更能體現用戶現在的興趣。

3.時間上文的UserCF算法

用戶的興趣相似度計算:如果兩個用戶同時喜歡相同的物品,則興趣相似度越大。

相似興趣用戶的最近行爲(推薦與其興趣相似的用戶最近喜歡的物品)。

(八)、基於地理位置的推薦

基於位置的推薦算法(LARS)會根據用戶所在的國家、城市、街道探尋規律進行推薦,找到用戶地點和興趣相關的特徵,主要包括興趣本地化和活動本地化。

LARS的基本思想是將數據集根據用戶的位置劃分成很多子集,位置是一個樹狀結構,比如國家、省、市、區、縣的結構,因此數據集也會劃分成一個樹狀結構。

根據用戶的位置,將其分配到一個葉子節點中,而該節點會包括了所有和他同一位置的用戶行爲數據集。

LARS會利用該葉子節點上的用戶行爲數據,通過ItemCF或UserCF給用戶推薦。

數據集會包括(用戶、用戶位置、物品、物品位置、物品評分)的記錄

比如大衆點評的推薦:

二、推薦系統的冷啓動問題

推薦系統的冷啓動問題指的是,當推薦系統剛部署後,沒有用戶行爲時或物品數據時,推薦系統並不能根據用戶行爲數據給用戶推薦物品。一般分爲用戶冷啓動、物品冷啓動和系統冷啓動。

通常有一些辦法可以緩和冷啓動問題

1.利用用戶註冊信息推薦:即獲取用戶的註冊信息,然後對用戶分類,給用戶推薦他所屬分類中可能感興趣的物品。 將關聯的查詢結果按照一個權重相加,利用的用戶信息越多,就能越精準

地匹配用戶興趣。

2.給用戶一些內容選擇合適的物品啓動用戶的興趣:選擇一些熱門的,有代表性、區分性、多樣性的物品推薦給用戶。

3.利用物品的內容信息推薦給用戶:可以通過人工篩選出一些用戶會感興趣的物品推薦。

三、推薦系統的架構

如果一個系統中將各種用戶行爲、特徵和任務都考慮進去,系統會非常複雜,難以配置。因此推薦系統需要由多個推薦引擎組成,每個推薦引擎負責一類特真和一種任務,而推薦系統只是

將推薦引擎的結果按照一定權重或優先級合併、排序,然後返回。

這樣的優勢在於:每一個引擎代表了一種推薦策率,可通過對單一的引擎調整來優化推薦系統。

如何設計一個推薦引擎成了推薦系統設計的核心部分。

  • 模塊A:從數據庫或緩存中拿到用戶行爲數據,通過分析不同行爲,生成當前用戶的特徵向量。
  • 模塊B:將用戶的特徵向量通過特徵-物品相關舉證轉換爲初始推薦物品列表。
  • 模塊C:對初始的推薦列表進行過濾,排名等處理,生成最終的推薦結果。

生成用戶特徵向量:用戶特徵向量一般包括兩種:

  1. 從用戶的註冊信息提取,包括用戶的人口統計學特徵等,在推薦時直接拿到用戶他惡政數據生成特徵向量。
  2. 從用戶行爲中計算出來

通過用戶行爲生成特徵(需要考慮以下幾點):

  1. 用戶行爲的種類(用戶會對物品產生很多種不同的行爲)。
  2. 用戶行爲產生的時間(近期行爲比較重要)。
  3. 用戶行爲的次數(一般行爲次數多的物品權重越高)。
  4. 物品的熱門程度(用戶對很熱門的物品產生行爲可能是在跟風,推薦引擎在生成用戶特徵時會加重不熱門物品對應特徵的權重)。

特徵-物品相關推薦:

在得到用戶的特徵向量後,根據離線的相關表得到初始化物品推薦表。

每個特徵,在相關表中存儲和它最相關的N個物品的ID。

一個推薦引擎可以在配置文件中配置很多相關表以及他們的權重,推薦系統啓動後會將相關表按配置的權重相加,最終的相關表保存在內存中,給用戶推薦時,已經是加權後的相關表了。

候選物品結合(保證推薦結果只包含候選物品集合中的物品):

一般應用於產品需求,希望將某些物品推薦給用戶。

過濾模塊:

過濾掉不符合要求的物品,一般有以下幾種

  1. 用戶已經產生過行爲的物品(推薦的目的是幫助用戶發現物品,因此沒必要給用戶推薦他已經知道過的物品,保證推薦結果的新穎性)。
  2. 候選物品以外的物品,用戶自己的選擇等。
  3. 質量差、評價低的物品。

排名模塊:

  1. 新穎性排名(對某些舊的但仍然熱門的物品降權處理)。
  2. 多樣性
  • 按照某物品內容屬性分爲幾類,然後在每個類中都選擇該類中排名最高的物品組合最終的推薦列表
  • 控制不同的推薦結果的推薦理由出現的次數,推薦理由一般是產生推薦結果的重要特徵,提高多樣性需要讓推薦結果儘量來自不同的特徵,有不同的推薦理由。

3.時間多樣性

  • 實時推薦
  • 記錄用戶之前的行爲數據,在給用戶新的推薦結果是降權

4.用戶反饋(用戶對推薦結果點擊情況的反饋)。

四、推薦系統的度量

個性化推薦的核心還是推薦算法,依賴用戶的行爲數據,卻決於定義的環境維度,不同維度下的算法的表現能力會不一樣。

什麼是好的推薦系統:

  1. 滿足用戶的需求,推薦給用戶的是用戶會感興趣的內容。
  2. 滿足所有的內容都被推薦給感興趣的用戶(衡量的指標爲覆蓋率)。
  3. 推薦系統本身蒐集到高質量的用戶反饋,能夠對之進行不斷的完善。

好的推薦系統不僅能預測用戶的行爲,能擴展用戶的視野,幫助用戶發現那些他們可能會買,但卻不那麼容易發現的東西,而非是本來就想要買的東西。

推薦系統的評價指標:

  1. 用戶滿意度
  2. 預測精準度
  3. 覆蓋率
  4. 多樣性
  5. 新穎性(不犧牲精度的情況下提高多樣性,即新東西)
  6. 驚喜度(推薦結果和用戶歷史興趣不相似,但卻讓用戶滿意)
  7. 信任度
  8. 實時性
  9. 健壯性(反作弊處理邏輯)
  10. 商業目標

推薦算法的考覈指標:

  1. 準確率
  2. 召回率
  3. 流行度
  4. 覆蓋率

推薦系統的測試方法:

  1. 離線測試:通過用戶行爲數據形成數據集
  2. 用戶調查
  3. 在線實驗:A/B測試(切分流量,將用戶分成不同的層控制觀察)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章