1. 程式人生 > >推薦系統-協同過濾原理與實現

推薦系統-協同過濾原理與實現

一、基本介紹


1. 推薦系統任務

推薦系統的任務就是聯絡使用者和資訊一方面幫助使用者發現對自己有價值的資訊,而另一方面讓資訊能夠展現在對它感興趣的使用者面前從而實現資訊消費者和資訊生產者的雙贏。

2. 與搜尋引擎比較

相同點:幫助使用者快速發現有用資訊的工具

不同點:和搜尋引擎不同的是推薦系統不需要使用者提供明確的需求而是通過分析使用者的歷史行為來給使用者的興趣建模從而主動給使用者推薦出能夠滿足他們興趣和需求的資訊。

3. 長尾理論

長尾講述的是這樣一個故事:以前被認為是邊緣化的、地下的、獨立(藝人?)的產品現在共同佔據了一塊市場份額,足以可與最暢銷的熱賣品匹敵。

wiki連結:

https://wiki.mbalib.com/wiki/%E9%95%BF%E5%B0%BE%E7%90%86%E8%AE%BA

長尾頭部的商品往往代表了絕大多數使用者的需求而長尾中的商品往往代表了一小部分使用者的個性化需求。因此如果要通過發掘長尾來提高銷售額就必須充分研究使用者的個性化興趣。而這正是個性化推薦系統主要解決的問題。
推薦系統通過發掘使用者的行為找到使用者的個性化需求從而將長尾中的商品準確地推薦給需要它們的使用者幫助使用者發現那些他們感興趣但很難發現的商品。

4. 推薦系統應用

· 電子商務

· 電影和視訊網站

· 個性化音樂網路電臺

· 社交網站

· 個性化閱讀

· 個性化郵件

· 個性化廣告

5. 推薦系統架構

架構

二、推薦系統評測


推薦系統評測即評測一個推薦系統是否好用。好的推薦系統不僅僅能夠準確預測使用者的行為,而且能夠擴充套件使用者的視野,幫助使用者發現他們可能會感興趣,但卻不那麼容易發現的東西,從而通過推薦系統增加了收入效益。例如你預測一個使用者將來會買牙刷,預測顯然是準確的,但是由於使用者暫時不需要或者在需要的時候並沒有選擇你的商品,這樣的話就沒有為你增加收入,因此這就不能算得上一次好的推薦。

一個完整的推薦系統一般存在3個參與方:使用者、內容提供者、業務前端(Android、ios、web)

評測

1. 推薦系統實驗方法

a、離線實驗
離線實驗利用離線資料訓練並測試推薦模型效果,好處是不需要使用者真實參與,可以快速地測試大量演算法,但同時也會忽略線上系統帶來的因素。
b、使用者調查
對一些真實使用者做一些有關推薦系統的測試調查,根據使用者的反映獲取推薦系統的效能指標。它是推薦系統評測的一個重要工具,可以獲取離線實驗不能得到的使用者真實體驗,但是其成本較高,需要較多的人力時間來完成。
c、線上實驗
在推薦系統正式上線前,可以對系統做典型的AB測試,它通過一定的規則將使用者隨機分成幾組,並對不同組使用者採用不同演算法,然後統計不同組使用者的評測指標,進而分析推薦系統的效能。其優點是可以公平獲取不同演算法的線上效能指標,缺點是週期較長,需要長時間的實驗才能得到可靠的結構。

2. 評測指標——使用者滿意度

使用者滿意度是評測推薦系統最重要的指標,只能通過線上實驗獲得。一般通過對使用者行為的統計獲得,比如使用者點選率、推薦購買率、停留時間等;也可以通過收集使用者反饋獲得,如讓使用者評價推薦的物品是否令人滿意。

3. 評測指標——預測準確度

預測準確度是推薦系統最重要的離線評測指標。通過離線訓練資料訓練出使用者的行為和興趣模型,並預測使用者的行為,計算預測行為與測試集上的實際行為的重合度作為預測準確度。

a) 評分預測

很多提供推薦服務的網站有一個讓使用者給物品打分的功能,當知道了使用者對物品的評分,就可以從中習得使用者的興趣模型,並預測該使用者在將來看到一個他沒有評分過的物品時,會給物品評多少分。

