初識推薦系統

3 評論 14619 瀏覽 170 收藏 16 分鐘

文章為作者對推薦系統的一些理解,整理成文與大家分享,希望可以給你帶來一些啟發。

亞馬遜的“與您瀏覽過的商品相關的推薦“、天貓首頁的”猜你喜歡“、網易云音樂的”私人FM“等功能將一個詞帶入大家的視野:推薦系統。通過大家的使用及體會,更加感覺推薦系統的重要性。以下就是筆者對推薦系統的一些粗淺的理解,整理成文,供參考。

1.推薦系統為什么存在

正所謂”知其然,更需知其所以然“,在聊“推薦系統是什么”這個問題之前,我們更應該聊一下“推薦系統為什么存在”。

推薦系統解決的是人與物品(商品、信息等)間的問題,而這個問題受到物品數量和用戶意圖兩個維度影響,下面以一個吃貨的故事為例,來嘗試說明此問題。

假設有一個用戶特別喜歡吃面包,現在就從面包種類的數量、用戶對自己口味的清晰程度來說明這個問題。

  • 數量少、意圖清晰

用戶知道自己喜歡的是法棍,但是周圍方圓500里就只有兩種面包買,只有菠蘿包和羊角包,沒有法棍,那么這個用戶要如何選擇?要么選擇不吃面包了,要么在菠蘿包和羊角包中間選一個。

  • 數量少、意圖模糊

用戶只是想吃面包,對口感和成分沒什么要求,方圓500里還是那兩種面包,用戶去了看一看、嘗一嘗,再決定是不吃,吃菠蘿包,還是吃羊角包。

  • 數量多,意圖清晰

用戶知道自己想吃的是法棍,而且方圓500里買面包的實在太多,那這個時候用戶要怎么辦哪?可以問問警察叔叔那里有法棍買,或者打的問出租車司機,或者拿出地圖或者大眾點評上搜索下再去,或者進入一家店直接問店員有沒有法棍買。

  • 數量多,意圖模糊

用戶知道喜歡吃有嚼勁、全麥、無奶油的面包,而且此時方圓500里買面包的也實在太多了,那這個用戶該怎么辦哪?找一家面包店,把自己的需求告訴店員,讓店員給推薦一款面包。

以上者四種情況對應下圖的四個象限,當物品數量少時,其實用戶都可以用查看的方式解決問題,因為數量少,查看的成本很低;但是當物品數量多,查看的成本就很高,所以當意圖清晰明確時,就用搜索來直達結果;而當物品數量多,用戶意圖模糊時,就需要推薦系統了。這就是推薦系統的“所以然”,而我們現在就生活在一個物品/信息過剩的時代,一個很難判斷自己到底需要什么的時代,一個大部分時間不愿去尋找的時代。

2.推薦系統所需數據構成

在上面吃貨的例子中,如果用戶進入一家面包店,但是也不說話,也不進行任何信息的交流,那么店員怎么判斷用戶的喜好哪?所以這個時候需要交流,也就是需要“信息的輸入與輸出”,也就是店員需要掌握用戶的喜好數據,然后才能去進行推薦。

而用戶的數據可以從兩個大的維度來區分:

  1. 反饋數據是正向還是負向;
  2. 反饋數據是顯性還是隱性;
  • 如果用戶很確定的說我喜歡吃口感松軟的面包,這個就是正向反饋;
  • 如果用戶說我不喜歡吃口感松軟的,這個對口感維度來說就是負向反饋;
  • 如果你問用戶是否喜歡吃口感松軟的面包,用戶斬釘截鐵的說是,這就是顯性反饋;
  • 如果同樣的問題,用戶是皺眉、沉默,那么就是一個隱性反饋,而且是一個隱性負反饋;

