《Python數據分析與機器學習實戰-唐宇迪》讀書筆記第13章--推薦系統

python數據分析個人學習讀書筆記-目錄索引

 第13章推薦系統

   大數據與人工智能時代,互聯網產品發展迅速,競爭也越來越激烈,而推薦系統在其中發揮了決定性的作用。例如,某人觀看抖音的時候,特別喜歡看籃球和遊戲的短視頻,只要打開APP,就都是熟悉的旋律,系統會推薦各種精彩的籃球和遊戲集錦,根本不用自己動手搜索。廣告與新聞等產品也是如此,都會抓住用戶的喜好,對症下藥才能將收益最大化,這都歸功於推薦系統,本章向大家介紹推薦系統中的常用算法。

13.1推薦系統的應用

   在大數據時代,每分鐘都在發生各種各樣的事情,其對應的結果也都通過數據保存下來,如何將數據轉換成價值,就是推薦系統要探索的目標(見圖13-1)。

 邀月工作室

  圖13-1 互聯網數據量

  推薦系統在生活中隨處可見,購物、休閒、娛樂等APP更是必不可缺的法寶,在雙十一購物時,估計大家都發現了,只要是搜索過或者瀏覽過類似商品,都會再次出現在各種廣告位上。

  你可能喜歡的電影,你可能喜歡的音樂,你可能喜歡的……這些大家再熟悉不過,系統都會根據用戶的點擊、瀏覽、購買記錄進行個性化推薦,如圖13-2所示。圖13-2(b)是用筆者的京東賬號登錄時的專屬排行榜,全是啤酒,因爲之前搜索過幾次啤酒關鍵詞卻沒有買,系統自然會認爲正在猶豫買不買呢。

 邀月工作室

  圖13-2 推薦系統場景

  圖13-3是亞馬遜、京東、今日頭條3個平臺的推薦系統的數據,幾個關鍵指標都顯示了其價值所在,那麼怎麼進行推薦呢?首先要有各項數據,才能做這件事。例如,你在抖音中觀看某些視頻的停留時間較長,賬號上就會打上一些標籤。例如,筆者喜歡看籃球和打遊戲,那麼標籤可能就是籃球、王者榮耀、遊戲迷……這些標籤僅僅爲了優化用戶體驗嗎?自己使用較多的APP推薦的廣告是否都是常關注的領域呢?

 邀月工作室

  圖13-3 推薦系統的價值

當大家使用產品時,無形之中早已被打上各種標籤,這就是用戶畫像,並不需要知道你的模樣,只要知道你的愛好,投其所好能夠吸引大家就足夠了(見圖13-4)。

 邀月工作室

  圖13-4 用戶畫像

 

13.2協同過濾算法

  如果大家想邀請朋友去看一場電影,你的首選對象是誰?應該是自己的好朋友吧,因爲你們有共同的愛好。現在有幾部電影同時上映,實在拿不定主意選哪一部,該怎麼辦呢?這時可能會有兩種方案。

  • 1.問問各自的好朋友,因爲彼此的品位差不多,朋友喜歡的電影,大概也符合你的口位。
  • 2.回憶一下看過的喜歡的電影,看看正在上映的這些電影中,哪部與之前看過的類似。

  問題是如何讓計算機確定哪個朋友跟你的喜好相同呢?如何確定哪一部新的電影與你之前看過的類似呢?這些任務可以通過協同過濾來完成,也就是通過用戶和商品的畫像數據進行相似度計算(見圖13-5)。

 邀月工作室

  圖13-5 相似計算

  協同過濾看起來複雜,做起事來還是很簡單的,在推薦系統中主要有兩種方案。

  • 1.基於用戶的協同過濾:找最相似的朋友,看看他們喜歡什麼。
  • 2.基於商品的協同過濾:找看過的商品,看看哪些比較類似。

