協同過濾推薦算法


一、推薦算法
當你在電商網站購物時,天貓會彈出“和你買了同樣物品的人還買了XXX”的信息;當你在SNS社交網站閑逛時,也會看到“你可能認識XXX“的信息;當你在微博添加關注人時,也會看到“你可能對XXX也感興趣”等等。所有這一切,都是背后的推薦算法運作的結果。
推薦算法,不是某一個也不是某一類算法,凡是能實現推薦功能的算法(比如關聯算法、分類算法、聚類算法),都可稱之為推薦算法。 推薦功能就是為用戶(User)推薦商品(Item)。
 
依據不同的角度,推薦大致分為以下幾種:
1)基於內容的推薦:這一類一般依賴於自然語言處理NLP的一些知識,通過挖掘文本的TF-IDF特征向量,來得到用戶的偏好,進而做推薦。這類推薦算法可以找到用戶獨特的小眾喜好,而且還有較好的解釋性。
2)基於流行度的推薦:常見的比如基於最多用戶點擊、最多用戶瀏覽等,屬於大眾型的推薦方法,在目前的大數據時代並不主流。
3)基於人口統計信息的推薦:這一類是最簡單的,它只是簡單的根據用戶的基本信息發現用戶的相關程度,然后進行推薦,目前在大型系統中已經較少使用。
4)混合推薦:這個類似機器學習中的集成學習,博采眾長,通過多個推薦算法的結合得到一個更好的。
5)協同過濾推薦:目前最主流的,花樣繁多,在工業界已經有了很廣泛的應用。它的優點是不需要太多特定領域的知識,可以通過基於統計的機器學習算法得到較好的推薦效果。工程上容易實現,方便應用到產品中。
 
sklearn沒有單獨的推薦算法模塊。如果用到分類、聚類等算法可以用對應模塊。也可以自己寫個封裝起來。
 
廣義的推薦算法里,協同過濾只是其中一類。但由於市場上使用的大多都是協同過濾,就導致很多文章很多人在談論推薦算法時,其實只是在說協同過濾。可以理解成 狹義的推薦算法,即協同過濾。下文着重介紹協同過濾。
 
 
二、推薦算法之協同過濾
推薦系統需要同時具備速度快和准確度高兩個特點,它必須在用戶打開網站的幾秒鍾內做出反應,同時推薦的東西必須是用戶感興趣的。這兩個條件無論哪一個得不到滿足,推薦系統都是沒有意義的。而協同過濾算法同時滿足了這兩個條件,這就是為什么協同過濾算法是主流的推薦算法的原因。
 
協同過濾(Collaborative Filtering,CF)包括在線的協同和離線的過濾兩部分:在線協同,就是通過在線數據找到用戶可能喜歡的物品;離線過濾,就是過濾掉不值得推薦的數據,比如評分低的數據、用戶已經購買的數據。
協同過濾的模型一般為m個物品*n個用戶的數據,只有部分用戶和部分物品之間是有評分數據的,其它部分評分是空白。要用已有數據來預測那些空白評分,找到最高評分的物品推薦給用戶。
 
一般來說,協同過濾推薦分為三種類型:
1.基於用戶(user-based)的協同過濾:用戶A與用戶B相似,推薦用戶A喜歡的物品給用戶B。
2.基於物品(item-based)的協同過濾:物品X與物品Y相似,用戶喜歡物品X,則推薦物品Y。
3.基於模型(model based)的協同過濾:基於樣本信息構造推薦模型,根據實時的用戶喜好信息預測推薦。
基於模型會用到像分類、聚類等機器學習以及深度學習的相關算法。不過我更願意將它看成是基於用戶或基於物品的實現策略,比如用關聯算法找到相似物品,用分類算法判定用戶喜歡還是不喜歡,最終還是回歸到基於用戶和基於物品的協同過濾上。參考 https://www.cnblogs.com/chenliyang/p/6548306.html
 
總結,協同過濾的核心思想可以簡單概括為如下兩道邏輯:
已知用戶A喜歡的品牌用戶B都喜歡,又知用戶A喜歡品牌X,推理可知用戶B也喜歡品牌X;
已知喜歡品牌X的用戶都喜歡品牌Y,又知用戶A喜歡品牌X,推理可知用戶A也喜歡品牌Y。 
 
這兩種邏輯的核心都是計算相似度:
找用戶間的相似度,物品不變,找用戶對某些物品的評分;
找物品間的相似度,用戶不變,找多個用戶對物品的評分。
衡量相似度的常用指標有:皮爾遜相關系數、余弦相似度。
 
皮爾遜相關系數的計算公式:
協同過濾推薦算法
余弦相似度的計算公式:
協同過濾推薦算法
i表示商品;Iu表示用戶u評價的項集;Iv表示用戶v評價的項集;
ru,i表示用戶u對商品i的評分;rv,i表示用戶v對商品i的評分;橫線頭表示平均評分。
 
 
三、協同過濾之示例

