此文是根據(jù)《推薦系統(tǒng)實踐》部分整理而來。
PART 1
首先,最核心的問題是
什么才是好的推薦系統(tǒng)?
好的推薦系統(tǒng)需要考慮到三個參與方:
- 用戶方
- 內(nèi)容提供方
- 產(chǎn)品方
通常我們認知中認為一個好的推薦系統(tǒng)即是提供給用戶想要的內(nèi)容,但是同樣要考慮到另外兩方,總結(jié)起來就是三句話:
- 用戶能夠獲得感興趣的內(nèi)容
- 內(nèi)容能推送到對其感興趣的用戶
- 系統(tǒng)能夠獲得良好的反饋和收益
舉例就是推薦一批書給用戶,不僅用戶能夠獲得感興趣的書,每本書同樣需要推送到對其感興趣的用戶手中。如果有一本書非常熱門,大家都感興趣,那么對用戶方是滿足了,但是內(nèi)容提供方的其他書就沒有獲得推薦,這也是不成功的。
PART 2
其次,第二個問題是
如何評測相關(guān)指標的數(shù)據(jù)?
推薦系統(tǒng)主要分為三個實驗方法
- 離線實驗
- 用戶調(diào)查(Q:如何在在線實驗之前進行用戶調(diào)查?)
- 在線實驗
1. 離線實驗
離線實驗的方法一般由如下的幾個步驟構(gòu)成:
(1)通過日志系統(tǒng)獲得用戶行為數(shù)據(jù),并按照一定格式生成一個標準的數(shù)據(jù)集;
(2)將數(shù)據(jù)集按照一定的規(guī)則分成訓(xùn)練集和測試集;
(3)將訓(xùn)練集上訓(xùn)練用戶興趣模型,在測試集上進行預(yù)測;
(4)通過事先定義的離線指標評測算法在測試集上的預(yù)測結(jié)果。
優(yōu)點:
(1)不需要有對實際系統(tǒng)的控制權(quán);
(2)不需要用戶參與試驗;
(3)速度快、可以測試大量算法。
缺點:
(1)無法計算商業(yè)上關(guān)心的指標,如點擊率、轉(zhuǎn)化率;(why?)
(2)離線實驗的指標和商業(yè)指標存在差距。
2. 用戶調(diào)查
離線實驗有個缺點:離線實驗的指標和商業(yè)指標存在差距。
比如用戶滿意度,離線實驗可以計算出預(yù)測準確度等量化的指標,但是產(chǎn)品最終的目的是為了讓用戶滿意,而用戶滿意度本身是一個很主觀、無法量化的指標,要測試真實環(huán)境下的用戶滿意度(或者其他用戶主觀感受指標),就可以通過用戶調(diào)查來獲得。
但是用戶調(diào)查有很多點需要注意:
(1)方式多樣。主觀的指標不能僅通過一種方式例如問卷來獲得,得多個維度綜合,所以調(diào)查的方式得多樣化;
(2)成本高。用戶需要花時間,如果調(diào)查人數(shù)少,結(jié)論沒有統(tǒng)計意義;如果人數(shù)多,成本就會非常高;
(3)設(shè)計實驗困難。首先,用戶調(diào)查要保證是雙盲實驗,防止用戶的主觀感受受到影響;其次,用戶群選擇需要考慮到分布的隨機,性別、年齡、活躍度都需要考慮到;
(4)結(jié)果不穩(wěn)定。本身主觀的感受隨著環(huán)境的變化而變化,用戶因為任何額外因素都有可能改變主觀感受,因此得到的結(jié)果本身不穩(wěn)定,只具有部分參考價值。
3. 在線實驗
在完成離線實驗和必要的用戶調(diào)查后,可以將推薦系統(tǒng)上線做AB測試
同樣有幾點需要注意:
(1)AB test 的好處是顯而易見的,可以公平獲得不同算法實際在線時的性能指標;
(2)AB test 和用戶調(diào)查一樣,同樣需要考慮到分布的隨機,盡量要將與最終指標有相關(guān)性的因素都列出來,總而言之就是切分流量是AB test 的關(guān)鍵;
(3)AB test 的一個重要缺點就是實驗周期長,這樣才能得到可靠的結(jié)果,因此AB test 不應(yīng)該測試所有的算法,而是只測試在離線實驗和用戶調(diào)查中表現(xiàn)很好的算法;
(4)如果有用戶標簽庫的話,會極大的幫助在線實驗。
4. 總結(jié)
一個新的推薦算法最終上線,需要完成上面所說的3個實驗:
(1)首先,需要通過離線實驗證明它在很多離線指標上優(yōu)于現(xiàn)有的算法;
(2)然后,需要通過用戶調(diào)查確定它的用戶滿意度不低于現(xiàn)有的算法;
(3)最后,通過在線等AB測試確定它在我們關(guān)心的指標上優(yōu)于現(xiàn)有的算法。
PART 3
最后的問題是
評測指標有哪些?
1. 用戶滿意度
用戶滿意度可以通過直接和間接的方式得到
(1)直接的方式,主要是通過調(diào)查問卷。調(diào)查問卷的設(shè)計也非常有技巧,本人在《社會心理學(xué)》中看過關(guān)于用戶調(diào)研統(tǒng)計以及調(diào)查問卷設(shè)計的內(nèi)容,如果有興趣可以查看,但是就個人而言覺得無論是學(xué)習(xí)成本還是調(diào)查成本都遠遠高出收益,所以不是很支持這種方式。
(2)間接的方式,主要通過對用戶行為的統(tǒng)計。顯性的有,贊/踩、評分等等,看業(yè)務(wù)產(chǎn)品的設(shè)計;隱性的有點擊率、用戶停留時間、轉(zhuǎn)化率等等。需要注意的是每種用戶行為在設(shè)計上是否有偏差,是否正向反饋/負向反饋傾向過于明顯。
2. 預(yù)測準確度
預(yù)測準確度是指推薦算法預(yù)測用戶行為的能力,是最重要的推薦系統(tǒng)離線評測指標。
需要注意的一點是:準確的預(yù)測并不代表好的推薦,比如說用戶本來就要買一本書,無論是否推薦都購買,這樣推薦出去就并不是一次好的推薦。
在計算該指標時需要有一個離線的數(shù)據(jù)集,該數(shù)據(jù)集包含用戶的歷史行為記錄,然后將該數(shù)據(jù)集通過時間分成訓(xùn)練集和測試集,最后通過在訓(xùn)練集上建立用戶的行為和興趣模型預(yù)測用戶在測試集上的行為,并計算預(yù)測行為和測試集上實際行為的重合度作為預(yù)測準確度。
下面從幾個不同的研究方向介紹預(yù)測準確度指標:
-
評分預(yù)測
評分預(yù)測基于有一個打分的功能,預(yù)測該用戶在將來看到一個他沒有評過分的物品時,會給這個物品評多少分。
評分預(yù)測的預(yù)測準確度一般通過均方根誤差(RMSE)和平均絕對誤差(MAE)計算。對于 測試集中的一個用戶 u 和物品 i,令 rui 是用戶對物品 i 的實際評分,而 r?ui 是推薦算法給出的預(yù)測評分,那么RMSE的定義為:
Paste_Image.png
MAE采用絕對值計算預(yù)測誤差,它的定義為:
Paste_Image.png
關(guān)于RMSE和MAE這兩個指標的優(yōu)缺點, Netflix認為RMSE加大了對預(yù)測不準的用戶物品評分的懲罰(平方項的懲罰),因而對系統(tǒng)的評測更加苛刻。
研究表明,如果評分系統(tǒng)是基于整數(shù)建立的(即用戶給的評分都是整數(shù)),那么對預(yù)測結(jié)果取整會降低MAE的誤差。 -
TopN 推薦
網(wǎng)站在提供推薦服務(wù)時,一般是給用戶一個個性化的推薦列表,這種推薦叫做TopN推薦。TopN推薦的預(yù)測準確率一般通過準確率(precision)/召回率(recall)度量。
令R(u)是根據(jù)用戶在訓(xùn)練集上的行為給用戶作出的推薦列表,而T(u)是用戶在測試集上的行為列表。那么,推薦結(jié)果的召回率定義為:
Paste_Image.png
推薦結(jié)果的準確率定義為:
Paste_Image.png
有的時候,為了全面評測TopN推薦的準確率和召回率,一般會選取不同的推薦列表長度N, 計算出一組準確率/召回率,然后畫出準確率/召回率曲線(precision/recall curve)。 對比
TopN推薦更符合實際的應(yīng)用需求,推薦系統(tǒng)的目的是為了給用戶推薦更感興趣的內(nèi)容,而不是預(yù)測他會給多少評分,也許有一部電影用戶看了后會給很高的分數(shù),但是他看的可能性很小。
3. 覆蓋率
覆蓋率描述一個推薦系統(tǒng)對物品長尾的發(fā)掘能力。覆蓋率最簡單的定義為:推薦系統(tǒng)能夠推薦出來的物品占總物品集合的比例。 設(shè)系統(tǒng)的用戶 為U,推薦系統(tǒng)給每個用戶推薦一個長度為N的物品列表R(u)。那么推薦系統(tǒng)的覆蓋率可通過下面的公式計算:

覆蓋率主要針對內(nèi)容提供者,其中熱門排行榜的推薦覆蓋率是很低的,所以一個好的推薦系統(tǒng)不僅需要有比較高的用戶滿意度,也要有較高的覆蓋率。對于feed流,個人認為覆蓋率不用太在意,因為本身目的就是為了篩選高質(zhì)量的內(nèi)容,對于低質(zhì)量的內(nèi)容就應(yīng)該不展示;相反電商類的物品對覆蓋率的要求會很高。
上述對于覆蓋率的定義過于粗略,因為即使覆蓋率為100%,不同內(nèi)容的展示程度、流行分布也是不一樣的,為了更細致地描述推薦系統(tǒng)發(fā)掘長尾的能力,需要統(tǒng)計推薦列表中不同物品出現(xiàn)次數(shù)的分布。如果所有的內(nèi)容都出現(xiàn)在列表中且出現(xiàn)次數(shù)相似,那么這個推薦系統(tǒng)發(fā)掘長尾的能力就很好。因此,如果分布比較平緩,那么覆蓋率高;如果分布陡峭,那么覆蓋率低。
在信息論和經(jīng)濟學(xué)中有兩個著名的指標可以用來定義覆蓋率。第一個是信息熵:

這 p(i)是物品i的流行度除以所有物品流行度之和。
第二個指標是基尼系數(shù):

