推送系統從0到1(八):個性化精準推送的實現
在上一篇,給大家介紹了實現精準推送的第一步:建立用戶畫像,大家可以回顧看看。完成用戶畫像的建立后,想要實現精準推送的簡單很多。本篇將會給大家介紹一些基礎的推薦算法,并以其中基于物品的協同過濾算法為例,詳細講解如何找到用戶最感興趣的內容,從而實現個性化精準推送。文中介紹的推薦算法大部分源自于《推薦系統實踐》一書,書中還詳細講述的通過分析用戶行為,形成用戶標簽并構建用戶畫像的詳細過程,大家可以結合書中的要點和本篇實踐一起了解。
一. 幾種推薦算法
1. 基于內容推薦算法
基于用戶感興趣的物品A,找到和A內容信息相近的物品B
(1)找到物品A的內容信息
(2)找到與內容信息相近的物品B
運用:這種推薦算法多數運用在簡單的推薦列表上,當用戶看了物品A立刻展示推薦關聯的物品B,不需要通過大量計算反饋。但由于其局限性并不能精準推薦出用戶所喜歡的內容。
2. 基于用戶的協同過濾算法(UserCF)
這種算法給用戶推薦和他興趣相似的其他用戶喜歡的物品。
基于用戶的協同過濾算法主要包括兩個步驟:
(1)找到和目標用戶興趣相似的用戶集合。
(2)找到這個集合中的用戶喜歡的,且目標用戶沒有聽說過的物品推薦給目標用戶。
運用:UserCF的推薦結果著重于反映和用戶興趣相似的小群體的熱點,即更社會化,反映了用戶所在的小型興趣群體中物品的熱門程度
3. 基于物品的協同過濾算法(ItemCF)
這種算法給用戶推薦和他之前喜歡的物品相似的物品。
基于物品的協同過濾算法主要分為兩步:
(1)計算物品之間的相似度。
(2)運用:ItemCF的推薦結果著重于維系用戶的歷史興趣,即更個性化,反映了用戶自己的興趣傳承
4. 隱語義模型算法(LFM)
通過隱含特征聯系用戶興趣和物品
LFM是一種基于機器學習的方法,具有比較好的理論基礎。這個方法和基于鄰域的方法相比有更強的理論基礎、離線計算空間、時間的復雜度,并且可以實現在線實時推薦。
5. 其他推薦算法
(1)基于圖的推薦算法
其基本思想是將用戶行為數據表示為一系列的二元組?;谟脩粜袨槎謭D,給用戶u推薦物品,可以轉化為計算用戶頂點u和與所有物品頂點i之間的相關性,然后取與用戶沒有直接邊相連的物品,按照相關性的高低生成推薦列表。
(2)基于關聯規則的推薦
反映一個事物與其他事物之間的相互依存性和關聯性,常用于實體商店或在線電商的推薦系統:通過對顧客的購買記錄數據庫進行關聯規則挖掘,最終目的是發現顧客群體的購買習慣的內在共性。
(3)基于知識推薦
使用用戶知識和產品知識, 通過推理什么產品能滿足用戶需求來產生推薦。這種推薦系統不依賴于用戶評分等關于用戶偏好的歷史數據, 故其不存在冷啟動方面的問題。基于知識的推薦系統響應用戶的即時需求, 當用戶偏好發生變化時不需要任何訓練。
二. 選擇適合的算法
根據使用場景選擇不同的算法,如果是為簡單的物品或者商品詳情頁底部設計推薦功能,即可使用“基于內容推薦算法”,根據當前物品的內容信息推薦相關的物品,當然這個并非是個性化推薦,但確實使用最廣的一種推薦方式。若你的網站是做知識培訓的,那可以嘗試構建基于知識的推薦,這種推薦方式根據用戶需求及用戶所處知識階段進行推薦,更貼合所在場景。
而本篇我主要介紹“基于物品的協同過濾算法”,這個算法與“基于用戶的協同過濾算法”共同被稱為“基于鄰域的協同過濾算法”。下面,我們對這類算法進行簡單的介紹。
1. 基于鄰域的協同過濾算法
從字面上理解“鄰域”在數學上指的是“鄰域是一個特殊的區間,以點a為中心點任何開區間稱為點a的鄰域,記作U(a)”,我們可以簡單的理解為某個集合點中的左右相鄰區間。而“協同過濾”在百度百科上解釋為“利用某興趣相投、擁有共同經驗之群體的喜好來推薦用戶感興趣的信息”。那么“基于鄰域的協同過濾算法”總結一下就是基于某個維度的相鄰區間中利用興趣相投或共同經驗的群體的喜好,找到用戶感興趣的信息。
從某個維度,我們常用用戶或者物品所組成的集合區間,所以基于鄰域的算法分為兩大類,一類是基于用戶的協同過濾算法,另一類是基于物品的協同過濾算法。而基于鄰域的算法是推薦系統中最基本的算法,該算法不僅在學術界得到了深入研究,而且在業界得到了廣泛應用。非常多的個性化推薦算法多使用或混合使用了基于領域的協同過濾算法。可能一些大廠會在這個算法的基礎上加入機器學習的理念,克服這個算法本身的缺點。
2. 用戶畫像與基于鄰域的推薦算法
大家一定記得上一篇向大家介紹了用戶畫像,我們通過用戶行為分析,拆解成用戶標簽,并組合成了用戶畫像。而利用該用戶畫像,我們就可以使用基于鄰域的推薦算法,因為這個算法最核心的一步就是找到用戶的興趣點。
而我們的用戶畫像就可以滿足這個要求,我們可以通過用戶畫像計算用戶之前的相似度,再推薦另外一個用戶感興趣的內容,這就是“基于用戶的協同過濾算法”;我們也可以通過用戶畫像計算出用戶感興趣的物品相似的物品,這就是“基于物品的協同過濾算法”。
再者我們可以混合一起使用。不管怎么說,我在上一篇就提到了構建用戶畫像的好處,此時無論選擇哪種鄰域推薦算法均可使用。而對于我自己,這次選擇了選擇給大家介紹的是“基于物品的協同過濾算法”。如果對其他算法也有興趣,強烈推薦大家可以看看《推薦系統實踐》一書。
圖片引用自《推薦系統實踐》 項亮 編著
3. 基于物品的協同過濾算法
基于物品的協同過濾算法是目前業界應用最多的算法。無論是亞馬遜網,還是Netflix、Hulu、YouTube,其推薦算法的基礎都是該算法。我在前面提到,這個算法主要思路是用戶推薦和他之前喜歡的物品相似的物品。在上一篇文章,我們已經把用戶之前的瀏覽行為都記錄下來,通過分析和標簽化,形成了用戶畫像。那么其實我們已經完成了第一步,掌握用戶之前喜歡的內容。那么第二步即使計算物品相似程度,找到最為相似的物品形成個性化的推薦,再通過推送系統觸達用戶。下面為大家詳細講解計算的過程:
- 找到用戶感興趣的物品
- 與推薦的物品列表逐個物品進行相似度計算
- 選擇相似度最高的物品,并推送給用戶
首先如何找到用戶感興趣的物品,在上一篇我們是通過把內容標簽化,并把標簽賦予用戶。那么我們從用戶畫像中取出一組與推薦物品相關的用戶標簽。即想給用戶推薦商品,那么取出與商品相關的一組用戶標簽,例如是用戶A(茶葉,鐵觀音,清香,100-200元/斤,產地福建,2018新茶,….)。然后我們在取出待推薦的物品列表,以同樣標簽化的方式整理,如下圖:
然后,我們再計算用戶標簽與物品標簽之間的相似度,找到與用戶標簽最為相似的物品。此時我們會使用余弦公式進行計算。余弦公式計算的結果會是余弦夾角,夾角越小則相似度越高,通過計算我們就能用余弦夾角來反應相似度關系。
4. 余弦相似公式的運用
向量的余弦相似度公式和我們在三角函數中學的余弦定理有所不同,但我們在數學中計算向量夾角的時候就學習過。當有兩個向量a和b時,此時我們計算這兩個向量的夾角會使用到“向量的余弦值等于向量的乘積/向量絕對值的乘積”
若把向量拓展到多維度A=(A1,A2,A3,…An),B=(B1,B2,B3,…Bn),此時獲得如下余弦相似度公式
把公式運用到我們上述情況中,則用戶的標簽則是向量A,物品的標簽則是向量B。我們可以通過計算余弦值,確定相似度。余弦相似度公式還常常運用于計算文本相似度。將兩個文本根據他們詞,建立兩個向量,計算這兩個向量的余弦值,就可以知道兩個文本在統計學方法中他們的相似度情況。實踐證明,這是一個非常有效的方法。那么下面我們舉個例子具體嘗試下。假設用戶要買房,那么我們可以推薦什么房子給他。
為大家詳細講述下計算方法:
- 列出用戶的標簽和用于比較物品的標簽。
- 列出所有詞,即用戶標簽和物品標簽中所有的詞,重復/同范圍的詞只需列一遍,不同的詞需要逐個列出。
- 計算詞頻,即用戶標簽和物品標簽在所有詞中出現的次數,若出現則為1次,未出現則為0次。如所有詞中“成屋”,在用戶標簽中出現,則用戶的詞頻為1;在物品中未出現,則物品的詞頻為0。
- 把用戶和物品的詞頻組成向量A和向量B
- 代入余弦相似公式計算向量A與向量B的夾角,結果即為相似度。
下面我用excel為大家模擬計算上圖的結果:
此致我們完成了對一組用戶與物品的相似度計算,后續只需要把物品1輪流替換成需要比對的物品即可,完成后得到用戶與一組物品的相似度。大家其實算下來有感覺到,余弦相似公式在計算標簽的運用上視乎有些“浪費”,因為不管怎么算,用戶的詞頻只會是1和0。所以可以看出余弦相似公式在計算文章內容的相似度或者某些元素非可控集合的相似度中更能突顯出其價值。文章中某個關鍵詞出現5次,那么該關鍵詞的詞頻將會是5,計算結果將會大大的不同。
那么對于我們上面介紹的方法,我們也是可以把詞頻拿來靈活運用的,因為詞頻就類似于權重,我們可以通過調整詞頻來達到提高某個標簽的權重。
如上述情況,用戶對城市極為敏感,那么我們可以把城市的詞頻從1提升到2或3。如果是某些必須相同的標簽,我們可以在提供匹配的物品列表中先進行篩選。其中可以靈活運用的方式還有很多很多,等待大家的挖掘和探索。
三. 實踐中對算法的改造
細心的朋友可能會發現,我這里使用的方法和傳統意義上的基于物品的協同過濾算法有所不同,傳統基于物品的協同過濾算法不會直接使用用戶標簽,而是提前維系好物品與相似物品之前的相似度關聯。而再用用戶行為判斷用戶對當前物品的喜好度。
也就是說,傳統的基于物品協同過濾算法,即便沒有用戶,物品與推薦的物品就已經有了相似度推薦的關系存在。
這也是ItemCF非常大的缺點之一:如果網站的物品很多,那么計算物品相似度矩陣代價很大。
而我使用的是改造版本,即是把物品賦予用戶標簽的與物品計算相似度。這樣的好處是我不用維系龐大的物品相似度關系表,同時具有更大的靈活性。當用戶產生瀏覽行為后,根據分析用戶的標簽,再進行相似度計算。
這個時候大家也就會有疑問,如果沒有提前準備好物品相似度矩陣。那么用戶在第一次進來的時候,或者用戶行為不足以分析的時候。我們就無法給用戶進行推薦了。確實是的,這也是這個方法存在的缺陷,在推薦系統中稱為“冷啟動”。
四. 推薦系統冷啟動問題
正如我上面描述的情況,用戶第一次使用或者用戶行為不足的時候,我們無法通過用戶行為計算出用戶的標簽,也講無法通過基于鄰域的協同過濾算法進行推薦/個性化推送。那么此時我們該怎么解決這個問題呢?其實冷啟動分為三種,即為用戶冷啟動,物品冷啟動,系統冷啟動。我們剛才所描述的問題是用戶冷啟動,也是最常見的一種。
1. 用戶冷啟動
若要解決用戶冷啟動問題,我們只能利用其他方式獲得用戶的興趣,暫時替代用戶的行為。大家一定記得上一篇我在講述獲取用戶畫像的原始數據中提到過,我們可以獲取用戶的信息。那么對于這個問題我們就可以用以下的方法:
- 使用用戶信息:例如用戶注冊信息等
- 使用合適的物品啟動用戶興趣:用合適的物品去試探用戶興趣
當以上方式獲得的信息再進過算法推薦給用戶后,用戶只要產生了交互,那么暨產生了用戶行為。
2. 物品冷啟動
物品冷啟動常見的場景是將新的物品推薦給可能對它感興趣的用戶這一問題,新上架的物品或信息如何能快速投遞給感興趣的用戶,我們可以通過以下兩個方法解決:
- 新上架的物品運用于基于物品過濾協同算法,并提高權重
- 利用物品內容信息,提取內容的關鍵詞(TF-IDF算法),再通過物品推算算法呈現。
3. 系統冷啟動
系統冷啟動多見于新開發的網站上設計個性化推薦系統,此時物品/內容少,用戶少。很多算法無法奏效。那么在這個時候,只能通過專家作用,即通過人工標記的方式制定類別和標簽,人工分類,人工制定權重等方式進行。后續用戶行為及物品產出后,即可更換替代。
4. 實現個性化精準推算
上述講了這么多都是如何通過用戶畫像找到用戶感興趣的內容/物品,那么終于來到精準推送這一步了。用戶已經選定好了,用戶喜歡的物品/內容也選好了。那么這個時候就可以使用推送系統把內容觸達用戶了。在這個過程中所需要注意的是以下幾個問題:
- 推送系統的用戶和用戶畫像的用戶是一致的,即不能算出推送內容卻找不到推給誰。這個時候回顧第二篇,使用設備號作為網站對用戶的唯一標示就顯得更為重要的。
- 選擇活躍用戶推送,冷啟動實現難度較高。所以盡量在用戶產生瀏覽行為后的計算結果推送給用戶,這樣能避免推送內容不是用戶習慣的情況。
- 推送文案可以參考用戶標簽,既然用戶標簽是通過用戶瀏覽行為計算出來的。那么用戶對標簽內容會更為敏感。也許推送文案對勾起用戶興趣幫助更大。
- 推送著陸后的用戶行為,也是用戶畫像用戶行為來源之一。用戶點擊推送消息進到內容頁所產生的用戶行為也將會作為構建用戶畫像的行為來源之一。同時用戶對推送內容的反饋是可以作為用戶喜好度的調節系數之一,這個暫不展開詳細說了,大家有興趣可以去研究看看。
- 推薦的物品/內容盡量是用戶沒看過的。因為不管使用什么算法計算相似度,很可能出現的結果是用戶看過/用戶喜歡的內容與用戶標簽相似度最高。所以進行計算之前,可以考慮把用戶過往瀏覽過的內容/推送過的內容篩掉。
完成以上這些步驟,也就可以基本上實現了個性化的精準推送了,但其實還有很多需要我們去嘗試和研究的,例如用戶活躍度對協同過濾算法計算的影響,以及用戶活躍度對推送的影響。用戶的興趣隨著時間的逐步衰減,推送的點擊意愿隨著用戶沉默的時間越來越低;等等….這里就不展開詳細說明了,如果大家有興趣,我們可以再進行詳細交流。
本篇總結
本篇主要為大家介紹了如何通過推薦算法,實現個性化的精準推送??偨Y成以下幾點:
- 介紹幾種基本的推薦算法:基于內容推薦算法、基于鄰域協同過濾算法、隱語義模型算法等等。
- 介紹了用戶畫像與基于鄰域的推薦算法的關系,把上一篇與本篇鏈接起來。
- 重點介紹了基于的物品協同過濾算法
- 通過余弦相似度公式計算用戶標簽與物品相似度
- 推薦算法冷啟動問題
- 實現個性化精準推送需要注意的問題
下一篇講會為大家介紹推送運營面知識,關于推送時間、人物、文案的思考。
相關閱讀
本文由 @番茄那只羊 原創發布于人人都是產品經理。未經許可,禁止轉載。
題圖來自pixabay,基于CC0協議
請問個性化推送如何建立個性化文案呢,比如自動給用戶發個性化推薦的內容,文案如何做到自動個性化
應該是創建規則,然后機器自動生成吧
很用心的分享 對于小白的我居然都看懂了,感謝分享 ??