13.2.1基於用戶的協同過濾

   首先來看一下基於用戶的協同過濾,假設有5組用戶數據,還有用戶對兩種商品的評分,通過不同的評分,計算哪些用戶的品位比較相似。

  最直接的方法是,把用戶和評分數據展示在二維平面上,如圖13-6所示。很明顯,用戶A、C、D應該是一類人,他們對商品1都不太滿意,而對商品2比較滿意。用戶E和B是另外一類,他們的喜好與用戶A、C、D正好相反。

  只要有數據,計算相似度的方法比較多,下面列出幾種常見的相似度計算方法:

 邀月工作室

  圖13-6 用戶相似度

  • 歐幾里得距離(Euclidean Distance)

 邀月工作室

  • 皮爾遜相關係數(Pearson Correlation Coefficient)

 邀月工作室

  • 餘弦相似度(Cosine Similarity)

 邀月工作室

  • 協方差

 邀月工作室

  相似度的計算方法還有很多,對於不同任務,大家都可以參考使用,其中歐幾里得距離早已家喻戶曉,基本所有涉及距離計算的算法中都會看到它的影子。皮爾遜相關係數也是一種常見的衡量指標,即用協方差除以兩個變量的標準差得到的結果,其結果的取值範圍在[−1,+1]之間。圖13-7展示了不同分佈的數據所對應的皮爾遜相關係數結果。

   由圖可見,當兩項指標非常相似的時候,其值爲+1,例如學習時長和學習成績的關係,學習時間越長,學習成績越好。當兩項指標完全顛倒過來的時候,其值爲−1,例如遊戲時長和學習成績的關係,遊戲時間越長,學習成績越差。當兩項指標之間沒有關係的時候,其值就會接近於0,例如身高和學習成績,它們之間並沒有直接關係。

  在基於用戶的推薦中,一旦通過相似度計算找到那些最相近的用戶,就可以看看他們的喜好是什麼,如果在已經購買的商品中,還有一件商品是待推薦用戶還沒有購買的,把這件商品推薦給用戶即可。

  假設系統向用戶A推薦一款商品,通過歷史數據得知,其已經購買商品A和C,還沒有購買商品B和D,此時系統會認爲接下來他可能要在商品B和D中選一個。那給他推薦商品B還是商品D呢?按照協同過濾的想法,首先要找到和他最相似的用戶,通過對比發現,用戶A和用戶C的購買情況十分類似,都購買了商品A和C,此時可以認爲用戶C和用戶A的品位相似,而用戶C已經購買了商品D,所以最終給用戶A推薦了商品D,這就是最簡單的基於用戶的協同過濾(見圖13-8)。

 邀月工作室

  圖13-7 相關係數

 邀月工作室

  圖13-8 基於用戶的協同過濾

  基於用戶的協同過濾做起來雖然很簡單,但是也會遇到以下問題。

  • 1.對於新用戶,很難計算其與其他用戶的相似度。這也是經常討論的用戶冷啓動問題,最簡單的辦法就是用排行榜來替代推薦。
  • 2.當用戶羣體非常龐大的時候,計算量就非常大。
  • 3.最不可控的因素是人的喜好是變化的,每一個時間段的需求和喜好可能都不相同,並且購買很大程度上都是衝動行爲,這些都會影響推薦的結果。

  綜上所述,基於用戶的協同過濾並不常見,一般用在用戶較少而商品較多的情況下,但是中國市場恰恰相反,用戶羣體十分龐大,商品類別相對更少。

