1. 程式人生 > >推薦系統實踐——什麼是推薦系統

推薦系統實踐——什麼是推薦系統

什麼是推薦系統

學完了機器學習,將自己的研究方向定為推薦系統,然後現在看起了項亮的《推薦系統實踐》,決定看完一段就來這裡總結記錄一下,方便之後複習。第一章主要是對推薦系統進行簡介,主要分為推薦系統的定義,應用及推薦系統的評測。

什麼是推薦系統

在網際網路時代的今天,資訊不再是難以獲取,而且過載,導致我們常常被大量冗餘的資訊困擾,無法找到自己想要的,這個時候誕生了一個偉大的發明——搜尋引擎,輸入你想要的東西的關鍵詞,就能將與之相關的內容列在你的眼前。然而,像我這種週末閒極無聊的渣渣,又沒什麼特別的興趣愛好,常常就是不自覺點開淘寶或者微博或者百度,卻並沒有明確的目的,這時候就希望這些平臺能自動過濾我不感興趣的,多提供點我感興趣的東西讓我打發時間了,而走在人類智慧前沿的GG們就是這麼厲害,推薦系統就這麼誕生了!並不需要關鍵詞或明確的需求,系統會根據我的歷史行為自動分析我的喜好,並主動推薦能夠滿足我興趣的資訊。

推薦系統是如何工作的

社會化推薦

比如我週六閒著準備看一部電影,我就會問我一個很懂電影的室友,讓她給我推薦幾部她覺得不錯的,這樣的推薦是基於我的社交關係。

基於內容的推薦

比如我特別喜歡梁朝偉,我就會去搜梁朝偉曾經演過的電影電視劇來看,比如我喜歡林俊杰,我聽歌的時候都會直接搜JJ的專輯,而推薦系統就省去了我主動搜尋的過程,直接把我可能感興趣的內容推薦給我,可以說是相當給力了。

基於協同過濾的推薦

比如我喜歡看言情小說,我一個男同學喜歡看武俠小說,而我室友也喜歡看言情小說,那麼我要找小說看的時候,肯定是找我室友看過的書而不是男生的,而這種利用相似興趣的使用者過濾掉不感興趣的物品的方法就是協同過濾。

從以上推薦的方式可以看出,推薦系統其實就是用某種方法將人與物聯絡起來。而且,是針對不同興趣的人給他展示不同特質的物品,這就是:個性化推薦。

個性化推薦系統的應用

書中列舉了幾種典型的應用場景:電子商務,電影,音樂平臺,社交網路,閱讀,郵件,基於位置的服務,個性化廣告。我們自己一聯想平時用到的,淘寶的“有好物”,豆瓣的“發現好電影”,酷狗的“猜你喜歡”等等,都是推薦系統的應用,當然,我一開始看小標題的時候沒想到的場景就是基於位置的服務和個性化廣告,原來是說基於當前的地理位置再根據你當前的需求推薦合適的店鋪等,比如我在西單逛街逛累了想找個電影院歇歇腳,就開啟百度地圖,點選電影院,就給我推薦附近的電影院並“貼心”地推薦了幾部我感興趣的電影;而個性化廣告就跟以上應用有點區別了,以上各種都是想辦法給使用者推薦可能感興趣的物品,而個性化廣告可以說更多是為廣告商服務,是為他們的廣告尋找可能感興趣的使用者然後推送廣告。

個性化推薦系統的評測

我要記錄的重點是關於如何評價一個推薦系統的好壞,不然我設計一個推薦系統,憑什麼就說它好用呢?

  1. 使用者滿意度
    使用者滿意度可評測推薦系統最重要的指標,一個系統,當然是“大家好,才是真的好”啦。但是使用者滿意度沒辦法從直接的資料得到定量的值,一般採用問卷調查的形式,或者是以某些行為定義為“滿意”,比如一件商品,使用者最終購買了則表示滿意。

  2. 預測準確度
    上述使用者滿意度是需要系統上線之後實時獲取的,而預測準確度則可以從離線資料中計算得到,又能度量推薦系統預測使用者行為的能力,是最重要的離線評測指標。而預測準確度的指標又分為:
    2.1 評分預測
    平臺提供給使用者一個打分的功能,然後根據使用者的歷史行為,預測使用者對物品可能的打分。評分預測的預測準確度通過均方根誤差(RMSE)和平均絕對誤差(MAE)計算。用rui表示實際測試集中使用者u對物品i的評分,用rui^表示推薦系統預測的使用者u對物品i的評分,則

    RMSE=(rui^rui)2|T|
    MAE=|rui^rui||T|

    2.2 TopN 推薦
    另一種推薦是給使用者一個個性化推薦列表,列出其最可能感興趣的N的物品。TopN 推薦的預測準確率通過準確率(Precision)和召回率(Recall)來計算。令R(u)是推薦系統預測之後給使用者的推薦列表,令T(u)是測試集中使用者實際感興趣的列表,那麼有:

    Precision=uU|R(u)T(u)|uU|R(u)|
    Recall=uU|R(u)T(u)|uU|T(u)|
    書中提到,評分預測一直是研究熱點,但是評分預測是預測使用者看了某部電影或用了某個物品之後會給出的評分,而TopN 推薦是找出使用者可能感興趣的物品,所以TopN推薦實際上更符合應用需求,因為即使使用者可能對某個物品給出很高的評分,但是如果他都不看這個,就不存在感興趣之說了。
  3. 覆蓋率
    覆蓋率(coverage)主要描述推薦系統對物品長尾的發掘能力。可以用推薦出來的物品佔總物品集合的比例來表示。
    coverage=|uUR(u)||I|
    一個好的推薦系統不僅要有較高的使用者滿意度,也要有較高的覆蓋率。但是以上計算較為粗略,即使覆蓋率為100%,物品出現的次數也會有無數種分佈,其實,可以用推薦列表中不同物品出現次數的分佈來表示覆蓋率,出現的次數分佈比較平,則說明推薦系統發掘長尾的能力強,如果分佈比較陡峭,則說明覆蓋率低。可以用基尼係數(G)來表示:
    G=1n1j=1n(2jn1)p(ij)
    其中ij 表示按照物品流行度p從小到大排序的物品列表中的第j個物品。
    圖片引自百度圖片
    圖中曲線表示最不熱門的x%物品的總流行度佔系統的比例y%,可以看到這條曲線一定在y=x直線之下,而且和y=x相交於(0,0)和(1,1)。令SA是A的面積,SB是B的面積,那麼基尼係數就是SA/(SA+SB), 故基尼係數屬於區間[0,1]. 如果物品流行度很平均,那麼SA就很小,基尼係數就小,如果物品流行度分配不平均,那麼SA就大,從而基尼係數就很大。
    推薦系統的初衷是消除馬太效應(熱門的物品更加熱門),使得各種物品都能被展示給可能對它們感興趣的某一類人群。而評價一個推薦系統是否具有馬太效應,是通過計算初始使用者行為中物品流行度的基尼係數G1和推薦列表中物品流行度的基尼係數G2來確定的,若G1