天天看點

大資料–商品推薦系統介紹(上)

大家好,又見面了,我是你們的朋友全棧君。

這次我們介紹商品推薦系統:

  • 推薦系統是什麼
  • 推薦引擎的分類
  • 常見的推薦算法
  • 混合的推薦機制(重要)
  • 推薦系統架構
  • 協同過濾的實作

推薦引擎解決的幾個問題

  1. 主動的使用者,通過類目和搜尋進行引導,對結果頁進行幹預
  2. 被動的使用者,通過使用者的曆史行為分析,推薦使用者可能感興趣的商品。
  3. 對商家來講,幫助商家賣出更多的東西

推薦系統是什麼

目的

為了解決資訊過載和使用者無明确需求的問題,找到使用者感興趣的物品,才有了個性化推薦系統。

  • 分類目錄和搜尋引擎,解決資訊過載的問題,代表性的解決方案是分類目錄和搜尋引擎,如hao123,電商首頁的分類目錄以及百度,360搜尋等。

    不過分類目錄和搜尋引擎隻能解決使用者主動查找資訊的需求,即使用者知道自己想要什麼,并不能解決使用者沒用明确需求很随便的問題。

    經典語錄是:你想吃什麼,随便!面對這種很随便又得罪不起的使用者(女友和上帝),隻能通過分析使用者的曆史行為給使用者的興趣模組化,進而主動給使用者推薦能夠滿足他們興趣和需求的資訊。比如問問女友的閨蜜,她一般什麼時候喜歡吃什麼。

  • 推薦系統廣泛存在于各類網站中,作為一個應用為使用者提供個性化的推薦。它需要一些使用者的曆史資料,一般由三個部分組成:
    • 基礎資料

      包括使用者的通路、浏覽、下單、收藏,使用者的曆史訂單資訊,評價資訊等很多資訊;

    • 推薦算法系統推薦算法系統主要是根據不同的推薦訴求由多個算法組成的推薦模型;
    • 前台展示,前台展示主要是對用戶端系統進行響應,傳回相關的推薦資訊以供展示。
    大資料–商品推薦系統介紹(上)

推薦引擎的分類

推薦引擎的分類可以根據很多名額進行區分:

正常分類

  • 根據大衆行為的推薦引擎

    根據大衆行為的推薦引擎,對每個使用者都給出同樣的推薦,這些推薦可以是靜态的由系統管理者人工設定的,或者基于系統所有使用者的回報統計計算出的當下比較流行的物品。(銷售排行榜、關注排行榜、好評排行榜)

  • 個性化推薦引擎,對不同的使用者,根據他們的口味和喜好給出更加精确的推薦,這時,系統需要了解需推薦内容和使用者的特質,或者基于社會化網絡,通過找到與目前用目标使用者進行戶相同喜好的使用者,實作推薦。

根據資料源進行區分

根據資料源進行區分:主要是根據資料之間的相關性進行推薦,因為大部分推薦引擎的工作原理還是基于物品或者使用者的相似集進行推薦。

  • 根據系統使用者的基本資訊發現使用者的相關程度,這種被稱為基于人口統計學的推薦(Demographic-based Recommendation)
  • 根據推薦物品或内容的中繼資料,發現物品或者内容的相關性,這種被稱為基于内容的推薦(Content-based Recommendation)
  • 根據使用者對物品或者資訊的偏好,發現物品或者内容本身的相關性,或者是發現使用者的相關性,這種被稱為基于協同過濾的推薦

常見的推薦算法

迄今為止,在個性化推薦系統中,協同過濾技術是應用最成功的技術。目前國内外有許多大型網站應用這項技術為使用者更加智能(個性化、千人千面)的推薦内容。

我們主要介紹協同過濾算法

基于使用者的協同過濾算法

第一代協同過濾技術是基于使用者的協同過濾算法,基于使用者的協同過濾算法在推薦系統中獲得了極大的成功,但它有自身的局限性。

