推送系統從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)基於圖的推薦演算法
其基本思想是將使用者行為資料表示為一系列的二元組。基於使用者行為二分圖,給使用者u推薦物品,可以轉化為計算使用者頂點u和與所有物品頂點i之間的相關性,然後取與使用者沒有直接邊相連的物品,按照相關性的高低生成推薦列表。
(2)基於關聯規則的推薦
反映一個事物與其他事物之間的相互依存性和關聯性,常用於實體商店或線上電商的推薦系統:通過對顧客的購買記錄資料庫進行關聯規則挖掘,最終目的是發現顧客群體的購買習慣的內在共性。
(3)基於知識推薦
使用使用者知識和產品知識, 通過推理什麼產品能滿足使用者需求來產生推薦。這種推薦系統不依賴於使用者評分等關於使用者偏好的歷史資料, 故其不存在冷啟動方面的問題。基於知識的推薦系統響應使用者的即時需求, 當用戶偏好發生變化時不需要任何訓練。
二. 選擇適合的演算法
根據使用場景選擇不同的演算法,如果是為簡單的物品或者商品詳情頁底部設計推薦功能,即可使用“基於內容推薦演算法”,根據當前物品的內容資訊推薦相關的物品,當然這個並非是個性化推薦,但確實使用最廣的一種推薦方式。若你的網站是做知識培訓的,那可以嘗試構建基於知識的推薦,這種推薦方式根據使用者需求及使用者所處知識階段進行推薦,更貼合所在場景。
而本篇我主要介紹“基於物品的協同過濾演算法”,這個演算法與“基於使用者的協同過濾演算法”共同被稱為“基於鄰域的協同過濾演算法”。下面,我們對這類演算法進行簡單的介紹。
1. 基於鄰域的協同過濾演算法
從字面上理解“鄰域”在數學上指的是“鄰域是一個特殊的區間,以點a為中心點任何開區間稱為點a的鄰域,記作U(a)”,我們可以簡單的理解為某個集合點中的左右相鄰區間。而“協同過濾”在百度百科上解釋為“利用某興趣相投、擁有共同經驗之群體的喜好來推薦使用者感興趣的資訊”。那麼“基於鄰域的協同過濾演算法”總結一下就是 基於某個維度的相鄰區間中利用興趣相投或共同經驗的群體的喜好,找到使用者感興趣的資訊。
從某個維度,我們常用使用者或者物品所組成的集合區間,所以基於鄰域的演算法分為兩大類,一類是基於使用者的協同過濾演算法,另一類是基於物品的協同過濾演算法。而基於鄰域的演算法是推薦系統中最基本的演算法,該演算法不僅在學術界得到了深入研究,而且在業界得到了廣泛應用。非常多的個性化推薦演算法多使用或混合使用了基於領域的協同過濾演算法。可能一些大廠會在這個演算法的基礎上加入機器學習的理念,克服這個演算法本身的缺點。
2. 使用者畫像與基於鄰域的推薦演算法
大家一定記得上一篇向大家介紹了使用者畫像,我們通過使用者行為分析,拆解成使用者標籤,並組合成了使用者畫像。而利用該使用者畫像,我們就可以使用基於鄰域的推薦演算法 ,因為這個演算法最核心的一步就是找到使用者的興趣點。
而我們的使用者畫像就可以滿足這個要求,我們可以通過使用者畫像計算使用者之前的相似度,再推薦另外一個使用者感興趣的內容,這就是“基於使用者的協同過濾演算法”;我們也可以通過使用者畫像計算出使用者感興趣的物品相似的物品,這就是“基於物品的協同過濾演算法”。
再者我們可以混合一起使用。不管怎麼說,我在上一篇就提到了構建使用者畫像的好處,此時無論選擇哪種鄰域推薦演算法均可使用。而對於我自己,這次選擇了選擇給大家介紹的是“基於物品的協同過濾演算法”。如果對其他演算法也有興趣,強烈推薦大家可以看看《推薦系統實踐》一書。
圖片引用自《推薦系統實踐》 項亮 編著
3. 基於物品的協同過濾演算法
基於物品的協同過濾演算法是目前業界應用最多的演算法。無論是亞馬遜網,還是Netflix、Hulu、YouTube,其推薦演算法的基礎都是該演算法。我在前面提到,這個演算法主要思路是使用者推薦和他之前喜歡的物品相似的物品。在上一篇文章,我們已經把使用者之前的瀏覽行為都記錄下來,通過分析和標籤化,形成了使用者畫像。那麼其實我們已經完成了第一步,掌握使用者之前喜歡的內容。那麼第二步即使計算物品相似程度,找到最為相似的物品形成個性化的推薦,再通過推送系統觸達使用者。下面為大家詳細講解計算的過程:
- 找到使用者感興趣的物品
- 與推薦的物品列表逐個物品進行相似度計算
- 選擇相似度最高的物品,並推送給使用者
首先如何找到使用者感興趣的物品,在上一篇我們是通過把內容標籤化,並把標籤賦予使用者。那麼我們從使用者畫像中取出一組與推薦物品相關的使用者標籤。即想給使用者推薦商品,那麼取出與商品相關的一組使用者標籤,例如是使用者A(茶葉,鐵觀音,清香,100-200元/斤,產地福建,2018新茶,….)。然後我們在取出待推薦的物品列表,以同樣標籤化的方式整理,如下圖:
然後,我們再計算使用者標籤與物品標籤之間的相似度,找到與使用者標籤最為相似的物品。此時我們會使用餘弦公式進行計算。餘弦公式計算的結果會是餘弦夾角,夾角越小則相似度越高,通過計算我們就能用餘弦夾角來反應相似度關係。
4. 餘弦相似公式的運用
向量的餘弦相似度公式和我們在三角函式中學的餘弦定理有所不同,但我們在數學中計算向量夾角的時候就學習過。當有兩個向量a和b時,此時我們計算這兩個向量的夾角會使用到“向量的餘弦值等於向量的乘積/向量絕對值的乘積”
Line"/>
若把向量拓展到多維度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. 實現個性化精準推算
上述講了這麼多都是如何通過使用者畫像找到使用者感興趣的內容/物品,那麼終於來到精準推送這一步了。使用者已經選定好了,使用者喜歡的物品/內容也選好了。那麼這個時候就可以使用推送系統把內容觸達使用者了。在這個過程中所需要注意的是以下幾個問題:
- 推送系統的使用者和使用者畫像的使用者是一致的,即不能算出推送內容卻找不到推給誰。這個時候回顧第二篇,使用裝置號作為網站對使用者的唯一標示就顯得更為重要的。
- 選擇活躍使用者推送,冷啟動實現難度較高。所以儘量在使用者產生瀏覽行為後的計算結果推送給使用者,這樣能避免推送內容不是使用者習慣的情況。
- 推送文案可以參考使用者標籤,既然使用者標籤是通過使用者瀏覽行為計算出來的。那麼使用者對標籤內容會更為敏感。也許推送文案對勾起使用者興趣幫助更大。
- 推送著陸後的使用者行為,也是使用者畫像使用者行為來源之一。使用者點選推送訊息進到內容頁所產生的使用者行為也將會作為構建使用者畫像的行為來源之一。同時使用者對推送內容的反饋是可以作為使用者喜好度的調節係數之一,這個暫不展開詳細說了,大家有興趣可以去研究看看。
- 推薦的物品/內容儘量是使用者沒看過的。因為不管使用什麼演算法計算相似度,很可能出現的結果是使用者看過/使用者喜歡的內容與使用者標籤相似度最高。所以進行計算之前,可以考慮把使用者過往瀏覽過的內容/推送過的內容篩掉。
完成以上這些步驟,也就可以基本上實現了個性化的精準推送了,但其實還有很多需要我們去嘗試和研究的,例如使用者活躍度對協同過濾演算法計算的影響,以及使用者活躍度對推送的影響。使用者的興趣隨著時間的逐步衰減,推送的點選意願隨著使用者沉默的時間越來越低;等等….這裡就不展開詳細說明了,如果大家有興趣,我們可以再進行詳細交流。
本篇總結
本篇主要為大家介紹瞭如何通過推薦演算法,實現個性化的精準推送。總結成以下幾點:
- 介紹幾種基本的推薦演算法:基於內容推薦演算法、基於鄰域協同過濾演算法、隱語義模型演算法等等。
- 介紹了使用者畫像與基於鄰域的推薦演算法的關係,把上一篇與本篇連結起來。
- 重點介紹了基於的物品協同過濾演算法
- 通過餘弦相似度公式計算使用者標籤與物品相似度
- 推薦演算法冷啟動問題
- 實現個性化精準推送需要注意的問題
下一篇講會為大家介紹推送運營面知識,關於推送時間、人物、文案的思考。