寫在正文以前算法
最近在作推薦系統,在項目組內作了一個分享。今天有些時間,就將邏輯梳理一遍,將ppt內容用文字沉澱下來,便於接下來對推薦系統的進一步研究。推薦系統確實是極度複雜,要走的路還很長。微信
A First Glance網絡
爲何須要推薦系統——信息過載數據結構
隨着互聯網行業的井噴式發展,獲取信息的方式愈來愈多,人們從主動獲取信息逐漸變成了被動接受信息,信息量也在以幾何倍數式爆發增加。舉一個例子,PC時代用google reader,經常有上千條未讀博客更新;現在的微信公衆號,也有大量的紅點未閱讀。垃圾信息愈來愈多,致使用戶獲取有價值信息的成本大大增長。爲了解決這個問題,我我的就採起了比較極端的作法:直接忽略全部推送消息的入口。但在不少時候,有效信息的獲取速度極其重要。app
因爲信息的爆炸式增加,對信息獲取的有效性,針對性的需求也就天然出現了。推薦系統應運而生。機器學習
亞馬遜的推薦系統學習
最先的推薦系統應該是亞馬遜爲了提高長尾貨物的用戶抵達率而發明的。已經有數據證實,長尾商品的銷售額以及利潤總和與熱門商品是基本持平的。亞馬遜網站上在線銷售的商品何止百萬,但首頁可以展現的商品數量又極其有限,給用戶推薦他們可能喜歡的商品就成了一件很是重要的事情。固然,商品搜索也是一塊大蛋糕,亞馬遜的商品搜索早已經開始侵蝕谷歌的核心業務了。大數據
在亞馬遜的商品展現頁面,常常可以看見:瀏覽此商品的顧客也同時瀏覽。優化
這就是很是典型的推薦系統。八卦一下:」剁手族」的興起,與推薦系統應該有必定關係吧,哈哈。網站
推薦系統與大數據
大數據與雲計算,在當下很是熱門。無論是業內同事仍是其餘行業的朋友,大數據都是一個常談的話題。就像青少年時期熱門的話題:「性」。你們都不太懂,但你們都想說上幾句。業內對於大數據的使用其實還處於一個比較原始的探索階段,前段時間聽一家基因公司的CEO說,如今能夠將人類的基因徹底導出爲數據,但這些數據毫無規律,能拿到這些數據,但根本不知道能夠幹什麼。推薦系統也是利用用戶數據來發現規律,相對來講開始得更早,運用上也比較成熟。
冷啓動問題
推薦系統須要數據做爲支撐。但亞馬遜在剛剛開始作推薦的時候,是沒有大量且有效的用戶行爲數據的。這時候就會面臨着「冷啓動」的問題。沒有用戶行爲數據,就利用商品自己的內容數據。這就是推薦系統早期的作法。
基於內容的推薦:
tag 給商品打上各類tag:運動商品類,快速消費品類,等等。粒度劃分越細,推薦結果就越精確
商品名稱,描述的關鍵字 經過從商品的文本描述信息中提取關鍵字,從而利用關鍵字的類似來做推薦
同商家的不一樣商品 用戶購買了商店的一件商品,就推薦這個商店的其餘熱銷商品
利用經驗,人爲地作一些關聯 一個經典的例子就是商店在啤酒架旁邊擺上紙尿布。那麼,在網上購買啤酒的人,也能夠推薦紙尿布?
因爲內容的極度複雜性,這一起的規則能夠無限拓展。基於內容的推薦與用戶行爲數據沒有關係,在亞馬遜早期是比較靠譜的策略。但正是因爲內容的複雜性,也會出現不少錯誤的推薦。好比:小明在網上搜索過保時捷汽車模型。而後推薦系統根據關鍵字,給小明推薦了價值200萬的保時捷911......
用戶行爲數據—到底在記錄什麼
在遊戲裏面,咱們的人物角色是一堆複雜的數據,這叫作數據存儲;這些數據以必定的結構組合起來,這叫作數據結構。一樣地,在亞馬遜眼裏,咱們就是一張張表格中一大堆紛繁複雜的數字。舉一個栗子:
小明早上9點打開了亞馬遜,先是瀏覽了首頁,點擊了幾個熱銷的西裝連接,而後在搜索欄輸入了nike籃球鞋,在瀏覽了8雙球鞋後,看了一些購買者的評價,最終選定了air jordan的最新款。
這就是一條典型的用戶行爲數據。亞馬遜會將這條行爲拆分紅設定好的數據塊,再以必定的數據結構,存儲到亞馬遜的用戶行爲數據倉庫中。天天都有大量的用戶在產生這樣的行爲數據,數據量越多,能夠作的事情也就越強大。
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邏輯迴歸分爲三個步驟:
提取特徵值
經過用戶偏好矩陣,不斷擬合計算,獲得每一個特徵值的權重
預測新用戶對物品的喜愛程度
舉個栗子:
小明相親了上千次,咱們收集了大量的行爲數據,如下數據僅僅是冰山一角。
經過大量的擬合計算得出,特徵值「個性開朗程度」的權重爲30%,「顏值」的權重爲70%。哎,對這個看臉的世界已經絕望了,寫完這篇文章,就去訂前往韓國的機票吧。
而後,經過擬合出的權重,來預測小明對第一千零一次相親對象的喜好程度。
這就是LR邏輯迴歸的原理。具體的數學算法,有興趣的同窗能夠google之。
如何利用推薦系統賺錢
仍是以亞馬遜爲例。小明是個籃球迷,每月都會買好幾雙籃球鞋。經過幾個月的購買記錄,亞馬遜已經知道小明的偏好,準備給小明推薦籃球鞋。但籃球鞋品牌這麼多,推薦哪個呢?笑着說:哪一個品牌給我錢多,就推薦哪一個品牌。這就是最簡單的流量生意了。這些都叫作:商業規則。
但在加入商業規則以前,須要讓用戶感知到推薦的準確率。若是一開始就強推某些置頂的VIP資源,會極大地損害用戶體驗,讓用戶以爲推薦徹底沒有準確性。這樣的後果對於推薦系統的持續性發展是毀滅性的。
過濾規則
協同過濾只是單純地依賴用戶行爲數據,在真正的推薦系統中,還須要考慮到不少業務方面的因素。以音樂類app爲例。周杰倫出了一張新專輯A,大部分年輕人都會去點擊收聽,這樣會致使其餘每一張專輯類似專輯中都會出現專輯A。這個時候,再給用戶推薦這樣的熱門專輯就沒有意義了。因此,過濾掉熱門的物品,是推薦系統的常見作法之一。這樣的規則還有不少,視不一樣的業務場景而定。
推薦的多樣性
與推薦的準確性有些相悖的,是推薦的多樣性。好比說推薦音樂,若是徹底按照用戶行爲數據進行推薦,就會使得推薦結果的候選集永遠只在一個比較小的範圍內:聽小清新音樂的人,永遠也不會被推薦搖滾樂。這是一個很複雜的問題。在保證推薦結果準確的前提下,按照必定的策略,去逐漸拓寬推薦結果的範圍,給予推薦結果必定的多樣性,這樣纔不會膩嘛。
持續改進
推薦系統具備高度複雜性,須要持續地進行改進。可能在同一時間內,須要上線不一樣的推薦算法,作A/B test。根據用戶對推薦結果的行爲數據,不斷對算法進行優化,改進。要走的路還很長:路漫漫其修遠兮,吾將上下而求索。
本文章歡迎轉載,轉載請註明微信公衆號和做者。微信公衆號:互聯網與做曲家. 做者:neil 版權全部,翻版必究!