猜你喜歡-----推薦系統原理介紹

寫在正文之前

 

最近在做推薦系統,在項目組內做了一個分享。今天有些時間,就將邏輯梳理一遍,將ppt內容用文字沉澱下來,便於接下來對推薦系統的進一步研究。推薦系統確實是極度複雜,要走的路還很長。

 

A First Glance

 

 

爲什麼需要推薦系統——信息過載

 

隨着互聯網行業的井噴式發展,獲取信息的方式越來越多,人們從主動獲取信息逐漸變成了被動接受信息,信息量也在以幾何倍數式爆發增長。舉一個例子,PC時代用google reader,常常有上千條未讀博客更新;如今的微信公衆號,也有大量的紅點未閱讀。垃圾信息越來越多,導致用戶獲取有價值信息的成本大大增加。爲了解決這個問題,我個人就採取了比較極端的做法:直接忽略所有推送消息的入口。但在很多時候,有效信息的獲取速度極其重要。

 

   

 

由於信息的爆炸式增長,對信息獲取的有效性,針對性的需求也就自然出現了。推薦系統應運而生。

 

亞馬遜的推薦系統

 

最早的推薦系統應該是亞馬遜爲了提升長尾貨物的用戶抵達率而發明的。已經有數據證明,長尾商品的銷售額以及利潤總和與熱門商品是基本持平的。亞馬遜網站上在線銷售的商品何止百萬,但首頁能夠展示的商品數量又極其有限,給用戶推薦他們可能喜歡的商品就成了一件非常重要的事情。當然,商品搜索也是一塊大蛋糕,亞馬遜的商品搜索早已經開始侵蝕谷歌的核心業務了。

 

在亞馬遜的商品展示頁面,經常能夠看見:瀏覽此商品的顧客也同時瀏覽。

 

 

這就是非常典型的推薦系統。八卦一下:”剁手族”的興起,與推薦系統應該有一定關係吧,哈哈。

 

推薦系統與大數據

 

大數據與雲計算,在當下非常熱門。不管是業內同事還是其他行業的朋友,大數據都是一個常談的話題。就像青少年時期熱門的話題:“性”。大家都不太懂,但大家都想說上幾句。業內對於大數據的使用其實還處於一個比較原始的探索階段,前段時間聽一家基因公司的CEO說,現在可以將人類的基因完全導出爲數據,但這些數據毫無規律,能拿到這些數據,但根本不知道可以幹什麼。推薦系統也是利用用戶數據來發現規律,相對來說開始得更早,運用上也比較成熟。

 

冷啓動問題

 

推薦系統需要數據作爲支撐。但亞馬遜在剛剛開始做推薦的時候,是沒有大量且有效的用戶行爲數據的。這時候就會面臨着“冷啓動”的問題。沒有用戶行爲數據,就利用商品本身的內容數據。這就是推薦系統早期的做法。

 

基於內容的推薦:

  1. tag   給商品打上各種tag:運動商品類,快速消費品類,等等。粒度劃分越細,推薦結果就越精確

  2. 商品名稱,描述的關鍵字    通過從商品的文本描述信息中提取關鍵字,從而利用關鍵字的相似來作推薦

  3. 同商家的不同商品       用戶購買了商店的一件商品,就推薦這個商店的其他熱銷商品

  4. 利用經驗,人爲地做一些關聯    一個經典的例子就是商店在啤酒架旁邊擺上紙尿布。那麼,在網上購買啤酒的人,也可以推薦紙尿布?

 

由於內容的極度複雜性,這一塊兒的規則可以無限拓展。基於內容的推薦與用戶行爲數據沒有關係,在亞馬遜早期是比較靠譜的策略。但正是由於內容的複雜性,也會出現很多錯誤的推薦。比如:小明在網上搜索過保時捷汽車模型。然後推薦系統根據關鍵字,給小明推薦了價值200萬的保時捷911......

 

用戶行爲數據—到底在記錄什麼

 

在遊戲裏面,我們的人物角色是一堆複雜的數據,這叫做數據存儲;這些數據以一定的結構組合起來,這叫做數據結構。同樣地,在亞馬遜眼裏,我們就是一張張表格中一大堆紛繁複雜的數字。舉一個栗子:

 

小明早上9點打開了亞馬遜,先是瀏覽了首頁,點擊了幾個熱銷的西裝鏈接,然後在搜索欄輸入了nike籃球鞋,在瀏覽了8雙球鞋後,看了一些購買者的評價,最終選定了***的最新款。

 

這就是一條典型的用戶行爲數據。亞馬遜會將這條行爲拆分成設定好的數據塊,再以一定的數據結構,存儲到亞馬遜的用戶行爲數據倉庫中。每天都有大量的用戶在產生這樣的行爲數據,數據量越多,可以做的事情也就越強大。

 

user-item 用戶偏好矩陣

 

收集數據是爲了分析用戶的偏好,形成用戶偏好矩陣。比如在網購過程中,用戶發生了查看,購買,分享商品的行爲。這些行爲是多樣的,所以需要一定的加權算法來計算出用戶對某一商品的偏好程度,形成user-item用戶偏好矩陣。

 



數據清理

 

當我們開始有意識地記錄用戶行爲數據後,得到的用戶數據會逐漸地爆發式增長。就像錄音時存在的噪音一樣,獲取的用戶數據同樣存在着大量的垃圾信息。因此,拿到數據的第一步,就是對數據做清理。其中最核心的工作,就是減噪和歸一化:

 

減噪:用戶行爲數據是在用戶的使用過程中產生的,其中包含了大量的噪音和用戶誤操作。比如因爲網絡中斷,用戶在短時間內產生了大量點擊的操作。通過一些策略以及數據挖掘算法,來去除數據中的噪音。

 

歸一化:清理數據的目的是爲了通過對不同行爲進行加權,形成合理的用戶偏好矩陣。用戶會產生多種行爲,不同行爲的取值範圍差距可能會非常大。比如:點擊次數可能遠遠大於購買次數,直接套用加權算法,可能會使得點擊次數對結果的影響程度過大。於是就需要歸一算法來保證不同行爲的取值範圍大概一致。最簡單的歸一算法就是將各類數據來除以此類數據中的最大值,以此來保證所有數據的取值範圍都在[0,1]區間內。

 

降維算法——SVD奇異值分解

 

通過記錄用戶行爲數據,我們得到了一個巨大的用戶偏好矩陣。隨着物品數量的增多,這個矩陣的列數在不斷增長,但對單個用戶來說,有過行爲數據的物品數量是相當有限的,這就造成了這個巨大的用戶偏好矩陣實際上相當稀疏,有效的數據其實很少。SVD算法就是爲了解決這個問題發明的。

 

 

將大量的物品提取特徵,抽象成了3大類:蔬菜,水果,休閒服。這樣就將稀疏的矩陣縮小,極大的減少了計算量。但這個例子僅僅是爲了說明SVD奇異值分解的原理。真正的計算實施中,不會有人爲的提取特徵的過程,而是完全通過數學方法進行抽象降維的。通過對矩陣相乘不斷的擬合,參數調整,將原來巨大的稀疏的矩陣,分解爲不同的矩陣,使其相乘可以得到原來的矩陣。這樣既可以減少計算量,又可以填充上述矩陣中空值的部分。

 

協同過濾算法

我一直在強調用戶行爲數據,目的就是爲介紹協同過濾算法做鋪墊。協同過濾,Collaborative Filtering,簡稱CF,廣泛應用於如今的推薦系統中。通過協同過濾算法,可以算出兩個相似度:user-user相似度矩陣; item-item相似度矩陣。

 

 

爲什麼叫做協同過濾?是因爲這兩個相似度矩陣是通過對方來計算出來的。舉個栗子:100個用戶同時購買了兩種物品A和B,得出在item-item相似度矩陣中A和B的相似度爲0.8; 1000個物品同時被用戶C和用戶D購買,得出在user-user相似度矩陣中C和D的相似度是0.9. user-user, item-item的相似度都是通過用戶行爲數據來計算出來的。

 

計算相似度的具體算法,大概有幾種:歐幾里得距離,皮爾遜相關係數,Cosine相似度,Tanimoto係數。具體的算法,有興趣的同學可以google.

 

