1. 程式人生 > >選擇推薦演算法時需要考慮得因素

選擇推薦演算法時需要考慮得因素

推薦系統涉及到前端互動設計,後臺演算法選取優化, 所以在設計推薦系統時,不能單純使用accuracy對推薦效果進行衡量,需要根據推薦系統的具體應用場景,使用物件,解決的問題使用多指標對其進行衡量。而且很多時候這些指標都是一個上漲其他跌,需要彼此間做權衡(例如在設計百度關鍵詞推薦引擎時,就需要在關鍵詞的召回和準確性之間進行權衡,同時要考慮使用者操作的便利性,推薦關鍵詞的多樣性等)。 下邊就對這些指標進行介紹:

User Preference

使用者是否喜歡該RS(Recommender System)的設計。最簡單的方法就是讓使用者選擇, 實驗那種演算法/互動設計使用者更喜歡, 然後被投票較多的一種勝出。

中間會涉及幾個問題:

  1. A演算法和B演算法比,假設A演算法勝出了, 而投票給A的人相對於B只是稍微喜歡A一點點。 但投票給B的人缺非常不喜歡A,則這種情況下,有可能最終仍然需要選擇B。
  2. 每一票的權重,也可能是不同的,例如在百度關鍵詞推薦系統中,消費較高,買詞較多的客戶相對於新客戶更專業,他們的選擇一般更科學,說以權重需要高一些。

 Prediction Accuracy

很多推薦演算法都是基於資料探勘或是機器學習, 所以很多時候, 也會使用資料探勘和機器學習的accuracy衡量標準。我們可以簡單粗暴地預設accuracy越高, 推薦演算法的效果越好。

NOTE: 下文中所有的推薦系統衡量標準具體公式參見本站:

推薦系統中的相似度度量

推薦演算法中可以將accuracy的衡量標準分為3類:

  1. Rating Prediction
  2. Usage Prediction
  3. Accuracy of Ranking Items

Rating Prediction

例如在Netflix,douban中預測user對某個item(電影or音樂)的打分,為了評估演算法預測的效果及偏差,可以使用RMSE(Root Mean Squared Error)或MAE(Mean Absolute Error)進行評估。數值越大表示偏差越大。

Usage Prediction

例如在百度關鍵詞推薦引擎中, 更多需要考慮的是推薦出候選關鍵詞後, 客戶是否採納該關鍵詞(use),此時就不適合使用RMSE或是MAE進行衡量了。該場景下使用經典的Precision/Recall方式衡量更為合適,即一方面需要考慮推薦結果是否合適,另外一方面也需要考慮是否所有適合該客戶該場景的結果都被推薦出來。

Precision=tp/(tp+fp)

recall=tp(tp+fn)

更多時候可以直接使用AUC進行衡量刻畫

Ranking Measures

例如在百度關鍵詞推薦系統中,推薦出來的結果是關鍵詞的list,排在前邊的結果使用者更容易看到,使用者選擇的代價也就更小,所以需要儘可能將更相關的結果往前排。此時就需要使用Ranking的標準衡量推薦結果list的結果。

此時一般使用NDCG(Normalized Discount Cummulative Gain)對該序列進行衡量,具體使用方式參見:使用NDCG評估關鍵詞推薦系統的相關性

Coverage

即推薦的覆蓋率, 最簡單的方法就是評估推薦系統推薦的item佔item全集的比例,同時評估推薦系統能夠推薦給總使用者的比例。 例如電商有100W種商品,推薦系統能夠覆蓋80W, 則可以簡單地認為該推薦系統的Coverage為80%;又如網站使用者為100W,推薦系統能夠覆蓋50W使用者,則可以簡單定義使用者覆蓋面為50%

該方式的缺點顯而易見: item有重要和不重要,熱門和長尾的區分,例如,在國外,哈利波特深受大家喜歡,該書/音像製品的關注度非常高,該商品被購買的概率較大,所以推薦一個哈利波特後被購買的概率, 可能是推薦一個冷門商品的N倍(例如推薦一個了冷門的‘舵機’),所以在計算Coverage的時候,需要考慮item的冷熱程度。

例如在百度關鍵詞推薦系統中,我們可以簡單地考慮推薦系統所能覆蓋的關鍵詞數量的比例,但其實考慮推薦關鍵詞所能覆蓋的pv的比例,更合理。 或者在專門推薦長尾流量的出口使用關鍵詞數量覆蓋比例。

