1. 程式人生 > >推薦系統實踐(一) -- 推薦系統基礎

推薦系統實踐(一) -- 推薦系統基礎


1、什麼是推薦系統

在這個時代,無論是資訊消費者還是資訊生產者都遇到了很大的挑戰:作為資訊消費者,如何從大量資訊中找到自己感興趣的資訊是一件非常困難的事情;作為資訊生產者, 如何讓自己生產的資訊脫穎而出,受到廣大使用者的關注,也是一件非常困難的事情。推薦系統就是解決這一矛盾的重要工具。推薦系統的任務就是聯絡使用者和資訊,一方面幫助使用者發現對自己有價值的資訊,另一方面讓資訊能夠展現在對它感興趣的使用者面前,從而實現資訊消費者和資訊 生產者的雙贏。和搜尋引擎不同的是,推薦系統不需要使用者提供明確的需求,而是通過分析使用者的歷史行為給用 戶的興趣建模,從而主動給使用者推薦能夠滿足他們興趣和需求的資訊。

個性化推薦的成功應用需要兩個條件。第一是存在資訊過載,因為如果使用者可以很容易地從所有物品中找到喜歡的物品,就不需要個性化推薦了。第二是使用者大部分時候沒有特別明確的需求,因為使用者如果有明確的需求,可以直接通過搜尋引擎找到感興趣的物品。

一個完整的推薦系統一般存在3個參與方:使用者、物品提供者和提供推薦系統的網站。以圖書推薦為例, 首先,推薦系統需要滿足使用者的需求,給使用者推薦那些令他們感興趣的圖書。其次,推薦系統要讓各出版社的書都能夠被推薦給對其感興趣的使用者,而不是隻推薦幾個大型出版社的書。最後, 好的推薦系統設計,能夠讓推薦系統本身收集到高質量的使用者反饋,不斷完善推薦的質量,增加 使用者和網站的互動,提高網站的收入。因此在評測一個推薦演算法時,需要同時考慮三方的利益, 一個好的推薦系統是能夠令三方共贏的系統。


好的推薦系統不僅僅能夠準確預測使用者的行為,而且能夠擴充套件使用者的視野,幫助使用者發現那些他們可能會感興趣,但卻不那麼容易發現的東西。同時,推薦系統還要能夠幫助商家將 那些被埋沒在長尾中的好商品介紹給可能會對它們感興趣的使用者。

2、推薦系統實驗方法

推薦系統中,主要有3種評測推薦效果的實驗方法,即離線實驗(offline experiment)、使用者調查(user study)和線上實驗(online experiment)。

2.1 離線實驗

離線實驗的方法一般由如下幾個步驟構成:
(1) 通過日誌系統獲得使用者行為資料,並按照一定格式生成一個標準的資料集;
(2) 將資料集按照一定的規則分成訓練集和測試集;
(3) 在訓練集上訓練使用者興趣模型,在測試集上進行預測;
(4) 通過事先定義的離線指標評測演算法在測試集上的預測結果。

從上面的步驟可以看到,推薦系統的離線實驗都是在資料集上完成的,也就是說它不需要一個實際的系統來供它實驗,而只要有一個從實際系統日誌中提取的資料集即可。這種實驗方法的 好處是不需要真實使用者參與,可以直接快速地計算出來,從而方便、快速地測試大量不同的演算法。它的主要缺點是無法獲得很多商業上關注的指標,如點選率、轉化率等,而找到和商業指標非常相關的離線指標也是很困難的事情。

2.2 使用者調查

使用者調查是推薦系統評測的一個重要工具,很多離線時沒有辦法評測的與使用者主觀感受有關的指標都可以通過使用者調查獲得。在使用者調查中,有一些需要注意的事項:
(1)成本控制:使用者調查成本很高,需要使用者花大量 時間完成一個個任務,並回答相關的問題。有些時候,還需要花錢僱用測試使用者。因此,大多 數情況下很難進行大規模的使用者調查,而對於參加人數較少的使用者調查,得出的很多結論往往 沒有統計意義。因此,我們在做使用者調查時,一方面要控制成本,另一方面又要保證結果的統計.
意義。
(2)雙盲實驗:即不要讓實驗人員和使用者事先知道測試的目標,以免使用者的回答和實驗人員的測試受主觀成分的影響。
(3)相同分佈:測試使用者需要儘量保證測試使用者的分佈和真實使用者的分佈相同,比如男女各半,以及年齡、活躍度的分佈都和真實使用者分佈儘量相同。

使用者調查的優缺點也很明顯。它的優點是可以獲得很多體現使用者主觀感受的指標,相對線上實驗風險很低,出現錯誤後很容易彌補。缺點是招募測試使用者代價較大,很難組織大規模的測試 使用者,因此會使測試結果的統計意義不足。此外,在很多時候設計雙盲實驗非常困難,而且使用者 在測試環境下的行為和真實環境下的行為可能有所不同,因而在測試環境下收集的測試指標可能在真實環境下無法重現。

2.3 線上實驗

在完成離線實驗和必要的使用者調查後,可以將推薦系統上線做AB測試,將它和舊的演算法進行比較。
AB測試是一種很常用的線上評測演算法的實驗方法。它通過一定的規則將使用者隨機分成幾組,並對不同組使用者採取不同的演算法,然後通過統計不同組使用者的各種不同的評測指標比較不同演算法的好壞。
AB測試的優點是可以公平獲得不同演算法實際線上時的效能指標,包括商業上關注的指標。 AB測試的缺點主要是週期比較長,必須進行長期的實驗才能得到可靠的結果。因此一般不會用 AB測試測試所有的演算法,而只是用它測試那些在離線實驗和使用者調查中表現很好的演算法。其次, 一個大型網站的AB測試系統的設計也是一項複雜的工程。

一般來說,一個新的推薦演算法最終上線,需要完成上面所說的3個實驗。
1)首先,需要通過離線實驗證明它在很多離線指標上優於現有的演算法。
2)然後,需要通過使用者調查確定它的使用者滿意度不低於現有的演算法。
3)最後,通過線上的AB測試確定它在我們關心的指標上。

3、評測指標

本節將介紹各種推薦系統的評測指標。這些評測指標可用於評價推薦系統各方面的效能。這 些指標有些可以定量計算,有些只能定性描述,有些可以通過離線實驗計算,有些需要通過使用者 調查獲得,還有些只能在線評測。

3.1 使用者滿意度

使用者作為推薦系統的重要參與者,其滿意度是評測推薦系統的最重要指標。但是,使用者滿意度沒有辦法離線計算,只能通過使用者調查或者線上實驗獲得。
在線上系統中,使用者滿意度主要通過一些對使用者行為的統計得到。比如在電子商務網站中,使用者如果購買了推薦的商品,就表示他們在一定程度上滿意。因此,我們可以利用購買率度量用 戶的滿意度。此外,有些網站會通過設計一些使用者反饋介面收集使用者滿意度。比如在視訊網站中,都有對推薦結果滿意或者不滿意的反饋按鈕,通過統計兩種按鈕的單擊情況就可以度量系統的使用者滿意度。更一般的情況下,我們可以用點選率、使用者停留時間和轉化率等指標度量使用者的滿意度。

3.2 預測準確度

預測準確度度量一個推薦系統或者推薦演算法預測使用者行為的能力。這個指標是最重要的推薦系統離線評測指標。
在計算該指標時需要有一個離線的資料集,該資料集包含使用者的歷史行為記錄。然後,將該資料集通過時間分成訓練集和測試集。最後,通過在訓練集上建立使用者的行為和興趣模型預測使用者在測試集上的行為,並計算預測行為和測試集上實際行為的重合度作為預測準確度。
預測準確度指標有分為以下幾種:

評分預測
預測使用者對物品評分的行為稱為評分預測,在評分預測中,預測準確度一般通過均方根誤差RMSE 和 平均絕對誤差MAE計算,對於測試集中的一個使用者u和物品i,令rui是使用者u對物品i的實際評分,而rˆui 是推薦演算法給出的預測評分,那麼RMSE的定義為:

MAE採用絕對值計算預測誤差,它的定義為:

topN推薦
網站在提供推薦服務時,一般是給使用者一個個性化的推薦列表,這種推薦叫做TopN推薦。TopN推薦的預測準確率一般通過準確率(precision)/召回率(recall)度量。
令R(u)是根據使用者在訓練集上的行為給使用者作出的推薦列表,而T(u)是使用者在測試集上的行為列表。那麼,推薦結果的召回率定義為:

推薦結果的準確率定義為:

3.3 覆蓋率

覆蓋率(coverage)描述一個推薦系統對物品長尾的發掘能力。覆蓋率有不同的定義方法,最簡單的定義為推薦系統能夠推薦出來的物品佔總物品集合的比例。假設系統的使用者集合為U,推薦系統給每個使用者推薦一個長度為N的物品列表R(u)。那麼推薦系統的覆蓋率可以通過下面的公式計算:

此外,從上面的定義也可以看到,熱門排行榜的推薦覆蓋率是很低的,它只會 推薦那些熱門的物品,這些物品在總物品中佔的比例很小。一個好的推薦系統不僅需要有比較高的使用者滿意度,也要有較高的覆蓋率。

但是上面的定義過於粗略。覆蓋率為100%的系統可以有無數的物品流行度分佈。為了更細緻地描述推薦系統發掘長尾的能力,需要統計推薦列表中不同物品出現次數的分佈。如果所有的 物品都出現在推薦列表中,且出現的次數差不多,那麼推薦系統發掘長尾的能力就很好。因此, 可以通過研究物品在推薦列表中出現次數的分佈描述推薦系統挖掘長尾的能力。如果這個分佈比 較平,那麼說明推薦系統的覆蓋率較高,而如果這個分佈較陡峭,說明推薦系統的覆蓋率較低。 在資訊理論和經濟學中有兩個著名的指標可以用來定義覆蓋率。第一個是資訊熵:

第二個指標是基尼係數(Gini Index):

3.4 多樣性

為了滿足使用者廣泛的興趣,推薦列表需要能夠覆蓋使用者不同的興 趣領域,即推薦結果需要具有多樣性。多樣性推薦列表的好處用一句俗話表述就是“不在一棵樹 上吊死”。儘管使用者的興趣在較長的時間跨度中是一樣的,但具體到使用者訪問推薦系統的某一刻, 其興趣往往是單一的,那麼如果推薦列表只能覆蓋使用者的一個興趣點,而這個興趣點不是使用者這 個時刻的興趣點,推薦列表就不會讓使用者滿意。反之,如果推薦列表比較多樣,覆蓋了使用者絕大 多數的興趣點,那麼就會增加使用者找到感興趣物品的概率。因此給使用者的推薦列表也需要滿足使用者廣泛的興趣,即具有多樣性。
多樣性描述了推薦列表中物品兩兩之間的不相似性。因此,多樣性和相似性是對應的。假設s(i, j) ∈[0,1] 定義了物品i和j之間的相似度,那麼使用者u的推薦列表R(u)的多樣性定義如下:

而推薦系統的整體多樣性可以定義為所有使用者推薦列表多樣性的平均值:

3.5 新穎性

新穎的推薦是指給使用者推薦那些他們以前沒有聽說過的物品。在一個網站中實現新穎性的最簡單辦法是,把那些使用者之前在網站中對其有過行為的物品從推薦列表中過濾掉。比如在一個視 頻網站中,新穎的推薦不應該給使用者推薦那些他們已經看過、打過分或者瀏覽過的視訊。
評測新穎度的最簡單方法是利用推薦結果的平均流行度,因為越不熱門的物品越 可能讓使用者覺得新穎。因此,如果推薦結果中物品的平均熱門程度較低,那麼推薦結果就可能有比較高的新穎性。

3.6 驚喜度

驚喜度(serendipity)是最近這幾年推薦系統領域最熱門的話題。如果推薦結果和使用者的歷史興趣不相似,但卻讓使用者覺得滿意,那麼就可以說推薦結果的驚喜度很高,而推薦的新穎性僅僅取決於使用者是否聽說過這個推薦結果。提高推薦驚喜度需要提高推薦結果的使用者滿意度,同時降低推薦結果和使用者歷史興趣的相似度。

3.7 信任度

度量推薦系統的信任度只能通過問卷調查的方式,詢問使用者是否信任推薦系統的推薦結果。
提高推薦系統的信任度主要有兩種方法。首先需要增加推薦系統的透明度(transparency), 而增加推薦系統透明度的主要辦法是提供推薦解釋。只有讓使用者瞭解推薦系統的執行機制,讓用 戶認同推薦系統的執行機制,才會提高使用者對推薦系統的信任度。其次是考慮使用者的社交網路 資訊,利用使用者的好友資訊給使用者做推薦,並且用好友進行推薦解釋。這是因為使用者對他們的 好友一般都比較信任,因此如果推薦的商品是好友購買過的,那麼他們對推薦結果就會相對比較信任。

3.8 實時性

在很多網站中,因為物品(新聞、微博等)具有很強的時效性,所以需要在物品還具有時效 性時就將它們推薦給使用者。
推薦系統的實時性包括兩個方面。首先,推薦系統需要實時地更新推薦列表來滿足使用者新的 行為變化。實時性的第二個方面是推薦系統需要能夠將新加入系統的物品推薦給使用者。這主要考驗了推 薦系統處理物品冷啟動的能力。

3.9 健壯性

健壯性(即robust,魯棒 性)指標衡量了一個推薦系統抗擊作弊的能力。演算法健壯性的評測主要利用模擬攻擊。首先,給定一個數據集和一個演算法,可以用這個演算法 給這個資料集中的使用者生成推薦列表。然後,用常用的攻擊方法向資料集中注入噪聲資料,然後 利用演算法在注入噪聲後的資料集上再次給使用者生成推薦列表。最後,通過比較攻擊前後推薦列表 的相似度評測演算法的健壯性。如果攻擊後的推薦列表相對於攻擊前沒有發生大的變化,就說明算 法比較健壯。

3.10 商業目標

很多時候,網站評測推薦系統更加註重網站的商業目標是否達成,而商業目標和網站的盈利模式是息息相關的。

3.11 總結

本節提到了很多指標,其中有些指標可以離線計算,有些只能在線獲得。下表對指標的獲得做出了總結。


4、評測維度

上一節介紹了很多評測指標,但是在評測系統中還需要考慮評測維度,比如一個推薦演算法, 雖然整體效能不好,但可能在某種情況下效能比較好,而增加評測維度的目的就是知道一個演算法 在什麼情況下效能最好。這樣可以為融合不同推薦演算法取得最好的整體效能帶來參考。
一般來說,評測維度分為如下3種。
1)使用者維度:主要包括使用者的人口統計學資訊、活躍度以及是不是新使用者等。
2)物品維度:包括物品的屬性資訊、流行度、平均分以及是不是新加入的物品等。
3)時間維度:包括季節,是工作日還是週末,是白天還是晚上等。
如果能夠在推薦系統評測報告中包含不同維度下的系統評測指標,就能幫我們全面地瞭解推 薦系統性能,找到一個看上去比較弱的演算法的優勢,發現一個看上去比較強的演算法的缺點。