用戶畫像

 

提到大數據,不能不說用戶畫像。經常看到有公司這樣宣傳:“掌握了千萬用戶的行爲數據,描繪出了極其有價值的用戶畫像,可以爲每個app提供精準的用戶數據,助力app推廣。” 這樣的營銷廣告經不起半點推敲。用戶對每個種類的app的行爲都不同,得到的行爲數據彼此之間差別很大,比如用戶在電商網站上的行爲數據,對音樂類app基本沒有什麼價值。推薦系統的難點,其中很大一部分就在於用戶畫像的積累過程極其艱難。簡言之,就是用戶畫像與業務本身密切相關。

 

LR邏輯迴歸

 

基於用戶偏好矩陣,發展出了很多機器學習算法,在這裏再介紹一下LR的思想。具體的邏輯迴歸,又分爲線性和非線性的。其他的機器學習算法還有:K均值聚類算法,Canopy聚類算法,等等。有興趣的同學可以看看July的文章。鏈接在最後的閱讀原文。

 

LR邏輯迴歸分爲三個步驟:

  1. 提取特徵值

  2. 通過用戶偏好矩陣,不斷擬合計算,得到每個特徵值的權重

  3. 預測新用戶對物品的喜好程度

 

舉個栗子:

小明相親了上千次,我們收集了大量的行爲數據,以下數據僅僅是冰山一角。

 

 

通過大量的擬合計算得出,特徵值“個性開朗程度”的權重爲30%,“顏值”的權重爲70%。哎,對這個看臉的世界已經絕望了,寫完這篇文章,就去訂前往韓國的機票吧。

 

然後,通過擬合出的權重,來預測小明對第一千零一次相親對象的喜愛程度。

 

 

這就是LR邏輯迴歸的原理。具體的數學算法,有興趣的同學可以google之。

 

如何利用推薦系統賺錢

 

還是以亞馬遜爲例。小明是個籃球迷,每個月都會買好幾雙籃球鞋。通過幾個月的購買記錄,亞馬遜已經知道小明的偏好,準備給小明推薦籃球鞋。但籃球鞋品牌這麼多,推薦哪一個呢?笑着說:哪個品牌給我錢多,就推薦哪個品牌。這就是最簡單的流量生意了。這些都叫做:商業規則。

 

但在加入商業規則之前,需要讓用戶感知到推薦的準確率。如果一開始就強推某些置頂的VIP資源,會極大地損害用戶體驗,讓用戶覺得推薦完全沒有準確性。這樣的後果對於推薦系統的持續性發展是毀滅性的。

 

過濾規則

 

協同過濾只是單純地依賴用戶行爲數據,在真正的推薦系統中,還需要考慮到很多業務方面的因素。以音樂類app爲例。周杰倫出了一張新專輯A,大部分年輕人都會去點擊收聽,這樣會導致其他每一張專輯相似專輯中都會出現專輯A。這個時候,再給用戶推薦這樣的熱門專輯就沒有意義了。所以,過濾掉熱門的物品,是推薦系統的常見做法之一。這樣的規則還有很多,視不同的業務場景而定。

 

推薦的多樣性

 

與推薦的準確性有些相悖的,是推薦的多樣性。比如說推薦音樂,如果完全按照用戶行爲數據進行推薦,就會使得推薦結果的候選集永遠只在一個比較小的範圍內:聽小清新音樂的人,永遠也不會被推薦搖滾樂。這是一個很複雜的問題。在保證推薦結果準確的前提下,按照一定的策略,去逐漸拓寬推薦結果的範圍,給予推薦結果一定的多樣性,這樣纔不會膩嘛。

 

持續改進

 

推薦系統具有高度複雜性,需要持續地進行改進。可能在同一時間內,需要上線不同的推薦算法,做A/B test。根據用戶對推薦結果的行爲數據,不斷對算法進行優化,改進。要走的路還很長:路漫漫其修遠兮,吾將上下而求索。

 

 

本文章歡迎轉載,轉載請註明微信公衆號和作者。微信公衆號:互聯網與作曲家. 作者:neil    版權所有,翻版必究!

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章