13.2.2基於商品的協同過濾

   基於商品的協同過濾在原理上和基於用戶的基本一致,只不過變成要計算商品之間的相似度。

  假設購買商品A的用戶大概率都會購買商品C,那麼商品A和C可能就是一套搭配的產品,例如相同牌子不同口味的冰淇淋,或者是啤酒和尿布的故事……接下來如果用戶C購買了商品A,肯定要向他推薦商品C了(見圖13-9)。

 邀月工作室

  圖13-9 基於商品的協同過濾

  再來看一個實際的例子,如圖13-10所示,有12個用戶,6部電影,可以把它們當作一個矩陣,其中的數值表示用戶對電影的評分。空着的地方表示用戶還沒有看過這些電影,其實做推薦就是要估算出這些空值都可能是什麼,如果某一處得到較高的值,意味着用戶很可能對這個電影感興趣,那就給他推薦這個電影。

 邀月工作室

  圖13-10 基於商品的協同過濾

  此時任務已經下達,要對5號用戶進行推薦,也就是要分別計算該用戶對所有未看過電影的可能評分,以其中一部電影的計算方法爲例,其他位置的計算方法相同。例如想求5號用戶對1號電影的喜好程度,假設已經通過某種相似度計算方法得到1號電影和其他電影的相似度(例如通過比對電影類型、主演、上映時間等信息),由於5號用戶之前看過3號電影和6號電影(相似度爲負分的暫時不考慮),所以需要分別考慮這兩部電影和1號電影的相似度,計算方法如圖13-11所示。

 邀月工作室

  圖13-11 推薦指數計算

  這裏可以把相似度看作權重項,相似度越高,起到的作用越大,最後再進行歸一化處理即可。最終求得5號用戶對1號電影的評分值爲2.6,看來他可能不喜歡1號電影。

  關於相似度的計算和最終結果的估計,還需具體問題具體分析,因爲不同數據所需計算方式的差別還是很大。與基於用戶的協同過濾相比,基於商品的協同過濾最大的優勢就是用戶的數量可能遠大於商品的數量,計算起來更容易;而且商品的屬性基本都是固定的,並不會因爲人的情感而發生變化,就像鼠標怎麼也變不成鍵盤。在非常龐大的用戶-商品矩陣中,計算推薦涉及的計算量十分龐大,由於商品標籤相對固定,可以不用像基於用戶的那樣頻繁更新。

 

13.3隱語義模型

   協同過濾方法雖然簡單,但是其最大的問題就是計算的複雜度,如果用戶-商品矩陣十分龐大,這個計算量可能是難以忍受的,而實際情況也是如此,基本需要做推薦的產品都面臨龐大的用戶羣體。如何解決計算問題,就是接下來的主要目標,使用隱語義模型的思想可以在一定程度上巧妙地解決這些龐大的計算問題。

13.3.1矩陣分解思想

   真實數據集中,用戶和商品數據會構成一個非常稀疏的矩陣,假設在數以萬計的商品中,一個用戶可能購買的商品只有幾種,那麼其他商品位置上的數值自然就爲0(見圖13-12)。

 邀月工作室

  圖13-12 稀疏矩陣

  稀疏矩陣的問題在於考慮的是每一個用戶和每一個商品之間的聯繫,那麼,能否換一種思路呢?假設有10萬個用戶和10萬個商品,先不考慮它們之間直接的聯繫,而是引進“中介”,每個“中介”可以服務1000個商品和1000個用戶,那麼,只需要100個“中介”就可以完成任務。此時就將原始的用戶-商品問題轉換成用戶-中介和中介-商品問題,也就是把原本的一個龐大的矩陣轉換成兩個小矩陣。

  矩陣分解的目的就是希望其規模能夠縮減,更方便計算,現階段推薦系統基本都是基於矩陣分解實現的。

  這裏可以簡單來計算一下,按照之前的假設,用戶-商品數據集矩陣爲105×105=1×1010,非常嚇人的一個數字。加入中介之後,用戶-中介矩陣爲105×1000,中介-商品矩陣爲1000×105,分別爲1×107,在數值上差了幾個數量級。

  圖13-13是矩陣分解的示意圖,也就是通過引入一個“中介”來轉換原始問題,目的就是爲了降低計算複雜度,這裏可以把用戶數n和商品數m都當作非常龐大的數值,而“中介”k卻是一個相對較小的值。

 邀月工作室

  圖13-13 矩陣分解

  通常把“中介”k定義爲隱含因子,隱含因子把數據進行了間接的組合,小小的改變卻解決了實際中的大問題。在推薦系統中,普遍使用矩陣分解的方法進行簡化計算,其中最常用的手段就是SVD矩陣分解,在下一章的實戰中,你就會見到它的影子。