評分預測的準確度一般通過均方根誤差(RMSE)和平均絕對誤差(MAE)計算。

b) TopN 推薦

TopN推薦的準確率一般通過: 準確率(precision)/召回率(recall)度量

令R(u)是根據使用者在訓練集上的行為給使用者做出的推薦列表,T(u)是使用者在測試集上的行為列表,那麼推薦結果的

召回率定為:

recall

準確率為:

precession

這裡用更加形象的方法表示,將資料分成四個部分 A,B,C,D
R(u) = A + B; 

T(u) = A + C;

Recall =  A / (A + C)

Precession = A / (A + B)

未命名檔案

4.評測指標——覆蓋率

覆蓋率描述了推薦系統對物品長尾的發掘能力,高的覆蓋率表示推薦系統可以推薦一些長尾部分的物品,這是物品提供商比較關心的。對覆蓋率一個簡單定義為推薦系統能夠推薦出來的物品佔總物品I的比例,假設系統使用者集合為U,為每個使用者u推薦物品為R(u),那麼推薦系統覆蓋率可以表示為:

5.評測指標——多樣性

使用者的興趣是廣泛的,因此推薦系統推薦給使用者的物品也應該是多樣的。比如,使用者愛看的書不僅有歷史文學書,也可能有心理專業書,且看的比例約為7:3,所以在推薦的時候,也應該考慮為使用者推薦這兩類書籍,且比例也約為7:3。

6.評測指標——新穎性

新穎性即推薦給使用者他們之前不知道的物品,將使用者有過行為的物品從推薦表中剔除掉。評測新穎性的最簡單方法是利用推薦結果的平均流行度,即推薦的物品的平均熱門程度越低,其新穎性越高。

7.其他

 

三、協同過濾介紹


同過濾就是指使用者可以齊心協力,通過不斷地和網站互動,使自己的推薦列表能夠不斷過濾掉自己不感興趣的物品,從而越來越滿足自己的需求。

顯性反饋:使用者明確表示對物品喜好的行為。這要方式是評分和喜歡/不喜歡。

隱形反饋:不能明確反應使用者喜好的行為。(購買日誌、閱讀日誌、瀏覽日誌)

. 基於使用者的協同過濾演算法(UserCF


演算法核心:當一個使用者A需要個性化推薦時,可以先找到他有相似興趣的其他使用者,然後把那些使用者喜歡的、而使用者A沒聽過的物品推薦給A。

a) 找到和目標使用者興趣相似的使用者集合

b) 找到這個集合中的使用者喜歡的,且目標使用者沒有聽說過的物品推薦給目標使用者。

步驟(a)的關鍵就是計算兩個使用者的興趣相似度。這裡,協同過濾演算法主要利用行為的相似度計算興趣的相似度。給定使用者u和使用者v,令N(u)表示使用者u曾經有過正反饋的物品集合,令N(v)為使用者v曾經有過正反饋的物品集合。那麼,我們可以通過如下的Jaccard公式簡單地計算u和v的興趣相似度或者通過餘弦公式:

             jaccard                                                     餘項公式:

wuv            wuv2

這個一個行為記錄 我們可以根據餘弦公式計算如下

使用者行為記錄     使用者行為記錄2

上述演算法很簡單但是計算量較大,因為需要所有使用者之前的複雜度  n(n-1)/2。 下面這種計算使用者相似度演算法通過空間換時間。

首先建立物品到使用者的倒排表,然後統計每兩個使用者的公共物品數量(如下圖所示)。

物品使用者倒排表

計算u對物品i的感興趣程式:

PUI

得到使用者之間的興趣相似度後,UserCF演算法會給使用者推薦和他興趣最相似的K個使用者喜歡的物品。上面右邊公式度量了UserCF演算法中使用者u對物品i的感興趣程度:其中,S(u, K)包含和使用者u興趣最接近的K個使用者,N(i)是對物品i有過行為的使用者集合,Wuv是使用者u和使用者v的興趣相似度,Rvi代表使用者v對物品i的興趣,因為使用的是單一行為的隱反饋資料,所以所有的Rvi=1。

上述推薦演算法缺陷:

如果兩個使用者都曾經買過《新華字典》,這絲毫不能說明他們興趣相似,因為絕大多數中國人小時候都買過《新華字典》。但如果兩個使用者都買過《資料探勘導論》,那可以認為他們的興趣比較相似,因為只有研究資料探勘的人才會買這本書。換句話說,兩個使用者對冷門物品採取過同樣的行為更能說明他們興趣的相似度。因此,John S. Breese在論文①中提出瞭如下公式,根據使用者行為計算使用者的興趣相似度:

計算使用者相似度的改進演算法:

wuv

分子中的倒數懲罰了使用者u和使用者v共同興趣列表中熱門物品對他們相似度的影響。N(i)是對物品i有過行為的使用者集合,越熱門,N(i)越大

. 基於物品的協同過濾演算法(ItemCF)


演算法核心思想:給使用者推薦那些和他們之前喜歡的物品相似的物品。

基於物品的協同過濾演算法主要分為兩步:

第一步:計算物品之間的相似度;

wij

其中,|N(i)|是喜歡物品i的使用者數,|N(j)|是喜歡物品j的使用者數,|N(i)&N(j)|是同時喜歡物品i和物品j的使用者數。

從上面的定義看出,在協同過濾中兩個物品產生相似度是因為它們共同被很多使用者喜歡,兩個物品相似度越高,說明這兩個物品共同被很多人喜歡。

這裡面蘊含著一個假設:就是假設每個使用者的興趣都侷限在某幾個方面,因此如果兩個物品屬於一個使用者的興趣列表,那麼這兩個物品可能就屬於有限的幾個領域,而如果兩個物品屬於很多使用者的興趣列表,那麼它們就可能屬於同一個領域,因而有很大的相似度。

(使用者活躍度大的使用者可能喜歡列表中有很多商品,會影響ItemCf演算法計算結果準確性,後面優化演算法會增加一個使用者活躍度分子)

舉例,使用者A對物品a、b、d有過行為,使用者B對物品b、c、e有過行為,等等;

clip_image013

依此構建使用者——物品倒排表:物品a被使用者A、E有過行為,等等;

clip_image015

建立物品相似度矩陣C:

clip_image017

其中,C[i][j]記錄了同時喜歡物品i和物品j的使用者數,這樣我們就可以得到物品之間的相似度矩陣W。

在得到物品之間的相似度後,進入第二步。

第二步:根據物品的相似度和使用者的歷史行為給使用者生成推薦列表;

ItemCF通過如下公式計算使用者u對一個物品j的興趣:

clip_image019

其中,Puj表示使用者u對物品j的興趣,N(u)表示使用者喜歡的物品集合(i是該使用者喜歡的某一個物品),S(i,k)表示和物品i最相似的K個物品集合(j是這個集合中的某一個物品),Wji表示物品j和物品i的相似度,Rui表示使用者u對物品i的興趣(這裡簡化Rui都等於1)。

該公式的含義是:和使用者歷史上感興趣的物品越相似的物品,越有可能在使用者的推薦列表中獲得比較高的排名。

下面是一個書中的例子,幫助理解ItemCF過程:

clip_image021

至此,基礎的ItemCF演算法小結完畢。

下面是書中提到的幾個優化方法:

(1)、使用者活躍度對物品相似度的影響

即認為活躍使用者對物品相似度的貢獻應該小於不活躍的使用者,所以增加一個IUF(Inverse User Frequence)引數來修正物品相似度的計算公式:

clip_image023

用這種相似度計算的ItemCF被記為ItemCF-IUF。

ItemCF-IUF在準確率和召回率兩個指標上和ItemCF相近,但它明顯提高了推薦結果的覆蓋率,降低了推薦結果的流行度,從這個意義上說,ItemCF-IUF確實改進了ItemCF的綜合性能。

(2)、物品相似度的歸一化

Karypis在研究中發現如果將ItemCF的相似度矩陣按最大值歸一化,可以提高推薦的準確度。其研究表明,如果已經得到了物品相似度矩陣w,那麼可用如下公式得到歸一化之後的相似度矩陣w':

clip_image025

最終結果表明,歸一化的好處不僅僅在於增加推薦的準確度,它還可以提高推薦的覆蓋率和多樣性。

用這種相似度計算的ItemCF被記為ItemCF-Norm。

參考:

https://www.cnblogs.com/qwj-sysu/p/4368874.html

https://blog.csdn.net/u011630575/article/details/78649331

推薦系統實戰