我們再以男生追女生舉個例子,男主人公準備好鮮花美酒夜光杯,邀女主一起對影成雙對,而女主的表現哪?

  • 女主開心赴約,席間眉來眼去、笑得愜意,這就是明顯在告訴男主:我同意了,你繼續,非常顯性的正向反饋;
  • 如果女主接到邀約,直接微信回復;滾。這就是明顯在告訴男主:我對你沒意思,你不是我的菜,顯性的負反饋;
  • 如果女主既不回絕,也不同意,反復顧左右而言他的high聊,這大概率就是隱形的正反饋,因為女主不好意思直接同意;
  • 如果女主直接忽略男主這條消息,而是從新篇章開始聊天,那就是隱形的負反饋,冷處理這個問題,讓男主知難而退。

3.推薦系統的經典算法概述

數據已經準備就緒,接下來就是將數據充分利用起來,此時算法登場。在推薦系統里最經典的算法就是基于鄰域的算法,其中又可以分為兩類:基于用戶的協同過濾算法(UserCF)、基于物品的協同過濾算法(ItemCF)。

3-1 基于用戶的協同過濾算法(UserCF)

  • 是否和我們相處關系越好的朋友,他們推薦的物品/內容,我們更容易接受?
  • 是否和我們有共同業余愛好的同事,他們推薦的物品/內容,我們更容易接受?
  • 是否在線下興趣小組認識的陌生人,他們推薦的物品/內容,我們更容易接受?

以上的例子還可以舉出很多,而這些例子中的關鍵點不是我們和這些人的關系多么親密,而是我們和這些人在某方面的“共同點”有多大相關度。和我們關系越好的朋友,在某方面興趣愛好的相關度越大(我們暫且不討論相關度與關系好的因果關系),業余愛好相同、線下小組認識的朋友本身也在傳遞:我們之間在某方面的興趣愛好相關度很大。而在某方面的興趣愛好相關度越大,那么對方給我們推薦的物品/內容被我們喜歡的概率就越大。所以此處還需要強調一點:推薦系統推薦的東西是盡可能的推薦用戶喜歡的物品/內容,盡可能的意思就是更高的概率,越趨近于1越好的狀態。

如下圖片所示,我們通過人口屬性、行為數據、物品的消費歷史等,推薦系統發現user A與user C的相似度更高,那么推薦系統就會將user A的消費集中存在,但是user C的消費集中不存在的物品推薦給user C,對user C的消費集也會做同樣的處理。

所以UserCF的關鍵點就是找到和“你”興趣愛好相關度更高的用戶群,然后將該用戶群喜歡的、但是你并不知道、沒消費過的物品/內容推薦給“你”。

3-2 基于物品的協同過濾算法(ItemCF)

UserCF是基于相關的用戶找到應該推薦的物品/內容,而ItemCF是基于用戶已經消費的物品/內容來尋找其可能喜歡的物品/內容。

  • 如果我們買了一本東野圭吾的《白夜行》,商家為我們推薦一本柯南道爾的《福爾摩斯探案全集》,我們是否更容易購買?
  • 如果我們買了一張陳奕迅的CD《十年》,商家為我們推薦一張陳奕迅的CD《K歌之王》,我們是否更容易購買?
  • 如果我們買了一張重慶火鍋的代金券,商家推薦一張我們湘菜的代金券,我們是否更容易購買?

以上的例子也可以舉出很多,而這些例子中的關鍵點是根據用戶的當前消費行為的對象,來尋找其可能喜歡的物品/內容。而此時就需要發現物品/內容間的相關性,其相關性越高,推薦后被喜歡的可能性上就越大。

那么問題來了:如何判斷哪些物品與用戶當前消費的商品相關性高哪?通過其他用戶的歷史消費行為,當用戶中大部分用戶在購買了A商品時,也購買了B商品,那么證明A商品和B商品的相關性就高,當再有用戶購買A商品時,我們便可以推薦B商品給該用戶。

如圖所示,當user E消費物品a時,推薦系統尋找與物品a關聯消費最高的物品,由已有用戶的消費行為可見,有3/4的用戶同時消費物品a和物品b,所以推薦系統將物品b推薦給user E。

3-3 相關度

我們分別在UserCF中尋找用戶間的相關度,在ItemCF中物品/內容間的相關度,那么這個相關度是如何尋找哪?在算法上有很多種,接下來我們主要聊聊其背后的思想。

