協同推薦算法沒有這麼龐雜,真的

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

協同推薦算法沒有這麼復雜,真的

本文為PMCAFF專欄作者John西瓜出品

John之前寫了一篇關於電商中的搜尋和關聯推薦策略和一文詳解產品經理如何理解並應用策略,哎喲喂。各種找到我說:太虛啦。沒有算法叫什麼子推薦咧?反思了下,嗯,一點都不虛。行唄,咱今天就好好聊聊推薦算法哈。

我們在使用產品時,經常看到場景會給我們推薦內容,比如社交產品會給我們推薦一些關注的人;電商產品會給我們推薦同類型的商品或者套裝的其他商品;資訊產品會給我們推薦感興趣的內容(即我們瀏覽最多的)。

協同推薦算法沒有這麼復雜,真的

以上都是基於我在看到一個結果,系統個性化給我的反饋。那為什麼個性化推薦在業界這麼火?

a.信息過載,用戶碎片化的時間,獲取信息的成本變高,用戶迫切需要個性化形式的產品。

b.個性化提升了產品的體驗、提升了用戶的停留時長、黏性以及留存率。

c.移動端的迅速發展,變小的載體促使了行業需要更快和更精準的信息呈現。

d.用戶越來越懶,而傳統技術無法滿足用戶多樣性的需求,迫使技術創新和發展。

其中從產品策略上來說,基本上由兩個策略算法來進行演變的:一個是基於數據挖掘的關聯分析推薦;再一個是基於協同過濾的方法。

基於數據挖掘的關聯分析推薦算法

舉個例子:在電商產品中,總體消費者人數為10000人,A產品購買人數為1000人,B產品購買人數為2000人,C產品購買人數為3000人,同時購買AB產品人數為800人,同時購買AC產品人數為100人,從這個案例中當然可以AB建立捆綁銷售策略,那麼當商品sku成千上萬,怎麼去歸納呢?

這里基礎的算法就是關聯分析(電商中依托於銷量可以做關聯分析)。這兒設置到兩個公式:支持度和置信度。

協同推薦算法沒有這麼復雜,真的

依照這個公式算法:S(AB)=0.08;S(AC)=0.01;C(AB)=0.8;C(AC)=0.1 。所以AB關聯推薦效率值更高。比較常用的應用場景就是電商品類捆綁銷售(基於同一類型的不同商品,比如購買了籃球鞋,會關聯推薦籃球服和籃球)。

這種方法現在用的比較少了,就稍微介紹下。接下來協同過濾推薦算法,就是現在最普遍的算法了。

基於協同過濾的推薦算法

首先要說明的是,我們所有的推薦算法,最終目的都是為了給用戶推薦他可能感興趣的商品,從而提高銷售和轉化率,忘記這個目的的所有算法設計都是自嗨。

目前常見的商品推薦算法是協同過濾,公認比較常用的方法俗稱「鄰居方法」。鄰居方法中有兩種視角。第一種是基於用戶。第二種是基於商品。

基於用戶的協同過濾,稱為User-based CF(User-based Collaborative Filtering)。系統通過分析一個用戶和哪些用戶(參考用戶)的特徵比較相似,然後看看這些參考用戶喜歡買哪類的商品,再從這些商品里挑出一些推薦給該用戶。

基於商品的協同過濾,稱為Item-based CF(Item-based Collaborative Filtering)。系統通過數據分析和挖掘用戶的購買行為,來判斷用戶喜歡的商品類型,然後從那些用戶喜歡的商品類型里挑出一些推薦給用戶。

1.User-based CF 基於用戶的協同過濾

算法核心思路:當用戶進入一個電商平台時,作為電商平台系統找到那些和該用戶興趣/喜好類似的人,然後看看他們喜歡什麼,就給該用戶推薦什麼。簡而言之,A和B兩個用戶相似,然後給A推薦B喜歡的東西。

舉個例子:在電商產品中,有用戶ID為10001至10006這六位用戶,他們對幾種商品進行了瀏覽、收藏、購買、添加到購物車、評論、分享等操作。為了得到用戶對某類別產品的興趣度,我們可以設計這樣一個簡單的模型,給不同的用戶行為賦予不同的分值,比如瀏覽行為賦予0.1分。整體的行為分值如表:

協同推薦算法沒有這麼復雜,真的

根據用戶的行為,商品分值累加計算,滿分10分,加到10後則不再累加。比如A買手機這個商品得到10分(可能是購買2部,則購買分為4分,兩次5星評價,則評論分為6分;也有可能是購買分為4分,一次4星評價,一次5星評價,一次分享……)

然後,我們得到1001-1006六位用戶對各種商品的偏好程度得分表:(其中表格的數字是用戶對該商品「興趣程度」的一個量化值,0為沒興趣,10為非常有興趣。空白代表這個商品在系統內,還沒有任何依據來判斷興趣如何。)

協同推薦算法沒有這麼復雜,真的

如果以用戶10005作為標本,現在要找到和他興趣最接近的人,需要對商品的多維向量進行近似求法。一般用餘弦相似度來進行度量。

餘弦函數相信大家都不陌生,就是中學時候學的cosine函數cos(θ)。餘弦相似度,又稱為餘弦相似性,是通過計算兩個向量的夾角的餘弦值來評估他們的相似度。具體公式如下:

協同推薦算法沒有這麼復雜,真的

這里的xi和yi表示a和b的分向量。

給出的相似性範圍從-1到1:結果為-1時意味著兩個向量指向的方向正好截然相反,1表示它們的指向是完全相同的,0通常表示它們之間是獨立的,而在這之間的值則表示中間的相似性或相異性。用簡單的話來說,最相似的是1,最不相似的是-1。

在剛才的例子中,把用戶在一些不相乾的商品類別的愛好當做一個空間向量,把每個商品類別作為一個維度,我們例子中就有手機、平板、電腦、化妝品、零食、水果和玩具共7個維度。我們試著求一下10005這個用戶和10006這個用戶已知部分的愛好相似程度:

協同推薦算法沒有這麼復雜,真的

由於「用戶10005」沒有零食的記錄,「用戶10006」沒有水果和玩具的記錄,所以不需要用「用戶10005」的零食維度的分數和「用戶10006」的水果和玩具兩個維度分數來計算相似度。

因為「最相似的是1,最不相似的是-1」。所以10005和10006兩個用戶的相似度還是很高的。同理也能夠求出10005用戶和其他任何一個用戶的興趣相似程度。

之後設置一個相似的閾值,如0.8、0.85……或者其他任何一個值,看看相似度超過這個閾值的用戶都有什麼購物喜好,把他們喜好購買的東西推薦給10005用戶作為推薦方案即可(例如例子中,10005和10006的喜好高度相似,就可以將10006的喜歡的水果和玩具推薦給10005)。這就是一種思路最為樸素的基於用戶的協同過濾算法思路。

除了上述通過分析用戶的行為來設計這個用戶相似度外,還可以考慮通過用戶的畫像思維來補充和完善這個用戶協調過濾算法。用戶屬性表如表所示。

協同推薦算法沒有這麼復雜,真的

2.Item-based CF 基於商品的協同過濾

這種算法給用戶推薦那些和他們之前喜歡的商品相似的商品。(天貓經常這麼搞)

一般,推薦算法核心思想是,給用戶推薦那些和他們之前喜歡的物品相似的物品。

比如,內容推薦算法的「基於內容的協同過濾」,用戶A之前閱讀過NBA的相關信息,該算法會根據此行為給你推薦所有NBA相關的內容(去看頭條的,就是這個套路),但是基於物品的協同過濾有點不同,Item-based CF算法並不利用物品的內容屬性計算物品之間的相似度,它主要通過分析用戶的行為記錄計算物品之間的相似度。

Item-based CF算法認為,「有很多人喜歡商品A,同時他們也喜歡商品B,所以A和B應該是比較類似的商品。」計算起來可以分成以下兩個步驟:

  • 計算商品之間的相似度

  • 根據物品的相似度和用戶的偏好來給用戶生成推薦列表

(一)計算物品之間的相似度。

這里同樣用到了餘弦相似性來求物品的相似度,但是公式略有不同:

協同推薦算法沒有這麼復雜,真的

其中,|N(i)|是喜歡物品i的用戶數,|N(j)|是喜歡物品j的用戶數,|N(i)UN(j)|是同時喜歡物品i和物品j的用戶數。

從上面的定義看出,在協同過濾中兩個物品產生相似度是因為它們共同被很多用戶喜歡,兩個物品相似度越高,說明這兩個物品共同被很多人喜歡。

這里面蘊含著一個假設:就是假設每個用戶的興趣都局限在某幾個方面,因此如果兩個物品屬於一個用戶的興趣列表,那麼這兩個物品可能就屬於有限的幾個領域,而如果兩個物品屬於很多用戶的興趣列表,那麼它們就可能屬於同一個領域,因而有很大的相似度。