基于使用者的協同過濾算法先計算的是 使用者與使用者的相似度(興趣相投,人以群分物以類聚),然後将相似度比較接近的使用者A購買的物品推薦給使用者B,專業的說法是該算法用最近鄰居(nearest-neighbor) 算法找出一個使用者的鄰居集合,該集合的使用者和該使用者有相似的喜好,算法根據鄰居的偏好對該使用者進行預測。

  1. 使用者的購買記錄

    張三購買過,橘子,橙子、蘋果、手機、衛生紙

    王五購買過,橘子,橙子、蘋果、手機、

    李四購買過,橘子,橙子、蘋果

    張三和王五的相似度 4分

    張三和李四的相似度 3分

    王五和李四的相似度 3分

  2. 給李四進行推薦

    與李四相似的使用者是張三和王五,他們 購買記錄的彙總結構是

    橘子,橙子、蘋果、手機、衛生紙

    去除已經重複購買過的物品,我們給李四推薦如下産品:

    手機、衛生紙

  3. 冷啟動問題:

    由于基于使用者的協同過濾算法是基于使用者購買過的商品進行推薦,隻有已經被使用者選擇(購買)的物品才有機會推薦給其他使用者。對于一次都沒有被購買過的商品,是一個巨大災難,沒機會出頭了。

  4. 計算量大的問題:

    對于一個擁有千萬級活躍使用者的電商網站來說,每計算一個使用者都涉及到了上億級别的計算。

  5. 解決方案:

    将網站中不同的使用者群體通過聚類算法計算出來。

    400 *10 大類别

    10個類别分别計算使用者之間的相似度,其實就是計算400個使用者之間相似度。

  6. 問題:

    新使用者怎麼推薦?——–預設推薦

    基于使用者的協同過濾算法,推薦的商品都是已經被購買過的,對于沒有被使用者購買過的商品,該如何推薦? ———混合推薦,将多種推薦模型的結果打亂混合推薦

    商品資料和使用者數量都很大的情況下,如何處理?—— 按照一定的聚類政策,将使用者聚類/物品聚類

大資料–商品推薦系統介紹(上)

基于物品(item)的協同過濾算法

第二代協同過濾技術是基于物品的協同過濾算法,基于物品的協同過濾算法與基于使用者的協同過濾算法基本類似。

他使用所有使用者對物品或者資訊的偏好,發現物品和物品之間的相似度,然後根據使用者的曆史偏好資訊,将類似的物品推薦給使用者。

這聽起來比較拗口,簡單的說就是幾件商品同時被人購買了,就可以認為這幾件商品是相似的,可能這幾件商品的商品名稱風馬牛不相及,産品屬性有天壤之别,但通過模型算出來之後就是認為他們是相似的。什麼?你覺得不可思議,無法了解。是的,就是這麼神奇!

  • 舉個例子:
  1. 物品購買記錄

    張三購買過,橘子,橙子、蘋果、手機、衛生紙

    王五購買過,橘子,橙子、蘋果、手機、

    李四購買過,橘子,橙子、蘋果

  2. 當兩個商品同時被購買,就認為相似。

    橘子 和 橙子的相似度 3

    橘子 和 蘋果的相似度3

    橘子 和 手機的相似度2

    橘子 和 衛生紙的相似度 1

  3. 怎麼推薦?

    假設有新使用者購買過橘子

    那麼相關商品有:橙子3、蘋果3、手機2、衛生紙1,則會給他推薦這些物品。

其實基于項目的協同過濾推薦機制是 Amazon 在基于使用者的機制上改良的一種政策,因為在大部分的 Web 站點中,物品的個數是遠遠小于使用者的數量的,而且物品的個數和相似度相對比較穩定,同時基于項目的機制比基于使用者的實時性更好一些。

但也不是所有的場景都 是這樣的情況,可以設想一下在一些新聞推薦系統中,也許物品,也就是新聞的個數可能大于使用者的個數,而且新聞的更新程度也有很快,是以它的形似度依然不穩 定。是以,其實可以看出,推薦政策的選擇其實和具體的應用場景有很大的關系。