舉例1,假設在音樂推薦系統中,一共有4個用戶,7個音樂,每個用戶對每個音樂的評價矩陣如下:

 

All About That Bass

Shake It Off

Black Widow

Habits

Bang Bang

Don't Tell 'Em

Animals

Alice

4

 

 

5

1

 

 

Bob

5

5

4

4

2

 

 

John

2

 

 

1

5

4

 

David

 

3

 

 

 

 

3

注:總分為5分,空項表示該用戶沒有聽過該音樂因此尚且沒有做出過評價。

如何為用戶Alice推薦一些她可能喜歡的音樂:表中Alice對All About That Bass和Habits這兩首歌有着極高的評價(分別為4分和5分),但是不喜歡Bang Bang;通過觀察不難發現Bob對All About That Bass和Habits也表示相當的喜歡(分別為5分和4分),但對Bang Bang評價較低(僅為2分)。因此Alice和Bob的品味是較為接近的,Bob就是Alice的最近鄰用戶。可以將Bob評分較高而Alice還沒聽過的音樂推薦給她。

 

舉例2,五個用戶對服裝品牌的評分,其中用戶D對達芙妮的評分是一個缺失值。要預測用戶E對森馬的評分。

  真維斯 伊莎貝爾 阿迪達斯 達芙妮 森馬
A 4 5 4 5 4
B 3 4 4 2 3
C 2 3 3 4 3
D 3 5 4 - 3
E 4 3 3 4
使用余弦相似度作為用戶之間或產品之間的相似度衡量指標。
1.基於用戶的協同過濾算法:
用戶D對於達芙妮的缺失值,使用平均值來代替,即:
協同過濾推薦算法
計算得到用戶A、B、C、D與用戶E的余弦相似度分別是:
協同過濾推薦算法
協同過濾推薦算法
協同過濾推薦算法
協同過濾推薦算法
加權求用戶A、B、C、D對森馬評分的平均值,即用戶E對森馬的評分:
協同過濾推薦算法
2.基於物品的協同過濾算法:
用戶D對於達芙妮的缺失值,使用平均值來代替,即:
協同過濾推薦算法
計算得到品牌真維斯、伊莎貝爾、阿迪達斯、達芙妮與森馬的余弦相似度分別是:
(4*4+3*3+2*3+3*3)/((4^2+3^2+2^2+3^2)^0.5*(4^2+3^2+3^2+3^2)^0.5)=0.99
(5*4+4*3+3*3+5*3)/((5^2+4^2+3^2+5^2)^0.5*(4^2+3^2+3^2+3^2)^0.5)=0.98
(4*4+4*3+3*3+4*3)/((4^2+4^2+3^2+4^2)^0.5*(4^2+3^2+3^2+3^2)^0.5)=0.98
(5*4+2*3+4*3+3.75*3)/((5^2+2^2+4^2+3.75^2)^0.5*(4^2+3^2+3^2+3^2)^0.5)=0.97
加權求用戶E對真維斯、伊莎貝爾、阿迪達斯、達芙妮評分的平均值,即用戶E對森馬的評分:
協同過濾推薦算法
 
 
四、注意協同過濾的缺點
>>相關度計算公式難以選擇:對同一元素基於用戶計算余弦相關度和基於產品計算余弦相關度所得到的評分可能會有較大的差異。因此需要根據具體情景來選擇相關度的計算公式。除了考慮公式是否對於精確度要求較高外,還要考慮系統是否穩健,即對異常值是否不敏感。
>>冷啟動問題:它一般不會推薦新產品。這對於具有時效性的產品來說非常要命,比如電影院會希望在新電影上線時趕快推薦給用戶,如果等到累積夠數據后才開始推薦,那也就沒有推薦的意義了。
>>算法模式固有問題:會忽略用戶購買行為之間的關聯性,從而犯一些很蠢的錯誤,比如你買了一個錘子后,接下來的兩個月它都會堅持不懈的給你推薦錘子。
>>環境識別問題:一個好的推薦系統想要奏效,還必須將用戶所處的情景考慮進去。比如一個用戶總是在晚上九點到十點之間瀏覽新聞,那在下午五點時為他推薦新聞顯然就很傻了,用戶是不會看的。再比如用戶瀏覽上班地點或住所地點附近的餐廳時,做推薦的意義不太大,因為用戶可能本來就非常了解這附近的餐廳,而當用戶突然瀏覽起較遠地方的餐廳時,此時狂推某餐廳則很有可能奏效。
 
這些都對數據分析師的分析能力提出了挑戰,分析師必須能夠根據用戶的不同意圖為用戶推薦不同的產品,這需要在一個系統中集合不同的算法,同時還要求數據分析師具有豐富的業務經驗,了解業務中的邏輯性。
 
 
 
評分矩陣有多個空白數據如何處理、皮爾遜相關系數應用示例、其他相似度計算公式、基於用戶和基於物品對性能的影響,都有內容說明可以參考。注意不要強記,不一定百分准確。可以結合項目應用進行驗證。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM