此文是根據《推薦系統實踐》部分整理而來。
PART 1
首先,最核心的問題是
什么才是好的推薦系統?
好的推薦系統需要考慮到三個參與方:
- 用戶方
- 內容提供方
- 產品方
通常我們認知中認為一個好的推薦系統即是提供給用戶想要的內容,但是同樣要考慮到另外兩方,總結起來就是三句話:
- 用戶能夠獲得感興趣的內容
- 內容能推送到對其感興趣的用戶
- 系統能夠獲得良好的反饋和收益
舉例就是推薦一批書給用戶,不僅用戶能夠獲得感興趣的書,每本書同樣需要推送到對其感興趣的用戶手中。如果有一本書非常熱門,大家都感興趣,那么對用戶方是滿足了,但是內容提供方的其他書就沒有獲得推薦,這也是不成功的。
PART 2
其次,第二個問題是
如何評測相關指標的數據?
推薦系統主要分為三個實驗方法
- 離線實驗
- 用戶調查(Q:如何在在線實驗之前進行用戶調查?)
- 在線實驗
1. 離線實驗
離線實驗的方法一般由如下的幾個步驟構成:
(1)通過日志系統獲得用戶行為數據,并按照一定格式生成一個標準的數據集;
(2)將數據集按照一定的規則分成訓練集和測試集;
(3)將訓練集上訓練用戶興趣模型,在測試集上進行預測;
(4)通過事先定義的離線指標評測算法在測試集上的預測結果。
優點:
(1)不需要有對實際系統的控制權;
(2)不需要用戶參與試驗;
(3)速度快、可以測試大量算法。
缺點:
(1)無法計算商業上關心的指標,如點擊率、轉化率;(why?)
(2)離線實驗的指標和商業指標存在差距。
2. 用戶調查
離線實驗有個缺點:離線實驗的指標和商業指標存在差距。
比如用戶滿意度,離線實驗可以計算出預測準確度等量化的指標,但是產品最終的目的是為了讓用戶滿意,而用戶滿意度本身是一個很主觀、無法量化的指標,要測試真實環境下的用戶滿意度(或者其他用戶主觀感受指標),就可以通過用戶調查來獲得。
但是用戶調查有很多點需要注意:
(1)方式多樣。主觀的指標不能僅通過一種方式例如問卷來獲得,得多個維度綜合,所以調查的方式得多樣化;
(2)成本高。用戶需要花時間,如果調查人數少,結論沒有統計意義;如果人數多,成本就會非常高;
(3)設計實驗困難。首先,用戶調查要保證是雙盲實驗,防止用戶的主觀感受受到影響;其次,用戶群選擇需要考慮到分布的隨機,性別、年齡、活躍度都需要考慮到;
(4)結果不穩定。本身主觀的感受隨著環境的變化而變化,用戶因為任何額外因素都有可能改變主觀感受,因此得到的結果本身不穩定,只具有部分參考價值。
3. 在線實驗
在完成離線實驗和必要的用戶調查后,可以將推薦系統上線做AB測試
同樣有幾點需要注意:
(1)AB test 的好處是顯而易見的,可以公平獲得不同算法實際在線時的性能指標;
(2)AB test 和用戶調查一樣,同樣需要考慮到分布的隨機,盡量要將與最終指標有相關性的因素都列出來,總而言之就是切分流量是AB test 的關鍵;
(3)AB test 的一個重要缺點就是實驗周期長,這樣才能得到可靠的結果,因此AB test 不應該測試所有的算法,而是只測試在離線實驗和用戶調查中表現很好的算法;
(4)如果有用戶標簽庫的話,會極大的幫助在線實驗。
4. 總結
一個新的推薦算法最終上線,需要完成上面所說的3個實驗:
(1)首先,需要通過離線實驗證明它在很多離線指標上優于現有的算法;
(2)然后,需要通過用戶調查確定它的用戶滿意度不低于現有的算法;
(3)最后,通過在線等AB測試確定它在我們關心的指標上優于現有的算法。
PART 3
最后的問題是
評測指標有哪些?
1. 用戶滿意度
用戶滿意度可以通過直接和間接的方式得到
(1)直接的方式,主要是通過調查問卷。調查問卷的設計也非常有技巧,本人在《社會心理學》中看過關于用戶調研統計以及調查問卷設計的內容,如果有興趣可以查看,但是就個人而言覺得無論是學習成本還是調查成本都遠遠高出收益,所以不是很支持這種方式。
(2)間接的方式,主要通過對用戶行為的統計。顯性的有,贊/踩、評分等等,看業務產品的設計;隱性的有點擊率、用戶停留時間、轉化率等等。需要注意的是每種用戶行為在設計上是否有偏差,是否正向反饋/負向反饋傾向過于明顯。
2. 預測準確度
預測準確度是指推薦算法預測用戶行為的能力,是最重要的推薦系統離線評測指標。
需要注意的一點是:準確的預測并不代表好的推薦,比如說用戶本來就要買一本書,無論是否推薦都購買,這樣推薦出去就并不是一次好的推薦。
在計算該指標時需要有一個離線的數據集,該數據集包含用戶的歷史行為記錄,然后將該數據集通過時間分成訓練集和測試集,最后通過在訓練集上建立用戶的行為和興趣模型預測用戶在測試集上的行為,并計算預測行為和測試集上實際行為的重合度作為預測準確度。
下面從幾個不同的研究方向介紹預測準確度指標:
-
評分預測
評分預測基于有一個打分的功能,預測該用戶在將來看到一個他沒有評過分的物品時,會給這個物品評多少分。
評分預測的預測準確度一般通過均方根誤差(RMSE)和平均絕對誤差(MAE)計算。對于 測試集中的一個用戶 u 和物品 i,令 rui 是用戶對物品 i 的實際評分,而 r?ui 是推薦算法給出的預測評分,那么RMSE的定義為:
Paste_Image.png
MAE采用絕對值計算預測誤差,它的定義為:
Paste_Image.png
關于RMSE和MAE這兩個指標的優缺點, Netflix認為RMSE加大了對預測不準的用戶物品評分的懲罰(平方項的懲罰),因而對系統的評測更加苛刻。
研究表明,如果評分系統是基于整數建立的(即用戶給的評分都是整數),那么對預測結果取整會降低MAE的誤差。 -
TopN 推薦
網站在提供推薦服務時,一般是給用戶一個個性化的推薦列表,這種推薦叫做TopN推薦。TopN推薦的預測準確率一般通過準確率(precision)/召回率(recall)度量。
令R(u)是根據用戶在訓練集上的行為給用戶作出的推薦列表,而T(u)是用戶在測試集上的行為列表。那么,推薦結果的召回率定義為:
Paste_Image.png
推薦結果的準確率定義為:
Paste_Image.png
有的時候,為了全面評測TopN推薦的準確率和召回率,一般會選取不同的推薦列表長度N, 計算出一組準確率/召回率,然后畫出準確率/召回率曲線(precision/recall curve)。 對比
TopN推薦更符合實際的應用需求,推薦系統的目的是為了給用戶推薦更感興趣的內容,而不是預測他會給多少評分,也許有一部電影用戶看了后會給很高的分數,但是他看的可能性很小。
3. 覆蓋率
覆蓋率描述一個推薦系統對物品長尾的發掘能力。覆蓋率最簡單的定義為:推薦系統能夠推薦出來的物品占總物品集合的比例。 設系統的用戶 為U,推薦系統給每個用戶推薦一個長度為N的物品列表R(u)。那么推薦系統的覆蓋率可通過下面的公式計算:
覆蓋率主要針對內容提供者,其中熱門排行榜的推薦覆蓋率是很低的,所以一個好的推薦系統不僅需要有比較高的用戶滿意度,也要有較高的覆蓋率。對于feed流,個人認為覆蓋率不用太在意,因為本身目的就是為了篩選高質量的內容,對于低質量的內容就應該不展示;相反電商類的物品對覆蓋率的要求會很高。
上述對于覆蓋率的定義過于粗略,因為即使覆蓋率為100%,不同內容的展示程度、流行分布也是不一樣的,為了更細致地描述推薦系統發掘長尾的能力,需要統計推薦列表中不同物品出現次數的分布。如果所有的內容都出現在列表中且出現次數相似,那么這個推薦系統發掘長尾的能力就很好。因此,如果分布比較平緩,那么覆蓋率高;如果分布陡峭,那么覆蓋率低。
在信息論和經濟學中有兩個著名的指標可以用來定義覆蓋率。第一個是信息熵:
這 p(i)是物品i的流行度除以所有物品流行度之和。
第二個指標是基尼系數:
這里,ij是按照物品流行度p()從小到大排序的物品列表中第j個物品。
推薦系統的初衷是消除馬太效應,使得各個物品都能被展示給對它們感興趣的某一類人群,但是很多研究表明現在的主流推薦算法是具有馬太效應的,不過對于內容為主的產品個人認為反而要利用好馬太效應,因為不僅需要將各個內容展示給對應的人群,更好篩選出高質量的內容,其中馬太效應反而能夠有利于篩選內容。
4. 多樣性
用戶的興趣是廣泛的,目前的推薦算法由于注重準確度很容易造成過多的收斂,但是實際上內容推薦也需要多樣性,覆蓋不同的興趣點。
多樣性描述了推薦列表中物品兩兩之間的不相似性。因此,多樣性和相似性是對應的。 假設 s(i, j)∈[0,1] 義了物品i和j之間的相似度, 那么用戶 u 的推薦列表 R(u) 的 多樣性定義如下:
而推薦系統的整體多樣性可以定義為為所有用戶推薦列表多樣性的平均值:
以社區為例,如果某個用戶80%的時間在看他某一領域,另外20%想看看別的新聞或者其他什么的時候。推薦系統推薦10篇文章,應該8篇與他領域相關,另外兩篇屬于其他方面。推薦的時候需要綜合考慮到主要興趣和多樣性。
5. 新穎性
新穎的推薦是指給用戶推薦那些他們以前沒有聽說過的物品。新穎性的實現方法有兩種:
1)把用戶之前在網站中對其有過行為的物品從推薦列表中過濾掉。缺點是用戶可能在別的地方看到過。
2)利用推薦結果的平均流行度,因為越不熱門的物品越可能讓用戶覺得新穎,所以推薦結果中物品的平均熱門程度較低,推薦結果就可能有較高的新穎性。但是得到的結果是比較粗略的,新穎性需要用戶調查得到更準確的結果。
有一個問題是,通過犧牲精度來提高多樣性和新穎性是很容易的,但是在不犧牲精度的情況下提高多樣性和新穎性。
6. 驚喜度
如果推薦結果和用戶的歷史興趣不相似,但卻讓用戶覺得滿意,那么就可以說推薦結果的驚喜度很高;推薦的新穎性僅僅取決于用戶是否聽過這個推薦結果。
目前沒有公認的驚喜度指標定義方式,只有定性的度量方式:首先定義推薦結果和用戶歷史上喜歡的物品的相似度,其次定義用戶對推薦結果的滿意度。
驚喜度總體而言還沒有很成熟。
7. 信任度
對于基于機器學習的自動推薦系統,會存在信任度的問題,如果用戶信任推薦系統,那么就會增加用戶和推薦系統的交互。
度量推薦系統的信任度只能通過問卷調查的方式,詢問用戶是否信任推薦系統的推薦結果。
提高推薦系統的信任度主要有兩種方法:
1)增加推薦系統的透明度,主要辦法是提供推薦解釋。讓用戶了解并認同推薦系統的運行機制,才會提高用戶對推薦系統的信任度。
2)利用社交信息,利用用戶的好友信息給用戶做推薦,并用好友進行推薦解釋。
8. 實時性
在很多網站中,因為物品(新聞、微博等)具有很強的時效性,因此在這些領域中,實時性就是個很重要的指標。
推薦系統的實時性包括兩個方面:
1)推薦系統需要實時地更新推薦列表來滿足用戶新的行為變化。比如當一個用戶購買了iPhone,如果推薦系統能夠立即給他推薦相關配件,那么肯定比第二天再給用戶推薦相關配件更有價值。很多推薦系統都會在離線狀態每天計算一次用戶推薦列表,然后于在線期間將推薦列表展示給用戶,這種設計無法滿足實時性。與用戶行為相應的實時性,可以通過推薦列表的變化速率來評測,如果推薦列表在用戶有行為后變化不大,那么推薦系統的實時性不高。
2)實時性的第二個方面是推薦系統需要能夠將新加入系統的物品推薦給用戶。可以通過標簽的形式來實現。
9. 健壯性
健壯性衡量了一個推薦系統抗擊作弊的能力。作弊有一種方式就是行為注入攻擊,包括刷單、刷評分等用戶行為來作弊。
算法健壯性的評測主要利用模擬攻擊。首先,給定一個數據集和一個算法,可以用這個算法給這個數據集中的用戶生成推薦列表。然后,用常用的攻擊方法向數據集中注入噪聲數據,然后利用算法在注入噪聲后的數據集上再次給用戶生成推薦列表。最后,通過比較攻擊前后推薦列表的相似度評測算法的健壯性。如果攻擊后的推薦列表相對于攻擊前沒有發生大的變化,就說明算法比較健壯。
提高系統的健壯性兩個方法:
1)設計推薦系統時盡量使用代價比較高的用戶行為。
2)使用數據前,進行攻擊檢測,從而對數據進行清理。‘
10. 商業目標
設計推薦系統需要考慮到最終的商業目標,這些目標依據不同公司的需求而定。
PART 4
1. 用一張表總結獲取評測指標的途徑
對于可以離線優化的指標,作者的看法是在給定覆蓋率、多樣性、新穎性等限制條件下,盡量優化預測準確度。用公式表達,離線實驗的優化目標是:
最大化預測準確度,使得 覆蓋度>A & 多樣性>B & 新穎性>C
2. 評測維度
有時候,一個推薦算法可能在某種特定的場景下性能比較好,可以通過不同的維度評測,從而融合不同推薦算法來取得最好的整體性能。
一般來說,評測維度為3種
- 用戶維度。主要包括用戶的人口學統計信息、活躍度以及是否新用戶
- 物品維度。包括物品的屬性信息、流行度、平均分以及是不是新加入的物品等
- 時間維度。包括季節,是工作日還是周末,是白天還是晚上等。