13.3.2隱語義模型求解

   如何求解隱語義模型呢?其實在推薦系統中,想得到的結果就是稀疏矩陣中那些爲0的值可能是什麼,也就是想看一下用戶沒有買哪些商品。首先計算出其購買各種商品的可能性大小,然後依照規則選出最有潛力的商品即可。

  其中的難點在於如何構建合適的隱含因子來幫助化簡矩陣,如圖13-14所示,F是要求解的隱含因子,只需要把它和用戶與商品各自的聯繫弄清楚即可。

 邀月工作室

  圖13-14 隱含因子

  R矩陣可以分解成P矩陣和Q矩陣的乘積,如圖13-15所示。此時只需分別求解出P和Q,自然就可以還原回R矩陣:

 邀月工作室

 邀月工作室

  圖13-15 隱含因子求解

  這裏還需要考慮顯性和隱性反饋的問題,也就是數據集決定了接下來該怎麼解決問題,先來看一下顯性和隱性的區別(見表13-1)。

  表13-1 顯性與隱性反饋

 邀月工作室

  常見的帶有評分的數據集屬於顯性反饋,只有行爲沒有具體評估指標的就是隱形反饋。並不是所有數據集都是理想的,有時需要自己定義一下負樣本。通常情況下,對於一個用戶,沒有購買行爲的商品就是負樣本,關於負樣本的選擇方法還有很多,可以根據實際情況來定義。在商品集K(u,i)中,如果(u,i)是正樣本,則rui=1;如果(u,i)是負樣本,則rui=0。

  按照機器學習的思想,可以把隱含因子當作要求解的參數,依舊還是這個老問題,什麼樣的參數能夠更符合實際的數據,先指定一個目標函數:

 邀月工作室

  看起來與迴歸中的最小二乘法有點類似,計算由隱含因子還原回來的矩陣與原始矩陣的差異程度,並且加入正則化懲罰項。

  按照之前回歸中的求解思路,此時可以利用梯度下降進行迭代優化,首先計算梯度方向:

 邀月工作室

  接下來按照給定方向,選擇合適的學習率進行更新即可:

 邀月工作室

  在建模過程中,需要考慮以下參數。

  • 1.隱含因子的個數或者當作隱分類的個數,需要給定一個合適的值。
  • 2.學習率α一直都是機器學習中最難搞定的。
  • 3.既然有正則化懲罰項,肯定會對結果產生影響。
  • 4.正負樣本的比例也會有影響,對於每一個用戶,儘量保持正負樣本比例持平。

  隱語義模型在一定程度上降低了計算的複雜度,使得有些根本沒辦法實現的矩陣計算變成可能。在協同過濾中,每一步操作都具有實際的意義,很清晰地表示在做什麼,但是隱語義模型卻很難進行解釋,它與PCA降維得到的結果類似,依舊很難知道隱含因子代表什麼,不過沒關係,通常只關注最後的結果,中間過程究竟做什麼,計算機自己知道就好。

13.3.3評估方法

   當建模完成之後,肯定要進行評估,在推薦系統中,可以評估的指標有很多,其中常用的均方根誤差(Root Mean Squared Error,RMSE)和均方誤差(Mean Square Error,MSE)分別定義爲:

 邀月工作室

  在評估方法中,不只有這些傳統的計算方式,還需要根據實際業務進行評估,例如覆蓋率、多樣性。這些指標能夠保證系統推薦的商品不至於總是那些常見的。

假設系統的用戶集合爲U,商品列表爲I,推薦系統給每個用戶推薦一個長度爲N的商品列表R(u),根據推薦出來的商品佔總商品集合的比例計算其覆蓋率:

 邀月工作室

  多樣性描述了推薦列表中物品兩兩之間的不相似性。假設那麼用戶u的推薦列表R(u)的多樣性定義如下:

  定義了物品i和j之間的相似度,

 邀月工作室

  推薦系統的整體多樣性可以定義爲所有用戶推薦列表多樣性的平均值:

 邀月工作室

  這裏給大家簡單介紹了幾種常見的評估方法,在實際應用中,需要考慮問題的角度還有很多,例如新穎性、驚喜度、信任度等,這些都需要在實際問題中酌情考慮。

 

本章小結:本章介紹了推薦系統中常用的兩種方法:協同過濾與隱語義模型。相對而言,協同過濾方法更簡單,但是,一旦數據量較大就比較難以處理,隱語義模型和矩陣分解方法都是現階段比較常用的套路。下一章將帶大家實際感受一下推薦系統的魅力。

 

第13章完。推薦實戰:《Python數據分析與機器學習實戰-唐宇迪》讀書筆記第14章--音樂推薦系統實戰

python數據分析個人學習讀書筆記-目錄索引

 

該書資源下載,請至異步社區:https://www.epubit.com

 

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