4個方面,系統總結個性化推薦系統
大部分人都聽說過個性化推薦,也知道千人千面,那么個性化推薦系統到底是怎么樣的?最近做了一點總結。
現在的人們面對信息過載問題日益嚴重,好的個性化推薦將能夠很好的提升用戶體驗,提高用戶使用產品完成任務的效率,更好的留住用戶,進一步擴大產品的盈利。
對于一些電商類的產品,個性化推薦也能幫助減少馬太效應和長尾效應的影響,使商品的利用率更高,盈利增長。
【注】
馬太效應:產品中熱門的東西會被更多人看到,熱門的東西會變得更加熱門,而冷門的東西更加冷門。
長尾理論:某些條件下,需求和銷量不高的產品所占據的市場份額,可以和主流產品的市場份額相比。
對于推薦系統的解釋分為4部分
一、常見的推薦算法原理(時間、位置影響)
目前常見的一些推薦如下:
- 基于內容推薦:分析用戶看過的內容(歷史內容等 )再進行推薦。
- 基于用戶的協同過濾推薦(UserCF):給用戶推薦和他興趣相似的其它用戶喜歡的物品。
- 基于物品的協同過濾推薦(ItemCF):給用戶推薦和他之前喜歡的物品相似的物品。
- 基于標簽的推薦:內容有標簽,用戶也會因為用戶行為被打上標簽,通過給用戶打標簽或是用戶給產品打標簽為其推薦物品。
- 隱語義模型推薦(LFM):通過隱含特征推薦和用戶興趣匹配的物品。
- 社會化推薦:讓好友給自己推薦物品。
- 根據時間上下文推薦:利用用戶訪問產品的時間優化推薦算法,或是根據季節性時令性變化進行推薦。(如春節推薦春節相關物品)
- 基于地理位置的推薦(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。
比如下圖中,我曾經搜索過桌面擺件招財貓,然后系統推薦給我了同樣是桌面擺件的摩托車模型。
- 計算物品之間的相似度
- 根據物品之間的相似度和用戶的歷史行為給用戶生成推薦列表
W(i,j)=|N(i)∩N(j)|/√|N(i)||N(j)|
N(i)和N(j)表示喜歡物品i的用戶數,ItemCF的算法結構基本與UserCF的算法類似,這里不做過多說明了。
算法并不萬能,需要不斷調整和優化,或是根據形態簡化算法。
- UserCF的推薦更社會化,反映了用戶所在的小型興趣群體中物品的熱門程度,更快。
- ItemCF的推薦更加個性化,反映了用戶自己興趣,用戶興趣需要穩定持久。
UserCF
- 性能:適用于用戶較少的場合,用戶多則計算相似矩陣代價大
- 領域:實效性強,用戶個性化興趣不太明顯的領域
- 實時性:用戶有新行為,不一定造成推薦結果的立即變化
- 冷啟動:新用戶對很少的物品產生行為后,不能立即對其進行個性化推薦。新物品上線后,一旦有用戶對物品進行了行為,將可以將新物品推薦給和他產生行為的用戶興趣相似的其它用戶。
ItemCF
- 性能:適用于物品數明顯小于用戶數的場合,如果物品較多,矩陣計算代價大
- 領域:長尾物品豐富,用戶個性化需求強烈的領域
- 實時性:用戶有新行為,一定會導致推薦結果的實時變化
- 冷啟動:新用戶只要對一個物品產生行為,就可以給他推薦和該物品相關的其它物品。不能在不離線更新物品相似度表的情況下將新物品推薦給用戶。
兩種算法的一些限制:
- 若某個物品太過熱門,則所有推薦中都可能出現該物品,需要對熱門物品作出懲罰,懲罰公式xxxx
- 不同領域的最熱門物品之間往往有比較高的相似度。(僅靠用戶數據不能解決這個問題)
(四)、基于標簽的推薦
基于標簽的推薦一般分為兩種,一種是通過給用戶的某些特征打上標簽,另一種則是讓用戶自己給物品打上標簽,這里主要講用戶給物品打標簽(UGC)。
基于UGC的標簽推薦主要是利用用戶打標簽的行為為其推薦物品,在用戶給物品打標簽時也要提供合適該物品的標簽。用戶用標簽描述對物品的看法,標簽是反應用戶興趣的重要數據源。
一個用戶行為的數據集一般由一個三元組的集合表示,其中記錄{u,i,b}表示用戶u給物品i打上了標簽b(當然實際中會包含用戶屬性、物品屬性等,更為復雜)。
–(具體的算法這里隱去,了解原理即可)–
給用戶提供標簽一般有 這么幾種方法 :
- 給用戶推薦一個系統中最熱門的標簽
- 給用戶推薦物品i上最熱門的標簽
- 給用戶推薦他自己經常使用的標簽
- 將方法2和方法3融合,通過一個系數將上面的推薦結果線性加權,生成最終的推薦結果
常見的基于標簽(UGC)的推薦有豆瓣:
(五)、隱語義模型LFM
LFM的核心思想:通過隱含特征聯系用戶興趣和物品
對于某個用戶,首先要得到他的興趣分類,然后從分類中挑選他可能喜歡的物品,要得到他喜歡的的物品分類需要考慮到3個問題:
1.如何給物品分類?
目前比較簡單的做法是通過人工給物品分類,按照不同的物品分類方法。
另外則是通過隱含語義分析技術,采用基于用戶行為統計的自動聚類來解決這個問題,比較著名的模型和方法有pLSA,LDA,隱含類別模型,隱含主題模型,矩陣分析等等。
2.如何確定用戶對哪些物品感興趣,以及感興趣的程度?
推薦系統的用戶行為分為隱性反饋和顯性反饋,主要討論隱性反饋數據集 ,這種數據集只有正樣本(用戶喜歡什么物品),沒有負樣本(用戶對什么物品不感興趣),在隱性反饋數據集上應用LFM解決推薦的問題需要給每個用戶生成負樣本,有這么幾種方法:
- 對于一個用戶,用他沒有過行為的物品作為負樣本
- 對于一個用戶,用他沒有過行為的物品中均勻采樣出一些物品作為負樣本
- 對于一個用戶,從他沒有過行為的物品中采樣出一些物品作為負樣本,采樣時,保證每個用戶的正負樣本數目相當
- 對于一個用戶,從他沒有過行為的物品中采樣出一些物品作為負樣本,采樣時,偏重不熱門的物品。
采負樣本的一些原則:
對于每個用戶,采樣時要保證正負樣本的平衡。
對于每個用戶采樣負樣本時,要選取那些熱門,而用戶沒有行為的物品。
綜合以上的方法結合用戶行為頻率計算確定用戶感興趣的物品和程度。
3.對一個給定的類,選擇哪些屬于這個類的物品推薦給用戶,以及如何確定這些物品在一個類中的權重?
這個問題主要的解決方法就是通過1.2的計算結果綜合算法得出,根據算法計算調整不同物品的權重,通過迭代不斷優化算法中的參數。
LFM中重要的參數有(僅了解就可以,具體需要結合算法公式):
- 隱特征的個數F
- 算法學習的速率
- 正則化參數
- 負樣本/正樣本比例
LFM具有學習能力,能實現自我學習不斷優化模型。
(六)、社會化推薦
根據某機構的調查,在購買物品時,90%左右的用戶會相信朋友的推薦,70%的用戶會相信網上其他用戶對商品的評論。
在互聯網中最明顯的社會化推薦則是利用社交網絡數據進行推薦,利用社交網絡數據推薦一般可以從以下幾個方面入手:
- 電子郵箱的社交關系信息
- 用戶注冊信息
- 用戶的位置數據,web的IP和手機的GPS
- 討論組和論壇
- 聊天工具中的好友關系列表
- 社交網站中的好友關系數據
基于社交信息的社會化推薦能夠利用好友的關系,解決一部分冷啟動的問題。
情況1.你通過朋友的分享進入的,你朋友在網站中玩的比較久,有推薦數據。由于你之前在該網站沒有任何數據,那么我要想給你推薦物品,就可以根據你朋友的推薦列表來給你推薦你可能會喜歡的東西。
情況2.如果你是剛來到一個網站,你沒有朋友, 我想給你做社會化推薦的話,可以根據你的注冊信息、位置,共同興趣等給你推薦好友,再給你做好友推薦。
(七)、根據時間上下文推薦
上下文包括用戶訪問推薦系統的時間、地點、心情等,根據時間上下文的推薦是希望能夠準確預測用戶在某個特定時刻或某段時刻的興趣。
比如電商產品在賣衣服時,冬天推薦的衣物和夏天推薦的衣物是不同的。如下圖,淘寶網在冬季的推薦:
時間信息對用戶興趣的影響主要表現在以下幾個方面:
- 用戶的興趣是變化的
- 物品是有生命周期的
- 季節效應
考慮到時間信息后,推薦系統也從一個靜態系統變成了一個時變的系統,而用戶行為數據也變成了時間序列。
在給定數據集后,可以通過統計以下信息研究推薦系統的時間特性:
- 數據集每天獨立用戶數的增長情況(平穩階段、增長階段、衰落階段等)
- 系統的物品變化情況
- 用戶訪問情況
推薦系統的實時性
用戶的興趣是不斷變化的,其變化體現在用戶不斷增加的新行為中,一個實時的推薦系統需要能夠實時響應用戶新的行為,讓推薦列表不斷變化,從而滿足用戶不斷變化的興趣。
實時的推薦系統應該滿足:
- 對用戶行為的存取有實時性(在用戶訪問推薦系統時計算)。
- 對推薦算法本身有實時性(考慮到用戶近期行為和長期行為)。
推薦算法的時間多樣性:推薦系統每天推薦結果的變化程度,有的推薦系統中用戶經常能看到不同的推薦結果。
時間上下文的推薦算法
- 推薦最新最熱門的物品
- 時間上下文的ItemCF算法,利用用戶行為離線計算物品之間的相似度,根據用戶的歷史行為和物品相似度矩陣,給用戶做在線個性化推薦。
物品的相似度計算:用戶在像個很短的時間內喜歡的物品有更高的相似度。
在線推薦:用戶近期行為相比用戶很久之前的行為,更能體現用戶現在的興趣。
3.時間上文的UserCF算法
用戶的興趣相似度計算:如果兩個用戶同時喜歡相同的物品,則興趣相似度越大。
相似興趣用戶的最近行為(推薦與其興趣相似的用戶最近喜歡的物品)。
(八)、基于地理位置的推薦
基于位置的推薦算法(LARS)會根據用戶所在的國家、城市、街道探尋規律進行推薦,找到用戶地點和興趣相關的特征,主要包括興趣本地化和活動本地化。
LARS的基本思想是將數據集根據用戶的位置劃分成很多子集,位置是一個樹狀結構,比如國家、省、市、區、縣的結構,因此數據集也會劃分成一個樹狀結構。
根據用戶的位置,將其分配到一個葉子節點中,而該節點會包括了所有和他同一位置的用戶行為數據集。
LARS會利用該葉子節點上的用戶行為數據,通過ItemCF或UserCF給用戶推薦。
數據集會包括(用戶、用戶位置、物品、物品位置、物品評分)的記錄
比如大眾點評的推薦:
二、推薦系統的冷啟動問題
推薦系統的冷啟動問題指的是,當推薦系統剛部署后,沒有用戶行為時或物品數據時,推薦系統并不能根據用戶行為數據給用戶推薦物品。一般分為用戶冷啟動、物品冷啟動和系統冷啟動。
通常有一些辦法可以緩和冷啟動問題
1.利用用戶注冊信息推薦:即獲取用戶的注冊信息,然后對用戶分類,給用戶推薦他所屬分類中可能感興趣的物品。 將關聯的查詢結果按照一個權重相加,利用的用戶信息越多,就能越精準
地匹配用戶興趣。
2.給用戶一些內容選擇合適的物品啟動用戶的興趣:選擇一些熱門的,有代表性、區分性、多樣性的物品推薦給用戶。
3.利用物品的內容信息推薦給用戶:可以通過人工篩選出一些用戶會感興趣的物品推薦。
三、推薦系統的架構
如果一個系統中將各種用戶行為、特征和任務都考慮進去,系統會非常復雜,難以配置。因此推薦系統需要由多個推薦引擎組成,每個推薦引擎負責一類特真和一種任務,而推薦系統只是
將推薦引擎的結果按照一定權重或優先級合并、排序,然后返回。
這樣的優勢在于:每一個引擎代表了一種推薦策率,可通過對單一的引擎調整來優化推薦系統。
如何設計一個推薦引擎成了推薦系統設計的核心部分。
- 模塊A:從數據庫或緩存中拿到用戶行為數據,通過分析不同行為,生成當前用戶的特征向量。
- 模塊B:將用戶的特征向量通過特征-物品相關舉證轉換為初始推薦物品列表。
- 模塊C:對初始的推薦列表進行過濾,排名等處理,生成最終的推薦結果。
生成用戶特征向量:用戶特征向量一般包括兩種:
- 從用戶的注冊信息提取,包括用戶的人口統計學特征等,在推薦時直接拿到用戶他惡政數據生成特征向量。
- 從用戶行為中計算出來
通過用戶行為生成特征(需要考慮以下幾點):
- 用戶行為的種類(用戶會對物品產生很多種不同的行為)。
- 用戶行為產生的時間(近期行為比較重要)。
- 用戶行為的次數(一般行為次數多的物品權重越高)。
- 物品的熱門程度(用戶對很熱門的物品產生行為可能是在跟風,推薦引擎在生成用戶特征時會加重不熱門物品對應特征的權重)。
特征-物品相關推薦:
在得到用戶的特征向量后,根據離線的相關表得到初始化物品推薦表。
每個特征,在相關表中存儲和它最相關的N個物品的ID。
一個推薦引擎可以在配置文件中配置很多相關表以及他們的權重,推薦系統啟動后會將相關表按配置的權重相加,最終的相關表保存在內存中,給用戶推薦時,已經是加權后的相關表了。
候選物品結合(保證推薦結果只包含候選物品集合中的物品):
一般應用于產品需求,希望將某些物品推薦給用戶。
過濾模塊:
過濾掉不符合要求的物品,一般有以下幾種
- 用戶已經產生過行為的物品(推薦的目的是幫助用戶發現物品,因此沒必要給用戶推薦他已經知道過的物品,保證推薦結果的新穎性)。
- 候選物品以外的物品,用戶自己的選擇等。
- 質量差、評價低的物品。
排名模塊:
- 新穎性排名(對某些舊的但仍然熱門的物品降權處理)。
- 多樣性
- 按照某物品內容屬性分為幾類,然后在每個類中都選擇該類中排名最高的物品組合最終的推薦列表
- 控制不同的推薦結果的推薦理由出現的次數,推薦理由一般是產生推薦結果的重要特征,提高多樣性需要讓推薦結果盡量來自不同的特征,有不同的推薦理由。
3.時間多樣性
- 實時推薦
- 記錄用戶之前的行為數據,在給用戶新的推薦結果是降權
4.用戶反饋(用戶對推薦結果點擊情況的反饋)。
四、推薦系統的度量
個性化推薦的核心還是推薦算法,依賴用戶的行為數據,卻決于定義的環境維度,不同維度下的算法的表現能力會不一樣。
什么是好的推薦系統:
- 滿足用戶的需求,推薦給用戶的是用戶會感興趣的內容。
- 滿足所有的內容都被推薦給感興趣的用戶(衡量的指標為覆蓋率)。
- 推薦系統本身搜集到高質量的用戶反饋,能夠對之進行不斷的完善。
好的推薦系統不僅能預測用戶的行為,能擴展用戶的視野,幫助用戶發現那些他們可能會買,但卻不那么容易發現的東西,而非是本來就想要買的東西。
推薦系統的評價指標:
- 用戶滿意度
- 預測精準度
- 覆蓋率
- 多樣性
- 新穎性(不犧牲精度的情況下提高多樣性,即新東西)
- 驚喜度(推薦結果和用戶歷史興趣不相似,但卻讓用戶滿意)
- 信任度
- 實時性
- 健壯性(反作弊處理邏輯)
- 商業目標
推薦算法的考核指標:
- 準確率
- 召回率
- 流行度
- 覆蓋率
推薦系統的測試方法:
- 離線測試:通過用戶行為數據形成數據集
- 用戶調查
- 在線實驗:A/B測試(切分流量,將用戶分成不同的層控制觀察)
#專欄作家#
Placeless,人人都是產品經理專欄作家。前攜程交互設計師,專注于交互設計。
本文原創發布于人人都是產品經理。未經許可,禁止轉載。
題圖來自unsplash,基于CC0協議
寫得挺不錯
前幾個好多都是重復的吧,比如基于物品的協同過濾與基于用戶的協同過濾,其實本質都是通過同類用戶推薦可能感興趣的商品
感謝分享,有個小問題,這些評價指標要如何實現呢,能展開分享下么
很好的總結,怎樣聯系呢?
這個W(ab)=|{a,b,c}∩{a,c}|/√|{a,b,c}||{a,c}|=1/√6 ,不是等于2/√6 嗎 ?
你忘記分母了
還有分母中要約掉一個的
哦哦,感謝
好像應該是有2的,用向量計算余弦相似性是不需要除2的。A為{a,b,c},設A坐標(1,1,1);B為(a,c},設B坐標為(1,0,1),余弦相似性=(1*1+1*0+1*1)/(|A|*|B|)=2/√6。不知道說的對不對,糾結了好久還是鼓起勇氣回復了一下
用j系數算興趣相識度=2/3, 跟2/√6 更接近一些,如果沒有2,感覺兩個結果差距太大了。目前還在學習中,收益匪淺!謝謝大大的分享
在嗎?
good?。。。?/p>
能留個聯系方式嗎~ ??
???