混合的推薦機制(重要)

在現行的 Web 站點上的推薦往往都不是單純隻采用了某一種推薦的機制和政策,他們往往是将多個方法混合在一起,進而達到更好的推薦效果。關于如何組合各個推薦機制,這裡講幾種比較流行的組合方法。

  • 權重的混合(Weighted Hybridization): 用線性公式(linear formula)将幾種不同的推薦按照一定權重組合起來,具體權重的值需要在測試資料集上反複實驗,進而達到最好的推薦效果。
  • 切換的混合(Switching Hybridization):前面也講到,其實對于不同的情況(資料量,系統運作狀況,使用者和物品的數目等),推薦政策可能有很大的不同,那麼切換的混合方式,就是允許在不同的情況下,選擇最為合适的推薦機制計算推薦。
  • 分區的混合(Mixed Hybridization):采用多種推薦機制,并将不同的推薦結果分不同的區顯示給使用者。其實,Amazon,當當網等很多電子商務網站都是采用這樣的方式,使用者可以得到很全面的推薦,也更容易找到他們想要的東西。
  • 分層的混合(Meta-Level Hybridization): 采用多種推薦機制,并将一個推薦機制的結果作為另一個的輸入,進而綜合各個推薦機制的優缺點,得到更加準确的推薦。

推薦系統的應用場景

Amazon 利用可以記錄的所有使用者在站點上的行為,根據不同資料的特點對它們進行處理,并分成不同區為使用者推送推薦:

  • 今日推薦 (Today’s Recommendation For You): 通常是根據使用者的近期的曆史購買或者檢視記錄,并結合時下流行的物品給出一個折中的推薦。
  • 新産品的推薦 (New For You): 采用了基于内容的推薦機制 (Content-based Recommendation),将一些新到物品推薦給使用者。在方法選擇上由于新物品沒有大量的使用者喜好資訊,是以基于内容的推薦能很好的解決這個“冷啟動”的問題。
  • 捆綁銷售 (Frequently Bought Together): 采用資料挖掘技術對使用者的購買行為進行分析,找到經常被一起或同一個人購買的物品集,進行捆綁銷售,這是一種典型的基于項目的協同過濾推薦機制。
  • 别人購買 / 浏覽的商品 (Customers Who Bought/See This Item Also Bought/See): 這也是一個典型的基于項目的協同過濾推薦的應用,通過社會化機制使用者能更快更友善的找到自己感興趣的物品。

推薦系統架構

京東推薦系統架構

大資料–商品推薦系統介紹(上)

淘寶推薦系統架構

大資料–商品推薦系統介紹(上)

協同過濾的實作

收集使用者偏好及标準化處理

要從使用者的行為和偏好中發現規律,并基于此給予推薦,如何收集使用者的偏好資訊成為系統推薦效果最基礎的決定因素。使用者有很多方式向系統提供自己的偏好資訊,而且不同的應用也可能大不相同,下面舉例進行介紹:

大資料–商品推薦系統介紹(上)

在一般應用中,我們提取的使用者行為一般都多于一種,關于如何組合這些不同的使用者行為,基本上有以下兩種方式:

  • 将不同的行為分組:一般可以分為“檢視”和“購買”等等,然後基于不同的行為,計算不同的使用者 / 物品相似度。比如:“購買了該圖書的人還購買了 …”,“檢視了圖書的人還檢視了 …”
  • 根據不同行為反映使用者喜好的程度将它們進行權重,得到使用者對于物品的總體喜好。一般來說,顯式的使用者回報比隐式的權值大,但比較稀疏,畢竟進行顯示回報的使用者是少數;同時相對于“檢視”,“購買”行為反映使用者喜好的程度更大,但這也因應用而異。

資料減噪和歸一化