這里,ij是按照物品流行度p()從小到大排序的物品列表中第j個物品。

推薦系統(tǒng)的初衷是消除馬太效應(yīng),使得各個物品都能被展示給對它們感興趣的某一類人群,但是很多研究表明現(xiàn)在的主流推薦算法是具有馬太效應(yīng)的,不過對于內(nèi)容為主的產(chǎn)品個人認為反而要利用好馬太效應(yīng),因為不僅需要將各個內(nèi)容展示給對應(yīng)的人群,更好篩選出高質(zhì)量的內(nèi)容,其中馬太效應(yīng)反而能夠有利于篩選內(nèi)容。
4. 多樣性
用戶的興趣是廣泛的,目前的推薦算法由于注重準確度很容易造成過多的收斂,但是實際上內(nèi)容推薦也需要多樣性,覆蓋不同的興趣點。
多樣性描述了推薦列表中物品兩兩之間的不相似性。因此,多樣性和相似性是對應(yīng)的。 假設(shè) s(i, j)∈[0,1] 義了物品i和j之間的相似度, 那么用戶 u 的推薦列表 R(u) 的 多樣性定義如下:

而推薦系統(tǒng)的整體多樣性可以定義為為所有用戶推薦列表多樣性的平均值:

以社區(qū)為例,如果某個用戶80%的時間在看他某一領(lǐng)域,另外20%想看看別的新聞或者其他什么的時候。推薦系統(tǒng)推薦10篇文章,應(yīng)該8篇與他領(lǐng)域相關(guān),另外兩篇屬于其他方面。推薦的時候需要綜合考慮到主要興趣和多樣性。
5. 新穎性
新穎的推薦是指給用戶推薦那些他們以前沒有聽說過的物品。新穎性的實現(xiàn)方法有兩種:
1)把用戶之前在網(wǎng)站中對其有過行為的物品從推薦列表中過濾掉。缺點是用戶可能在別的地方看到過。
2)利用推薦結(jié)果的平均流行度,因為越不熱門的物品越可能讓用戶覺得新穎,所以推薦結(jié)果中物品的平均熱門程度較低,推薦結(jié)果就可能有較高的新穎性。但是得到的結(jié)果是比較粗略的,新穎性需要用戶調(diào)查得到更準確的結(jié)果。
有一個問題是,通過犧牲精度來提高多樣性和新穎性是很容易的,但是在不犧牲精度的情況下提高多樣性和新穎性。
6. 驚喜度
如果推薦結(jié)果和用戶的歷史興趣不相似,但卻讓用戶覺得滿意,那么就可以說推薦結(jié)果的驚喜度很高;推薦的新穎性僅僅取決于用戶是否聽過這個推薦結(jié)果。
目前沒有公認的驚喜度指標定義方式,只有定性的度量方式:首先定義推薦結(jié)果和用戶歷史上喜歡的物品的相似度,其次定義用戶對推薦結(jié)果的滿意度。
驚喜度總體而言還沒有很成熟。
7. 信任度
對于基于機器學(xué)習(xí)的自動推薦系統(tǒng),會存在信任度的問題,如果用戶信任推薦系統(tǒng),那么就會增加用戶和推薦系統(tǒng)的交互。
度量推薦系統(tǒng)的信任度只能通過問卷調(diào)查的方式,詢問用戶是否信任推薦系統(tǒng)的推薦結(jié)果。
提高推薦系統(tǒng)的信任度主要有兩種方法:
1)增加推薦系統(tǒng)的透明度,主要辦法是提供推薦解釋。讓用戶了解并認同推薦系統(tǒng)的運行機制,才會提高用戶對推薦系統(tǒng)的信任度。
2)利用社交信息,利用用戶的好友信息給用戶做推薦,并用好友進行推薦解釋。
8. 實時性
在很多網(wǎng)站中,因為物品(新聞、微博等)具有很強的時效性,因此在這些領(lǐng)域中,實時性就是個很重要的指標。
推薦系統(tǒng)的實時性包括兩個方面:
1)推薦系統(tǒng)需要實時地更新推薦列表來滿足用戶新的行為變化。比如當一個用戶購買了iPhone,如果推薦系統(tǒng)能夠立即給他推薦相關(guān)配件,那么肯定比第二天再給用戶推薦相關(guān)配件更有價值。很多推薦系統(tǒng)都會在離線狀態(tài)每天計算一次用戶推薦列表,然后于在線期間將推薦列表展示給用戶,這種設(shè)計無法滿足實時性。與用戶行為相應(yīng)的實時性,可以通過推薦列表的變化速率來評測,如果推薦列表在用戶有行為后變化不大,那么推薦系統(tǒng)的實時性不高。
2)實時性的第二個方面是推薦系統(tǒng)需要能夠?qū)⑿录尤胂到y(tǒng)的物品推薦給用戶??梢酝ㄟ^標簽的形式來實現(xiàn)。
9. 健壯性
健壯性衡量了一個推薦系統(tǒng)抗擊作弊的能力。作弊有一種方式就是行為注入攻擊,包括刷單、刷評分等用戶行為來作弊。
算法健壯性的評測主要利用模擬攻擊。首先,給定一個數(shù)據(jù)集和一個算法,可以用這個算法給這個數(shù)據(jù)集中的用戶生成推薦列表。然后,用常用的攻擊方法向數(shù)據(jù)集中注入噪聲數(shù)據(jù),然后利用算法在注入噪聲后的數(shù)據(jù)集上再次給用戶生成推薦列表。最后,通過比較攻擊前后推薦列表的相似度評測算法的健壯性。如果攻擊后的推薦列表相對于攻擊前沒有發(fā)生大的變化,就說明算法比較健壯。
提高系統(tǒng)的健壯性兩個方法:
1)設(shè)計推薦系統(tǒng)時盡量使用代價比較高的用戶行為。
2)使用數(shù)據(jù)前,進行攻擊檢測,從而對數(shù)據(jù)進行清理?!?/p>
10. 商業(yè)目標
設(shè)計推薦系統(tǒng)需要考慮到最終的商業(yè)目標,這些目標依據(jù)不同公司的需求而定。
PART 4
1. 用一張表總結(jié)獲取評測指標的途徑

對于可以離線優(yōu)化的指標,作者的看法是在給定覆蓋率、多樣性、新穎性等限制條件下,盡量優(yōu)化預(yù)測準確度。用公式表達,離線實驗的優(yōu)化目標是:
最大化預(yù)測準確度,使得 覆蓋度>A & 多樣性>B & 新穎性>C
2. 評測維度
有時候,一個推薦算法可能在某種特定的場景下性能比較好,可以通過不同的維度評測,從而融合不同推薦算法來取得最好的整體性能。
一般來說,評測維度為3種
- 用戶維度。主要包括用戶的人口學(xué)統(tǒng)計信息、活躍度以及是否新用戶
- 物品維度。包括物品的屬性信息、流行度、平均分以及是不是新加入的物品等
- 時間維度。包括季節(jié),是工作日還是周末,是白天還是晚上等。