推薦使用者所能覆蓋的比例也是一個需要慎重考慮得問題: 一般情況下,有些客戶是不適宜覆蓋的,例如新使用者的profile還沒有建立的時候,過早地對其進行推薦,雖然覆蓋率上去了, 卻不能保證正確性。 所以經常需要在準確性和覆蓋率上做權衡(例如不同的應用場景可以選用不同的覆蓋率,準確性標準, 或是在互動上進行提示,告訴使用者:僅供參考)

Confidence

推薦的置信度,很多時候,使用模型方法時,都可以產生一個置信度, 我們甚至可以根據置信度, 選擇推薦樣式, 或是是否展現結果給使用者。 例如,當系統產生一個置信度較低的結果時,可以選擇不進行推薦。

Trust

即:能否博取使用者的信任。需要從心理學的角度去進行設計,例如推薦時可以摻雜一些確信的使用者喜歡的item,或是推薦的時候寫明推薦的理由(這點非常重要,就是‘給一個理由先’, 給了理由,說服力立馬倍增)

但Trust很難定量衡量, 更多是進行調研得到調研分析結果。

Novelty

什麼是Novelty?所謂Novelty,就是需要推薦新的東西,使用者已經關注,已經購買的東西,再推薦就沒有多少價值了。 舉個例子,我經常上amazon.cn買東西,但之前經常發現一個問題: 我要買一口炒鍋, 瀏覽了很多炒鍋相關的item,之後下單買了口愛仕達的炒鍋, 回頭再上amazon的時候,他竟然仍然向我推薦各種品牌的炒鍋。 這就是Novelty做的不好。

Serendipity

就是要推薦一些有驚喜的東西,例如我經常看某一個演員的電影,推薦系統給我推薦一部該演員演的我沒看過的電影,算是Novelty; 如果給我推薦一部不是該演員演的但是風格和這些電影類似的電影,就屬於Serendipity。

一個比較特別的的例子:

“假設一名使用者喜歡周星馳的電影,然後我們給他推薦了一部叫做《臨歧》的電影(該電影是1983年劉德華、周星馳、梁朝偉合作演出的,很少有人知道這部有周星馳出演的電影),而該使用者不知道這部電影,那麼可以說這個推薦具有新穎性。但是,這個推薦並沒有驚喜度,因為該使用者一旦瞭解了這個電影的演員,就不會覺得特別奇怪。但如果我們給使用者推薦張藝謀導演的《紅高粱》,假設這名使用者沒有看過這部電影,那麼他看完這部電影后可能會覺得很奇怪,因為這部電影和他的興趣一點關係也沒有,但如果使用者看完電影后覺得這部電影很不錯,那麼就可以說這個推薦是讓使用者驚喜的。這個例子的原始版本來自於Guy Shani的論文”

簡單地說,就是讓使用者感覺到‘毫無理由地’喜歡

以上例子內容來自於項亮同學所著《推薦系統實踐》

Diversity

最經典的例子, 在百度上搜索關鍵詞‘蘋果’,如果我們認為使用者大概率是要搜手機相關的內容就不出水果的搜尋結果, 那就是一個diversity較低的例子; 又如旅遊推薦時,如果都是推薦一個地方的同類旅遊景點時,也是diversity的一個反例,當然diversity很多時候需要和precision做trade-off

Utility

即推薦系統的效用。效用可以從兩個角度考慮: 推薦系統對使用者的效用及推薦系統對網站(owner)的效用,從兩個角度來看,可能會得到不同的結果。 以百度關鍵詞推薦系統為例,從使用者的角度看,我們需要推薦和使用者推廣意圖相關的關鍵詞, 且這些關鍵詞能夠帶來最高的ROI;而從百度的角度看,推薦的關鍵詞應該帶來最大的消費(至少短期的衡量標準是這樣,長期考慮還是需要提升使用者的ROI),針對不同的效用就需要建立不同的模型。

例如從公司的utility考慮,需要建立題詞率模型(最大化推薦結果的採用率模型)及點選率模型; 從使用者的角度,需要建立模型最大化ROI。 一般系統都是綜合考慮這些效用決定最終結果。

 也可關注微博: weibo.com/dustinsea

或是直接訪問: http://semocean.com