收集了使用者行為資料,我們還需要對資料進行一定的預處理,其中最核心的工作就是:減噪和歸一化。

  • 減噪:使用者行為資料是使用者在使用應用過程中産生的,它可能存在大量的噪音和使用者的誤操作,我們可以通過經典的資料挖掘算法過濾掉行為資料中的噪音,這樣可以是我們的分析更加精确。
  • 歸一化:如前面講到的,在計算使用者對物品的喜好程度時,可能需要對不同的行為資料進行權重。但可以想象,不同行為的資料取值可能相差很 大,比如,使用者的檢視資料必然比購買資料大的多,如何将各個行為的資料統一在一個相同的取值範圍中,進而使得權重求和得到的總體喜好更加精确,就需要我們 進行歸一化處理。最簡單的歸一化處理,就是将各類資料除以此類中的最大值,以保證歸一化後的資料取值在 [0,1] 範圍中。

進行的預處理後,根據不同應用的行為分析方法,可以選擇分組或者權重處理,之後我們可以得到一個使用者偏好的二維矩陣,一維是使用者清單,另一維是物品清單,值是使用者對物品的偏好,一般是 [0,1] 或者 [-1, 1] 的浮點數值。

相似度

當已經對使用者行為進行分析得到使用者喜好後,我們可以根據使用者喜好計算相似使用者和物品,然後基于相似使用者或者物品進行推薦,這就是最典型的 CF 的兩個分支

  • 基于使用者的 CF
  • 基于物品的 CF。

關于相似度的計算,現有的幾種基本方法都是基于向量(Vector)的,其實也就是計算兩個向量的距離,距離越近相似度越大。

在推薦的場景中,在用 戶 – 物品偏好的二維矩陣中,我們可以将一個使用者對所有物品的偏好作為一個向量來計算使用者之間的相似度,或者将所有使用者對某個物品的偏好作為一個向量來計算物品之間的相似度。

大資料–商品推薦系統介紹(上)

常用的相似度計算方法:

  • 歐幾裡德距離(Euclidean Distance)
  • 皮爾遜相關系數(Pearson Correlation Coefficient)
  • Tanimoto 系數(Tanimoto Coefficient)

    采用的臨近原則一般是

  • 固定數量的鄰居:K-neighborhoods 或者 Fix-size neighborhoods
  • 基于相似度門檻的鄰居:Threshold-based neighborhoods
大資料–商品推薦系統介紹(上)

計算基于使用者的 CF(User CF)

基于使用者對物品的偏好找到相鄰鄰居使用者,然後将鄰居使用者喜歡的推薦給目前使用者。計算上,就是将一個使用者對所有物品的偏好作為一個向量 來計算使用者之間的相似度,找到 K 鄰居後,根據鄰居的

相似度權重以及他們對物品的偏好,預測目前使用者沒有偏好的未涉及物品,計算得到一個排序的物品清單作為推薦。

大資料–商品推薦系統介紹(上)

上圖 給出了一個例子,對于使用者 A,根據使用者的曆史偏好,這裡隻計算得到一個鄰居 – 使用者 C,然後将使用者 C 喜歡的物品 D 推薦給使用者 A。

計算基于物品的 CF(Item CF)

基于物品的 CF 的原理和基于使用者的 CF 類似,隻是在計算鄰居時采用物品本身,而不是從使用者的角度,即基于使用者s對物品的偏好找到相似的物品,然後根據使用者的曆史偏好,推薦相似的物品給他。

從計算 的角度看,就是将所有使用者對某個物品的偏好作為一個向量來計算物品之間的相似度,得到物品的相似物品後,根據使用者曆史的偏好預測目前使用者還沒有表示偏好的 物品,計算得到一個排序的物品清單作為推薦。

大資料–商品推薦系統介紹(上)

下圖 給出了一個例子,對于物品 A,根據所有使用者的曆史偏好,喜歡物品 A 的使用者都喜歡物品 C,得出物品 A 和物品 C 比較相似,而使用者 C 喜歡物品 A,那麼可以推斷出使用者 C 可能也喜歡物品 C。

釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/124661.html原文連結:https://javaforall.cn