推薦系統從零到一

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

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

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

若是把推薦系統比作一桌豐盛的菜餚,食材未來自於全平臺用戶的歷史行爲,歷史行爲所表達的是用戶對於內容的一種喜愛程度,有多是點擊、收藏、下載、評論、點贊等。無論算法選型如何,推薦系統的工做流程是一致的:經過單一用戶的歷史行爲揣摩該用戶的喜愛,而後搜索全平臺的用戶行爲,根據用戶喜愛的相關程度對內容進行排序。而排序的標準取決於算法:基於內容(以Item爲特徵)、基於用戶(以User爲特徵)仍是矩陣分解(以矩陣分解後的隱含變量爲特徵)。因此,推薦系統的本質是關聯單一用戶與全平臺用戶的行爲,爲其找到「臭味相投」的人所喜愛的內容,這樣就是「協同過濾」中「協同」二字的含義。微信

並非全部場景都須要個性化

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

  1. 要有足夠大的數據。一個常見的誤區是,社區不夠活躍,上了推薦系統沒準會增長活躍吧?而實際上缺少數據就很難有精準的推薦(用戶關聯過於稀疏),天然也不會帶來多少可觀的點擊。機器學習

  2. 要有豐富的內容。數據大並不表明內容就足夠豐富,點擊都集中在少數的內容也是有可能的。推薦系統的鼻祖是亞馬遜的圖書推薦,有沒有人細想過,爲何亞馬遜是第一個吃螃蟹的人?當時貝佐斯把書店搬到網上後,發現亞馬遜擁有了全世界最多的圖書,在一家庫存數百萬種圖書的線上書店裏,你根本沒法依賴編輯去爲顧客推薦新書,因此纔有了推薦系統誕生的土壤。事實上,只有內容極大豐富的時候,纔可能有被無用戶差異排行榜埋沒的優質內容,個性化的需求才能出現需求到商業價值的跨越。若是內容的量級在一萬如下,單一的熱門排行榜足以知足大部分用戶發現內容的需求;一萬以上十萬如下,分類的熱門排行榜足以知足不一樣喜愛用戶發現內容的需求,十萬以上,推薦系統的必要性纔開始凸顯學習

  3. 要有用戶分衆。數據充分了、內容豐富了,並不表明推薦系統就水到渠成,還得掂量下用戶喜愛能不能造成產生足夠的分衆。推薦系統之因此在電商、音樂和社區等領域有成功的應用,主要因素就是這類產品的用戶有足夠的分衆。目標用戶越是大而全,分衆越明顯,推薦的滿意度越高。不用看數據,也能猜到淘寶的推薦會比惟品會的效果好太多,由於上淘寶的用戶喜愛差別度會遠大於惟品會。測試

推薦系統的步驟

1. 定義目標

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

有的平臺會在推薦結果的下方提供用戶的反饋按鈕,可是我建議這種反饋聽聽就好,沒必要當真,主要仍是看實際的數據表現。用戶反饋老是會過度的積極,容易讓人得意忘形。spa

2. 深刻業務

作數據的若是不瞭解業務,基本就廢掉了。個人習慣是作推薦系統以前必定要把產品玩熟用壞,儘可能獲取更多的用戶、內容和行爲的數據。打個比方,用QQ郵箱的和用Gmail郵箱註冊的用戶確定有些不同,對不?除了收集數據,熟悉推薦的業務場景(行話叫「推薦的上下文」)也很重要,事實上推薦算法的選型也會受業務場景的影響,好比以物推物的場景就更適合內容特徵的算法,一個一個接連展示的能夠考慮加入點隨機性,首頁推薦列表應該多放新內容。設計

3. 算法選型

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

4. 冷啓動與負樣本

冷啓動可分爲User的冷啓動和Item的冷啓動,若是是要對一個新內容推薦相關的其餘內容,那麼能夠多多利用內容特徵的類似度;若是是對一個新用戶推薦,能夠利用起社交網絡的信息(好比該用戶的QQ好友的喜愛);或者推隨機的熱門內容,再評估用戶的點擊快速調整(實時推薦的好處出來了);最後的辦法也只有給新用戶一個表達本身喜愛的界面了。

協同過濾是基於統計的算法,並不須要負樣本的信息,但若是採起了機器學習的算法,訓練的過程是須要負樣本的。大部分產品設計的時候不會提供用戶的負反饋入口,用戶沒法表達對某個內容的厭惡,也就是現實數據並不存在負樣本。可是負樣本實際上是可被創造的,我經常使用的一種作法是選擇熱門的但沒有產生用戶喜愛的樣本,由於平臺的熱門內容每每有更高的曝光率,用戶反覆看到但沒產生點擊,那就潛在的表達了一種厭惡。

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

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

相關文章
相關標籤/搜索