舉例說明,首先我們假定有5個用戶,分別為A、B、C、D、E,他們的商品購買記錄分別如下:

協同推薦算法沒有這麼復雜,真的

這是一個水果店商店的銷售記錄,記錄了每一個用戶購買的產品內容。首先要分別得到每個用戶購買物品的鄰接矩陣,如用戶A購物鄰接矩陣如表所示:

協同推薦算法沒有這麼復雜,真的

這個矩陣就是根據剛剛看到的用戶A的購買記錄得到的,由於紅酒、啤酒和顯示器同時出現在他的購物列表里,所以「梨和蘋果」、「蘋果和荔枝」、「荔枝和西瓜」、「西瓜和梨」兩兩「鄰接」,也就是說這些標註1的小格子代表這兩種一起在一個人的購物記錄里出現過一次——注意買過就算,不是必須出現在同一次購物籃里。

同理能夠得到其他B、C、D、E幾人的購物鄰接矩陣(所有的鄰接矩陣都是沿對角線對稱的。)。然後將A、B、C、D、E五人的鄰接矩陣,通過矩陣「疊加」的方式,即將每一個矩陣的每個對應的方格數字相加,最後得到中間矩陣C,過程如下:

協同推薦算法沒有這麼復雜,真的

最終的疊加結果——ABCDE購買記錄匯總:

協同推薦算法沒有這麼復雜,真的

從這個ABCDE購買記錄匯總里,可以看到同時喜歡西瓜和梨的有2個人,同時喜歡柚子和板栗的有2個人,同時喜歡蘋果和梨的有1個人……由於矩陣是對稱的,我為大家都劃出了對角線,大家看表格對角線的一邊就行。

這時便可以計算任意兩個商品的相似度做評估了,如計算西瓜和梨的相似程度,套用剛才的公式:

協同推薦算法沒有這麼復雜,真的

說明相似度極高,買西瓜的人必買梨,買梨的人必買西瓜。再試算一下板栗和柚子的相似度:

協同推薦算法沒有這麼復雜,真的

說明相似度極高,買板栗的人必買柚子,買柚子的人必買板栗。再試算一下西瓜和荔枝的相似度:

協同推薦算法沒有這麼復雜,真的

以此類推,便可計算出所有商品之間的相似度。

(二)根據物品的相似度和用戶的歷史行為給用戶生成推薦列表:

得到相似度後,便可以計算基於相似度的商品推薦列表了。計算完匯總列表之後,當要對一個用戶做推薦時,先把這個用戶的歷史購買記錄都列出來,假設有n個購買記錄。然後對這個列表里每一個產品都用查表的方法查一次相似度,這樣會得到n個列表,每個列表里都是一個產品和其對應的相似度的關係。把這n個列表做一個排序,相似度高的在前,相似度低的在後。如果要推薦3個商品就取前3個,如果要推薦5個商品就取前5個。

大概的推薦算法思路說到這大概就說完了,因為我們不是技術,產品經理了解到這個層面就差不多了。深挖一層還可以根據相似度和歷史行為計算出用戶對物品的感興趣度,然後再給用戶生成推薦列表。就是在相似度的維度上,在增加一個感興趣的維度,作為推薦商品的衡量指標,思路相似,這里不再展開。

優缺點說明

優點是推薦都是基於用戶的行為數據去不斷學習和完善,在過程中發現用戶的潛在商品興趣,能給用戶「製造驚喜」的同時,也在為自己製造驚喜。這是一個持續成長的過程,而推薦不過是其中的一個短程跑道,設計者的目光應該長遠些,將最終的目放在構建行業的大數據庫和用戶畫像的產業生態上。

缺點則是啟動的門檻高,用戶量不夠時,商品量太少時幾乎無法開展;並且學習量不夠時推薦結果較差,就會導致文初說的「愚蠢」現象出現,這也是很多時候人工智能被大家吐槽為「人工智障」的原因之一。

關於個性化推薦的算法,在網上有很多資料,也有很多其他的做到方法。這里只是嘗試以作為產品經理的角度,用較簡單的語言來將自己學到的推薦算法原理剖析給大家聽。

關於產品經理要不要懂技術的問題,也是老生常談了,高論很多,不敢多讚一詞。只說一句,產品經理在算法產品的設計中,絕不能一句「做個性化推薦」就完事的,要深入算法內部,了解算法,然後結合產品特點來優化和設計。

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!