推薦系統從零到一

jopen 8年前發布 | 41K 次閱讀 推薦系統 設計 推薦引擎

可以說是全拜谷歌吹起了「大數據」這陣春風,近幾年業界對于數據挖掘人才的需求持續高漲,而推薦系統一直是數據挖掘崗位的必修課。一聯系到數據挖掘,總會給人高深莫測的錯覺,以為推薦系統也是數學神童的專屬領域。萬萬沒想到,自己并不是數據挖掘科班出身,也談不上數學功底有多好(本科考高數也就在生死邊緣),竟然也操刀了三個業務場景不同、用戶規模千差萬別、甚至連地域和文化也跨度很大的推薦系統,而且評價指標和用戶反饋還頗為正面。可見推薦系統沒有那么曲高和寡(至少不需要去進修個數學博士,笑),我相信如果一個出色的程序員理解了推薦系統的方法論,那么他就能在短時間內做出一個有實效的能提升平臺活躍的推薦系統。

推薦系統的本質是行為的關聯

推薦系統的核心是為用戶提供個性化的內容。而實現的方式不外乎根據用戶的歷史行為去預測未來的潛在點擊。 一個成功的推薦系統,一般要從兩個維度體現它的價值:一是幫助用戶發現沒接觸過但會喜歡的有新鮮感的內容;二是提升平臺的點擊活躍程度,讓長尾內容得到更充分的曝光 。

如果把推薦系統比做一桌豐盛的菜肴,食材將來自于全平臺用戶的歷史行為,歷史行為所表達的是用戶對于內容的一種喜好程度,有可能是點擊、收藏、下載、評論、點贊等。不管算法選型如何,推薦系統的工作流程是一致的:通過單一用戶的歷史行為揣摩該用戶的喜好,然后搜索全平臺的用戶行為,根據用戶喜好的相關程度對內容進行排序。而排序的標準取決于算法:基于內容(以Item為特征)、基于用戶(以User為特征)還是矩陣分解(以矩陣分解后的隱含變量為特征)。所以,推薦系統的本質是關聯單一用戶與全平臺用戶的行為,為其找到「臭味相投」的人所喜好的內容,這樣就是「協同過濾」中「協同」二字的含義。

并不是所有場景都需要個性化

這是最關鍵但卻最容易被忽視的問題。大數據風一來,推薦系統就成了許多Boss眼中包治百病的仙丹妙藥,不管三七二十一,一定要在產品前期上線推薦系統。但以我的經驗,推薦系統要取得成功,至少要具備以下3個先決條件:

  1. 要有足夠大的數據。一個常見的誤區是,社區不夠活躍,上了推薦系統沒準會增加活躍吧?而實際上缺乏數據就很難有精準的推薦(用戶關聯過于稀疏),自然也不會帶來多少可觀的點擊。
  2. 要有豐富的內容。數據大并不代表內容就足夠豐富,點擊都集中在少數的內容也是有可能的。推薦系統的鼻祖是亞馬遜的圖書推薦,有沒有人細想過,為什么亞馬遜是第一個吃螃蟹的人?當時貝佐斯把書店搬到網上后,發現亞馬遜擁有了全世界最多的圖書,在一家庫存數百萬種圖書的線上書店里,你根本無法依賴編輯去為顧客推薦新書,所以才有了推薦系統誕生的土壤。事實上,只有內容極大豐富的時候,才可能有被無用戶差別排行榜埋沒的優質內容,個性化的需求才能出現需求到商業價值的跨越。 如果內容的量級在一萬以下,單一的熱門排行榜足以滿足大部分用戶發現內容的需求;一萬以上十萬以下,分類的熱門排行榜足以滿足不同喜好用戶發現內容的需求,十萬以上,推薦系統的必要性才開始凸顯 。
  3. 要有用戶分眾。數據充分了、內容豐富了,并不代表推薦系統就水到渠成,還得掂量下用戶喜好能不能形成產生足夠的分眾。推薦系統之所以在電商、音樂和社區等領域有成功的應用,主要因素就是這類產品的用戶有足夠的分眾。目標用戶越是大而全,分眾越明顯,推薦的滿意度越高。不用看數據,也能猜到淘寶的推薦會比唯品會的效果好太多,因為上淘寶的用戶喜好差異度會遠大于唯品會。

推薦系統的步驟

1. 定義目標

凡事要有成效都必須堅持目標導向,如果一個項目的成果不能被準確衡量,那么前景注定是危險的。推薦系統長期都是為提升平臺的活躍度而生的,與團隊的商業價值目標是一致的,但短期內兩者或許會有沖突: 平臺的展示位置有限,推薦系統上馬后會分流掉熱門內容的點擊量,而商業價值往往要建立于熱門內容之上 。所以上馬之前一定要與負責確定商業價值的人協商(也許你的CEO、也許是市場團隊的頭兒),在推薦系統的設計中兼顧到一部分的商業價值目標。關于推薦的評價指標,個人建議可包括下列選項:推薦系統覆蓋的內容數量、推薦內容的點擊率(A/B測試)、推薦系統上線前后的內容產生量(對于UGC平臺)、推薦系統上線前后TOP100內容的變化,同時也要留意推薦內容區域的瀏覽行為數據(推薦系統本來就是個離產品很近的事),比如停留時間、點擊的頻次、翻頁的頻次。

有的平臺會在推薦結果的下方提供用戶的反饋按鈕,但是我建議這種反饋聽聽就好,不必當真,主要還是看實際的數據表現。用戶反饋總是會過分的積極,容易讓人忘乎所以。

2. 深入業務

做數據的如果不了解業務,基本就廢掉了。我的習慣是做推薦系統之前一定要把產品玩熟用壞,盡量獲取更多的用戶、內容和行為的數據。打個比方,用QQ郵箱的和用Gmail郵箱注冊的用戶肯定有些不一樣,對不?除了收集數據,熟悉推薦的業務場景(行話叫「推薦的上下文」)也很重要,事實上推薦算法的選型也會受業務場景的影響,比如以物推物的場景就更適合內容特征的算法,一個一個接連展現的可以考慮加入點隨機性,首頁推薦列表應該多放新內容。

3. 算法選型

既然推薦系統的本質是行為的關聯,那么協同過濾(這里把矩陣分解也算協同過濾的一種)都是在利用關聯的信息,通常都會比基于內容的推薦效果要好。不過現實中 單一的算法都很難獲得很高的準確率,適當結合內容自身的屬性有助于提升推薦的滿意度 ,舉個例子,服飾電商平臺中Item的品牌信息對購買者就很關鍵(所有女人都懂的,對不?),如果能建立起一個User的品牌偏好,或者進一步講,品牌與品牌之間的關聯度,那么爆表的推薦質量簡直是手到擒來。如果平臺原有的行為數據就是關聯很稀疏的,協同過濾就很難發揮所長,這時基于內容的推薦就有用武之地了。

4. 冷啟動與負樣本

冷啟動可分為User的冷啟動和Item的冷啟動,如果是要對一個新內容推薦相關的其他內容,那么可以多多利用內容特征的相似度;如果是對一個新用戶推薦,可以利用起社交網絡的信息(比如該用戶的QQ好友的喜好);或者推隨機的熱門內容,再評估用戶的點擊快速調整(實時推薦的好處出來了);最后的辦法也只有給新用戶一個表達自己喜好的界面了。

協同過濾是基于統計的算法,并不需要負樣本的信息,但如果采取了機器學習的算法,訓練的過程是需要負樣本的。 大部分產品設計的時候不會提供用戶的負反饋入口,用戶無法表達對某個內容的厭惡,也就是現實數據并不存在負樣本 。但是負樣本其實是可被創造的,我常用的一種做法是選擇熱門的但沒有產生用戶喜好的樣本,因為平臺的熱門內容往往有更高的曝光率,用戶反復看到但沒產生點擊,那就潛在的表達了一種厭惡。

一直覺得推薦系統是個業界十分特殊的場景,站在了通往技術、數據、產品和商業四條岔路的交叉口。所以做推薦系統是一個鍛煉程序員綜合能力的好活,而事實上高深算法是推薦系統中最次要的部分,對于數據和產品敏感的技術人更容易取得成功。

更多精彩內容,歡迎關注微信公眾號「碼農咖啡館」

來自: http://guoze.me/2016/01/10/recommendation-zero-to-one/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!