5000字,從0到1構(gòu)建推薦系統(tǒng)
編輯導(dǎo)語:伴隨著移動互聯(lián)網(wǎng)的快速發(fā)展與信息量的飛速增長,如今用戶可能每天都需要接收海量級別的信息。而推薦系統(tǒng)的產(chǎn)生讓用戶在一定程度上可以更精準(zhǔn)地接收自己所需信息。那么,如何搭建好一個推薦系統(tǒng)?本文作者結(jié)合自身經(jīng)驗(yàn),總結(jié)了從0到1搭建推薦系統(tǒng)的一套方法,一起來看一下。
一、前言
本文主要是筆者在負(fù)責(zé)實(shí)際項(xiàng)目中積累的關(guān)于推薦系統(tǒng)的皮毛認(rèn)知和理解。
原先都是以用戶的身份接觸推薦系統(tǒng),所以在以PM的身份接到任務(wù)時自然是一頭霧水。各種問題浮現(xiàn)在腦海:推薦系統(tǒng)是什么?能解決什么問題?如何構(gòu)建?等等。
說實(shí)話,這些問題每一個都困擾了我許久。光是思考第一個問題就花了一個多月,回過頭來看,整個項(xiàng)目周期中,大概70%的時間用于思考“是什么”的問題,剩下30%的時間是解決“怎么做”的問題(實(shí)際上整個項(xiàng)目中的應(yīng)用系統(tǒng)除了推薦系統(tǒng)還有用戶畫像系統(tǒng))。
當(dāng)然最終的結(jié)果是樂觀的。所以有意寫下此文,一來是記錄心得,二來是給有需要的朋友做實(shí)戰(zhàn)分享,三來就是拋磚引玉,促進(jìn)共同交流。因筆者在該行業(yè)中經(jīng)驗(yàn)積累較為淺薄,疑慮和不妥之處還望賜教和指正。
二、推薦系統(tǒng)簡述
1. 推薦系統(tǒng)是什么
從應(yīng)用層面簡而言之,推薦系統(tǒng)的主要功能是基于已知的用戶數(shù)據(jù)通過算法計算并給出用戶可能感興趣的信息/物品。
2. 推薦系統(tǒng)誕生背景簡述
隨著知識的運(yùn)用積累、科學(xué)技術(shù)的進(jìn)步等,人類在近幾百年來通過幾次工業(yè)革命使得社會的生產(chǎn)力水平得到大幅提升。此外,從第二次世界大戰(zhàn)結(jié)束后,人類社會加速邁入全面和平時代,全球各國的主基調(diào)以經(jīng)濟(jì)發(fā)展為核心主題,因而進(jìn)一步加速了社會經(jīng)濟(jì)發(fā)展水平。
在此基礎(chǔ)上,我們從一個生產(chǎn)力水平相對低下、生活物品匱乏的年代逐漸向物質(zhì)水平充足、信息爆炸再過渡到當(dāng)下的商品過剩、信息過載的年代。可以預(yù)見的是在未來人們在同一決策下將面臨越來越多的選擇。
在此背景下,消費(fèi)者(用戶)在面臨大量的信息或者物品時可能無法真正從中獲得自己期望或有用的信息或商品。與此同時,生產(chǎn)者的困擾在于如何讓自己的信息/商品呈現(xiàn)給更多用戶,如何在海量的信息/商品中脫穎而出。
而推薦系統(tǒng)正是解決這一矛盾重要工具。尤其是在平臺經(jīng)濟(jì)模式下,推薦系統(tǒng)的應(yīng)用最為廣泛,其中較為典型并具有良好的發(fā)展和應(yīng)用前景的領(lǐng)域包括電子商務(wù)領(lǐng)域、電影/視頻、音樂、閱讀等。
本文主要以項(xiàng)目中涉及的領(lǐng)域【電影/視頻】領(lǐng)域?yàn)槌霭l(fā)點(diǎn)進(jìn)行展開。
三、從0到1構(gòu)建推薦系統(tǒng)
1. 推薦系統(tǒng)的核心功能
推薦系統(tǒng)的核心功能就是為用戶推薦其可能感興趣的商品。大致的過程可以簡述為:推薦系統(tǒng)依據(jù)已知的用戶數(shù)據(jù),經(jīng)過推薦引擎(推薦算法)計算,并給出用戶可能感興趣的商品集合,最終再通過前端界面的方式將特定的商品呈現(xiàn)在用戶眼前。
比如:已知用戶的觀影數(shù)據(jù),此時可通過推薦算法得知用戶是一名喜劇電影愛好者,于是便可以向用戶推薦喜劇電影題材的視頻內(nèi)容。
此外,這里需要重點(diǎn)說明的是,如何判斷用戶是否感興趣的主要依據(jù)來源于已知的用戶數(shù)據(jù)。本質(zhì)上是基于數(shù)據(jù)統(tǒng)計推斷。所以這里描述的是可能感興趣。這一點(diǎn)很重要。而說到用戶數(shù)據(jù),這里需要提一下方便后續(xù)的理解和擴(kuò)展,用戶數(shù)據(jù)的主要類型:
- 用戶基本屬性:這里主要是用戶地理信息,用戶社會屬性數(shù)據(jù)(性別、年齡等)等。
- 用戶行為數(shù)據(jù):這里主要是用戶的觀影數(shù)據(jù)(點(diǎn)擊、播放、收藏、訂購)等。當(dāng)然,考慮到人類行為動力學(xué)特征研究結(jié)果(大多數(shù)情況下,人對一件事情的關(guān)注只能持續(xù)較短的時間),在此還需要做拆分,即歷史行為數(shù)據(jù)和實(shí)時行為數(shù)據(jù)。比較典型的實(shí)時推薦:某寶購物在線輸入關(guān)鍵字搜索后退出,此時再次進(jìn)入app則可能會看到與搜索關(guān)鍵字相關(guān)的物品。
下圖為推薦系統(tǒng)基本功能和簡要的過程:
2. 推薦系統(tǒng)的構(gòu)建
說到這里,我們似乎發(fā)現(xiàn)了,其實(shí)推薦系統(tǒng)說簡單一點(diǎn)就是:給用戶推薦商品。
如果拓展一下:那就是給什么樣的用戶推薦什么樣的商品。再拓展一下:給什么樣的(具有某種特征的用戶)用戶用什么樣的方式(不同場景下的推薦算法)推薦什么樣的(與用戶特征相匹配的商品)商品。
這樣理解的話,我們似乎知道可以從哪里下手了。
1)用戶特征與商品特征定義
① 用戶和商品的關(guān)聯(lián)關(guān)系
我們需要定義一套規(guī)則把用戶和商品關(guān)聯(lián)起來。這樣可以使得用戶和商品存在某種關(guān)聯(lián)關(guān)系以便達(dá)到對某特征的用戶推薦關(guān)聯(lián)特征的商品。
可以說用戶特征和商品特征之間的關(guān)聯(lián)是相輔相依的。比如:為喜劇電影偏好者推薦喜劇電影。
那么問題來了,用戶和商品之間本身不存在關(guān)聯(lián)關(guān)系,可以說都是相對獨(dú)立的,何來關(guān)系之有?何談建立關(guān)聯(lián)關(guān)系?
這里的答案是用戶的行為,用戶行為使得用戶和商品之間產(chǎn)生關(guān)聯(lián)。因?yàn)橐淮谓换?,所以產(chǎn)生了聯(lián)系。于是便有了關(guān)聯(lián)關(guān)系。那么這個“交互”其實(shí)就是方才提到的: 點(diǎn)擊、播放、收藏、訂購等。用戶播放了喜劇電影,則意味著用戶與該喜劇電影產(chǎn)生了關(guān)聯(lián)關(guān)系。
于是乎,我們似乎可以下一個初步的結(jié)論,用戶可能對喜劇電影感興趣。進(jìn)而我們是否可以考慮為該用戶推薦喜劇電影呢?有點(diǎn)欠妥,因?yàn)閮H憑一次觀影,數(shù)據(jù)量不足。
但是如果我們根據(jù)用戶的大量歷史行為數(shù)據(jù)發(fā)現(xiàn)該用戶看的電影中喜劇偏多,而此刻我們認(rèn)為用戶對喜劇電影有偏好的結(jié)論似乎就可以站得住腳了。進(jìn)而,我們可以試著給用戶推薦喜劇電影了。
② 商品特征和用戶特征
商品特征源自于對商品不同維度的描述。這里用商品屬性代替。下表中的第一列就是商品屬性(業(yè)界通常把電影電視劇等統(tǒng)稱為媒資,因而后文中牽涉到商品的內(nèi)容將以媒資來描述)。
商品屬性及其屬性值。這個比較好理解。下圖中的【媒資題材】其實(shí)就是屬性的一種,對應(yīng)的屬性值有:喜劇、懸疑、動作等等。
而我們可以通過商品具備的屬性來建立屬于商品固有的特征。商品屬性越多,商品特征越豐富。如:一部喜劇電影和一部成龍主演的喜劇電影。很顯然是后者的特征更豐富。所以我們明確一點(diǎn):屬性是構(gòu)成特征的基本要素。
同理,對于用戶特征亦是如此。通過用戶屬性來建立用戶固有的特征(通常用用戶標(biāo)簽來描述)。下表中是用戶特征的簡要示例。
在說完商品特征/用戶特征以及二者之間的關(guān)系后,我們可以發(fā)現(xiàn)。用戶通過主動行為,與商品發(fā)生關(guān)聯(lián)關(guān)系,從而建立了用戶與商品之間的聯(lián)系,因而這就為我們做商品推薦奠定了基礎(chǔ)。
2)推薦場景及算法邏輯構(gòu)建
① 推薦場景和推薦算法的聯(lián)系
通過上述過程,我們建立了用戶和商品之間的聯(lián)系,剩下的工作就是需要一套自動化的程序?qū)⒍叩年P(guān)系打通。這個自動化程序即我們要說的推薦算法。
方才有提到,推薦的本質(zhì)上是基于數(shù)據(jù)統(tǒng)計推斷。而數(shù)據(jù)我們在這里主要分為兩種:
- 基于用戶基本屬性數(shù)據(jù);
- 基于用戶行為數(shù)據(jù)(包含歷史行為數(shù)據(jù)和實(shí)時行為數(shù)據(jù))。
我們先做個小結(jié):這里所有的推薦算法都是基于上述兩種數(shù)據(jù)完成的。
與此同時,我們不妨再回顧一下:給什么樣的(具有某種特征的用戶)用戶用什么樣的方式(不同場景下的推薦算法)推薦什么樣的(與用戶特征相匹配的商品)商品。
這里需要有一個問題值得思考,為什么推薦算法還需要區(qū)分場景。
這其實(shí)主要源自于應(yīng)用端需求。比如,我打開了某寶,首頁中可能出現(xiàn)了我搜索過的商品種類推薦,而在我下單后可能系統(tǒng)又為我推薦了其他的商品。
這里提到的“首頁狀態(tài)”和“下單后”兩種分別屬于不同的場景。前者是我剛進(jìn)app,系統(tǒng)可能通過我過去的行為數(shù)據(jù)發(fā)現(xiàn)我可能對搜索過的商品比較感興趣,所以為我推薦相關(guān)商品,而后者是系統(tǒng)通過全網(wǎng)用戶數(shù)據(jù)發(fā)現(xiàn)購買了當(dāng)前商品A的用戶同時也購買了另一款產(chǎn)品B,而此時我購買了該商品于是認(rèn)為我可能也會下單商品B,所以為我推薦了商品B。
不同的場景下,需要有對應(yīng)合適的推薦方式。于是我們將推薦場景和推薦算法聯(lián)系到了一起。
我們簡單地整理出示意表格中的實(shí)例:基于不同場景下對用戶數(shù)據(jù)采用特定的推薦算法進(jìn)行計算。
至此,我們還需要完成一項(xiàng)工作才能構(gòu)成一個簡單的推薦系統(tǒng):推薦算法的邏輯。
② 推薦算法的邏輯構(gòu)建
在上述的示例中,我們列舉了部分推薦算法,下面一一說明:
用戶偏好推薦
簡而言之,依據(jù)用戶歷史的行為數(shù)據(jù)推薦他平常喜歡看的內(nèi)容。
還是拿前面說過的:為喜劇電影偏好者推薦喜劇電影。所以我們可以制定量化規(guī)則。
如:我們統(tǒng)計了該用戶過去的觀影數(shù)據(jù),其中觀看【喜劇片】10次,【懸疑片】5次,【戰(zhàn)爭片】4次,【愛情片】1次,那么加起來合計觀影次數(shù)=10+5+4+1=20次,其中按照比例計算分別占比:50%、25%、20%、5%。
那么我們通過現(xiàn)有的數(shù)據(jù)可以觀察到,該用戶的僅有數(shù)據(jù)中顯示其對【喜劇片】和【懸疑片】較為有興趣(這里我們定義從歷史數(shù)據(jù)中取Top2,【喜劇】和【懸疑】符合我們自定規(guī)則),于是當(dāng)用戶下次開機(jī)時,我們有了在首頁為用戶推薦一定數(shù)量的【喜劇片】和【懸疑片】的依據(jù)。上述,大概是簡單的用戶偏好推薦算法。
協(xié)同過濾推薦
這里我就不獻(xiàn)丑了。這種推薦算法比較經(jīng)典,也是業(yè)界常用的推薦算法。比較典型的案例是:啤酒和尿布。超市人員發(fā)現(xiàn)購買啤酒的用戶同時也購買了尿布。于是這個故事可以寫成:買尿布的家庭中有嬰兒,母親照顧嬰兒,父親去超市買尿布同時也買啤酒。
明星偏好推薦
這里同上述第一項(xiàng)相似,就不再贅述了。主要目的有兩個,一個是篩選出近期比較熱的明星,推薦他的內(nèi)容;另一部分是按照用戶對明星的偏好,推薦用戶偏好的明星的內(nèi)容。
通過上述的推薦算法的規(guī)則的建立,結(jié)合已知的數(shù)據(jù),我們似乎可以為單個用戶做個性化推薦了。下圖所示,但這里只是整個系統(tǒng)的一部分。
3)推薦結(jié)果的過濾和排序
完成了前面的內(nèi)容后,理論上我們可以做出一個較為簡單的推薦系統(tǒng)。但是在實(shí)際業(yè)務(wù)中還會牽涉到兩項(xiàng)比較重要的工作需要完成:過濾和排序。
① 推薦結(jié)果的過濾
這里的過濾:主要是針對媒資庫中剔除不符合業(yè)務(wù)規(guī)則的媒資的過程。而不符合業(yè)務(wù)規(guī)則需要依據(jù)實(shí)際的業(yè)務(wù)來確定,常見的不符合規(guī)則的類型有如下:
- 被加入黑名單的媒資內(nèi)容:加入黑名單后將不再呈現(xiàn)在用戶視野中,故而需要過濾掉。
- 媒資版權(quán)過期:媒資庫中過濾掉版權(quán)過期的內(nèi)容。
- 話題敏感的媒資內(nèi)容:某些時間段或特殊事件引發(fā)的敏感內(nèi)容“下架”。
- 排重過濾:這里的排重過濾也有多種形式,常見的是:推薦系統(tǒng)在最近的一段時間段為用戶推薦過某電影,但是用戶并沒有播放,可能是用戶對該項(xiàng)推薦不感興趣。當(dāng)推薦次數(shù)積累到一定程度時,系統(tǒng)將自動過濾該媒資。
- 其他:這里的過濾條件可能會有多種,主要源自于業(yè)務(wù)需求,故而不再一一列舉。下面的流程圖中是實(shí)際業(yè)務(wù)中需要進(jìn)行過濾的選項(xiàng)。
② 推薦結(jié)果的排序
通過上述過濾,推薦結(jié)果的媒資集合已經(jīng)被清理了一輪。但集合中剩余的內(nèi)容并不是所有的媒資都需要呈現(xiàn)給用戶。用戶的視野是有限的,推薦位的數(shù)量也是有限的,所以我們應(yīng)該從這個集合中再次篩選出比較“易產(chǎn)生興趣”的內(nèi)容,進(jìn)而提升用戶可能對推薦內(nèi)容產(chǎn)生的興趣。
排序的方式有多種,這里只列舉了一部分并且是單一的排序方式。也可以通過算法規(guī)則進(jìn)行綜合排序等,這里只討論單一排序。排序方式包括:
- 熱度排序:媒資集合中所有的媒資按照熱度來排序;
- 評分排序:按照評分大小來排序;
- 上線時間排序:按照上線的時間遠(yuǎn)近來排序;
- 其他。
4)推薦結(jié)果的展示
推薦結(jié)果的展示
在經(jīng)過媒資的過濾和排序后,推薦內(nèi)容已經(jīng)準(zhǔn)備好進(jìn)入用戶的視野了。我們重新整理并對先前的示意圖做一下優(yōu)化,如下:
整個過程相對清晰,但總有點(diǎn)抽象。所以,我打算用一個簡單的示例來進(jìn)行回顧和說明。
延續(xù)上述提到的例子。我們統(tǒng)計了小明過去的觀影數(shù)據(jù),其中觀看【喜劇片】10次、【懸疑片】5次、【戰(zhàn)爭片】4次、【愛情片】1次,那么加起來合計觀影次數(shù)=10+5+4+1=20次,其中按照比例計算分別占比:50%、25%、20%、5%。
那么我們通過現(xiàn)有的數(shù)據(jù)可以觀察到,該用戶的僅有數(shù)據(jù)中顯示其對【喜劇片】和【懸疑片】較為有興趣(這里我們定義從歷史數(shù)據(jù)中取Top2,【喜劇】和【懸疑】符合我們自定規(guī)則)。于是當(dāng)小明下次開機(jī)時,來到了首頁(這里示例默認(rèn)了只使用一種推薦引擎)。此時系統(tǒng)的工作:
a. 從媒資庫中取了1000部【喜劇片】和1000部【懸疑片】,并對兩種類型的電影做了【過濾】,各剩下500部符合業(yè)務(wù)規(guī)則的電影。
b. 系統(tǒng)各將這500部電影按照【熱度】進(jìn)行了排序,原先的無序媒資集合有序了。
但是值得注意的是,這個集合很大,而我們現(xiàn)在首頁的推薦位只有9個。我們需要解決的問題有兩個,一個是我們已經(jīng)知道的,我們1次最多只能推9個,另一個是我們要給小明推薦兩種類型的影片,如何分配數(shù)量。
相信說到這里,大家自有答案。我們按照【喜劇片】50%占比,【懸疑片】25%占比:即【喜劇片】比【懸疑片】=2:1來分配數(shù)量。于是【喜劇片】=9*2/3=6個,【懸疑片】=9*1/3=3個。
c. 如此,我們將媒資集合中【喜劇片】排名前6個影片以及【懸疑片】前3個影片,呈現(xiàn)在小明的眼前。
以上大致是一個簡要的推薦系統(tǒng)的構(gòu)建以及整個過程的描述。
當(dāng)然在實(shí)際的業(yè)務(wù)中,會有偏差,也有一部分重要的問題這里沒有提及。比如:推薦算法種類的多樣性和準(zhǔn)確性;推薦結(jié)果的反饋、推薦效果如何等等。
總而言之,通過整個過程我們大致了解了推薦系統(tǒng)的本質(zhì),也了解到一個簡要的推薦系統(tǒng)如何構(gòu)建以及可能存在的問題和優(yōu)化的方向。如果這個目的實(shí)現(xiàn)了,那么本文的目的也就達(dá)到了。希望對有需要的朋友提供思路,同時也歡迎多多交流。
四、心得:寫在最后
推薦系統(tǒng)對于一個產(chǎn)品經(jīng)理來說不是一個常見的產(chǎn)品,因?yàn)槭忻嫔蠋缀跽也坏筋愃频漠a(chǎn)品,更別說做什么競品分析。因?yàn)槟苁褂玫酵扑]系統(tǒng)的公司往往都是科技巨頭,比如電商平臺淘寶京東PDD、短視頻平臺小破站抖音等或者其他的平臺型公司,主要原因在于這些平臺有大量的用戶同時也有大量的信息/商品。
一般的公司是不可能用到這樣的系統(tǒng),自然市面上就沒有較多的參考內(nèi)容,所以整個系統(tǒng)可以看作是一個自主原創(chuàng)的從0到1。
筆者原是一名汽車電子行業(yè)勉強(qiáng)入流的工程師,后通過自學(xué)轉(zhuǎn)行至互聯(lián)網(wǎng)PM。入行前后約一年時間,做的第一個大的項(xiàng)目就是這個推薦系統(tǒng)。這個系統(tǒng)成敗對于我來說很關(guān)鍵,所以也是不惜一切代價,從搞清楚問題到可以解決問題的確耗費(fèi)了很多時間和精力。
而對我來說除了負(fù)責(zé)人對我的指導(dǎo)和紓困外,幫助較大的是兩本書:《推薦系統(tǒng)實(shí)戰(zhàn)—項(xiàng)亮》以及亞里士多德《形而上學(xué)》。前者是基本概念和實(shí)踐思想指導(dǎo)后者是“第一性原理”思想指導(dǎo)。
關(guān)于后者,其實(shí)我想單獨(dú)拿出來多說一句。亞里士多德——古希臘三杰之一,是一名偉大的哲學(xué)家、科學(xué)家……他的這本《形而上學(xué)》是哲學(xué)類的書籍,主要是研究和對事物的本質(zhì)的思考。
講真,我的非功利閱讀區(qū)大多是這類書籍。有意思的是,我自己也不知道什么是哲學(xué)。但我始終認(rèn)同一個觀點(diǎn):哲學(xué)不能幫助我們直接解決實(shí)際問題,但卻能給我們思維的指引。如果這個時候我們再思考一次這個問題:推薦系統(tǒng)是什么??赡芫蜎]那么抽象了。
總的來說,這個產(chǎn)品對我來說最大的價值在于:實(shí)現(xiàn)“知行合一”,即一次較為成功的自我認(rèn)知和實(shí)踐的閉環(huán)。
作者:REVIN
本文由 @雜技演員瑞文 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash,基于CC0協(xié)議
本身推薦系統(tǒng)是重技術(shù)輕產(chǎn)品&運(yùn)營的, 這是該系統(tǒng)的特點(diǎn)決定的。 文章里面少了“召回”相關(guān)的信息。 關(guān)于推薦系統(tǒng)可以去CSDN里面有很多大牛的成熟方案。(題外話:干這個最好能結(jié)合搜索一起做)
感謝推薦。剛?cè)SDN上看了一下,基本都是技術(shù)篇的帖子。所以看起來產(chǎn)品這一部分還真的少有提及。文中使用的是“匹配”來替代“召回”一筆帶過了。一方面是研究不多一方面也非本文重點(diǎn),故而一筆帶過了。站在產(chǎn)品的角度,個人的理解是推薦系統(tǒng)只是數(shù)據(jù)應(yīng)用層面的一個模塊。如果要做應(yīng)用閉環(huán),還需要結(jié)合畫像系統(tǒng),運(yùn)營系統(tǒng),數(shù)據(jù)分析系統(tǒng)等。目前還在琢磨中。