首先說下UserCF中的相關度,我們在上學的時候,經常會參加老鄉會,老鄉會就是一個根據相關度而形成的團體,相關的指標是:我們的老家在一個地方。那么當我們通過更多的指標間相關度來判斷的話,用戶間的相關度將更加的高。比如當對比兩個用戶的聽歌歷史時,發現其重合度很高,那么將一方收聽過、但是不在對方收聽歷史中的歌曲進行推薦,那么被喜歡的概率是否更高?

所以在UserCF中,相關度就是用戶人口屬性數據、歷史行為數據等的重合度。但是ItemCF中是尋找相關的物品時,物品本身沒有歷史行為,那么該如何尋找相關度哪?此時需要引入用戶,用戶會對物品產生行為,而當用戶對多個物品產生行為時,我們便可以知道物品間的相關度。比如買鋼筆用戶中,很多用戶都一起下單買了鋼筆水,那么當有用戶買鋼筆時,我們就可以推薦其鋼筆水。

3-4 數據

以上的相關度分析都需要數據支持,而數據需要進行埋點,而在埋點前有個更重要的事情需要想清楚:

  • 我們的目的是什么;
  • 我們需要哪些數據;
  • 這些數據是否真的有必要;
  • 這些數據是否可以被某個已有數據替代;
  • 是否可以用更加簡單的方式來統計數據;
  • 數據間如何關聯可以方便后續的清理及分析;

然后可以將用戶的點擊、瀏覽、下單、路徑、行為時長等數據盡可能全的記錄,將這些數據作為原材料喂給數據模型,等待數據模型產出結果。

4.推薦系統的級聯融合和權重融合

單兵作戰的能力畢竟有限,不是所有士兵都是《戰狼》里的冷鋒,同樣的道理,在模型中也是需要相互配合,而配合的方式有兩個大類:級聯融合、權重融合。下面通過兩個類比來解釋下兩種配合方式的原理。

級聯融合有點像凈水器,將水進行逐層的過濾凈化,然后輸出我們希望得到的干干凈凈的飲用水,而推薦系統中的級聯融合是將數據直接給到模型,而模型經過一層一層的過濾,最后反饋某個/某類用戶的推薦物品/內容列表。

權重融合有點像麻辣燙,將各種吃食加熱煮熟后,按照某種比例將他們與調味料進行混合,成為美味可口的麻辣燙,而推薦系統中的權重融合就是將數據直接給到模型,而模型中分為好多個子的模型,通過子模型算出給某個/某類用戶的推薦物品/內容的列表,而此列表包含順序因素,越靠前的內容被喜歡的可能性就越大,然后將各個子模型的列表按照某個權重進行加權,最后得到整個父模型的推薦列表,也就是該推薦系統給到用戶的推薦物品/內容列表。

以上關于推薦系統的粗淺描述,只是推薦系統的一小小部分,關于推薦系統的上下文關系、實驗方法、評價標準、冷啟動問題等,暫不做論述,有機會再另行成文。對上面所述,筆者也不敢言之鑿鑿,望大家多交流指正。謝謝。

#專欄作家#

代成龍(微信號dcl_utopia),人人都是產品經理專欄作家,智能硬件創業公司產品狗,從視頻巨頭公司到玩智能硬件的公司,繼續產品設計工作。

本文原創發布于人人都是產品經理。未經許可,禁止轉載。

題圖來自PEXELS,基于CC0協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 具體算法呢

    回復
  2. 我們的目的是什么;
    我們需要哪些數據;
    這些數據是否真的有必要;
    這些數據是否可以被某個已有數據替代;
    是否可以用更加簡單的方式來統計數據;
    數據間如何關聯可以方便后續的清理及分析;
    樓主能分享下你提出的這一連串問題的背后原理(邏輯)是什么呢,感覺很不錯的樣子,授人以漁哈哈

    來自重慶 回復
  3. 樓主現在是在設計推薦系統嗎?

    回復