Ⅰ 基於用戶行為分析建立用戶偏好模型
基於用戶行為分析建立用戶偏好模型
我們經常將個性化推薦的思想簡單地抽象為:通過用戶的行為推測出用戶的興趣,從而給用戶推薦滿足他們興趣的物品。那我們其實就是要通過用戶行為分析建立一個用戶偏好(偏好即興趣)模型,模型中包含各個用戶的一個或更多個偏好。
插敘一段
像「用戶行為」,「用戶興趣」這樣的詞,大多數人都有一個默認的感知,甚至對於這種詞的理解可能已固化為常識,所以我很少見到有文章使用這些詞時解釋它們。我感覺涉及到演算法模型時,對這些詞的不加限定的寬泛認知就容易影響對演算法模型的深入理解,會導致感知模糊卻不自知。因為不同人對這些詞的基本理解可能一致,但是拓展理解各不相同。本文會作出限定解釋,且本文所談用戶行為都是指網路(可以是電信網路,互聯網)上的行為。
概念解釋
實體域
當我們想基於用戶行為分析來建立用戶偏好模型時,我們必須把用戶行為和興趣主題限定在一個實體域上。個性化推薦落實在具體的推薦中都是在某個實體域的推薦。比如對於閱讀網站,實體域包括所有的圖書,我們可以稱之為圖書域。其他還有,個性化音樂推薦,個性化電影推薦,個性化資訊推薦等。
用戶行為
用戶在門戶網站點擊資訊,評論資訊,在社交網站發布狀態,評論狀態,在電商網站瀏覽商品,購買商品,點評商品,以及在其他類型網站的種種行為都可是用戶行為。本文所指的用戶行為都是指用戶在某實體域上的行為。比如用戶在圖書域產生的行為有閱讀,購買,評分,評論等。
興趣主題
用戶的興趣維度,同樣是限定在某實體域的興趣,通常可以以標簽的形式來表示。比如,對於圖書閱讀,興趣主題可以是「懸疑」,「科技」,「情感」等等分類標簽。值得一提的是,興趣主題,只是從用戶行為中抽象出來的興趣維度,並無統一標准。比如qq閱讀和豆瓣閱讀的圖書分類標簽大不一樣。而興趣維度的粒度也不固定,就像門戶網站有「新聞」,「體育」,「娛樂」等一級分類,而新聞下有「國內」,「社會」,「國際」二級分類,娛樂下有「明星」,「星座」,「八卦」二級分類。我們選取什麼粒度的興趣空間取決於我們對用戶偏好模型的要求。
興趣空間
在同一層次上興趣維度的集合,比如豆瓣閱讀中,可以用「新上架」,「熱門」,「特價」,「免費」來構成一個興趣空間(當然,如果使用這個興趣空間來表徵用戶的興趣,就太粗了,這里只是假設),也可以用「小說」,「幻想」,「計算機」,「科技」,「歷史」·····「美食」構成一個興趣空間。這是兩種不同的分類維度。如果將「新上架」也加入到後者集合里,就顯然有些莫名其妙。值得一提是,這也並非不可能,這取決於一個如何看待這個集合的問題,如果不把它看作基於內容的分類,而是圖書標簽庫,那麼也是可行的,甚至利於建立更好地模型。本文後面我有提到。
用戶行為數據
項亮在他的《推薦系統實踐》的2.1節有詳細介紹。通常在經過對行為日誌的匯總處理後生成的比較容易理解的數據就是一份描述用戶行為的會話日誌。這種日誌記錄了用戶的各種行為,比如在圖書閱讀app中這些行為主要包括點擊,試讀,購買,閱讀(在本地app中,閱讀行為有可能追蹤不到),評分,評論。
建立用戶偏好模型
基於用戶行為分析建立用戶偏好模型的核心工作就是:將用戶的行為轉換為用戶的偏好。
我們採用矩陣運算的思維方式,以圖書閱讀為例說明。
下圖表示用戶(user)集合:
下圖表示圖書(item)集合:
那麼用戶的行為矩陣可以表達為:
行表示用戶,列表示圖書,我們暫只考慮圖書的購買行為,1表示用戶看過該圖書,0表示用戶沒有看過該圖書。
如何將上述用戶行為矩陣轉化為用戶興趣矩陣(即行代表用戶,列代表興趣維度),一種顯著的方法是我們先確定圖書與興趣維度的對應關系矩陣。而這個的前提是我們確定了使用何種興趣空間。一種常見的方式是專家給出一些樣本的分類結果,也就是一般意義的訓練數據,然後通過分類演算法,得到分類模型,然後應用到其餘數據的分類問題當中,解決其餘大量數據的分類問題。這種分類的特點是一本圖書只被標記為一種類別,假如有3個類別,
那麼圖書-興趣矩陣為:
那麼用戶行為矩陣轉換為用戶興趣矩陣的運算公式即可表示為下圖,行表示用戶,列表示興趣,算出的矩陣再經過歸一化後,每個值就代表某個用戶在某個興趣的偏好權重。
選擇這樣的興趣空間的局限顯而易見:一本圖書只能屬於一個興趣維度。實際情況中,一本圖書通常不只屬於某個分類,並且當圖書的數據巨大時,寄希望於編輯分類可能會越來越難以維持,所以通常是由用戶主動給圖書添加標簽,或者機器基於內容,提取關鍵詞。但是這種形式得到的標簽集會存在同義,生僻,維度過多等情況,需要經過標簽清洗的重要工作。前面已經看到興趣空間的選擇真的是非常重要,直接影響所得到用戶的興趣矩陣。所以同樣的方法都得到了用戶偏好,但是好不好用,就跟這部分工作有關了。
用戶行為加權
上面展示的用戶行為矩陣示例是一個非常簡單的,直接可以從資料庫里提取的例子。而實際中在數據能夠支撐的情況下,我們不可能只考慮一種行為。為了獲得更合理的行為矩陣,我們就需要進行行為加權。比如,A1表示用戶點擊的行為矩陣,A2表示購買的行為矩陣,A3表示評分的行為矩陣,那麼加權矩陣就是:
至於各矩陣的權重跟我們建立用戶偏好模型的目的有關,如果我們更希望找准用戶的品味偏好,那麼權重可能是:a1 < a2 < a3;如果我們更希望用戶購買,那麼權重可能是:a1 < a3 < a2。
其他用戶行為分析方法
上面介紹的方法也算是一種主流的方法。但是從上面介紹的「興趣主題」,「興趣空間」也可以看出作出好的分類並不容易,分類粒度,分類維度等都不好控制,用戶打標簽也需要復雜的標簽清洗工作。在圖書,電影這樣的實體域,我們還可以通過類別給用戶推薦喜歡的物品,而在個性化資訊推薦領域(這里僅舉個例子,資訊推薦應該有其特殊之處),我們不見得能通過類別推薦用戶喜歡的資訊,甚至用戶本身也不在意類別。我們並不需要顯式地構建物品-興趣對應關系矩陣,也可以將用戶和所喜歡類別的物品關聯起來。這就涉及到隱含語義分析技術。這個部分會日後在此文補充。
小總結
以上可以看出基於用戶行為分析的用戶偏好建模的常規方法非常簡單明了。事實上也的確如此,在使用這些方法或者思想編寫程序計算都不是什麼難事。而實際上,我們遇到的問題卻並非是方法本身,而是數據本身。數據方面的兩大問題是稀疏和長尾分布。通常有行為數據用戶很少,而用戶的行為對象也集中在不多的物品上。方法易學,而數據問題只能在實戰中才能深刻體會,才會發現主要的精力和難點都在解決數據的稀疏和長尾上。希望日後能結合實際問題寫寫解決數據問題的文章。
此外,上面雖然是用矩陣運算的思想講述,但我在實際項目中發現其運算的本質其實是對用戶行為的統計。所以在實戰中,不一定要先建矩陣,再做計算,直接在資料庫里使用sql計算非常方便。
Ⅱ 設計一個好的演算法通常要考慮哪些要求
數據結構中評價一個好的演算法,應該從四個方面來考慮,分別是:
一、演算法的正確性。
二、演算法的易讀性。
三、是演算法的健壯性。
四、是演算法的時空效率(運行)。
演算法的設計取決於數據(邏輯)結構,演算法的實現取決於所採用的存儲結構。數據的存儲結構本質上是其邏輯結構在計算機存儲器中的實現。為了全面反映一個數據的邏輯結構,它在內存中的影像包括兩個方面,即數據元素之間的信息和數據元素之間的關系。
不同的數據結構有相應的操作。數據的操作是在數據的邏輯結構上定義的操作演算法,如檢索、插入、刪除、更新和排序。
(2)用戶喜好分析演算法擴展閱讀
該演算法的一般性質包括:
1.通用性對於任何符合輸入類型的輸入數據,都可以根據演算法解決問題,並且包保證了計算結構的正確性。
2.演算法的每一條指令都必須能夠被人或機器執行。
3.確定性演算法應該在每一步之後都有明確的下一步指示。也就是說,確保每個步驟都有下一步行動的指示,不缺少或只包含含糊的下一步行動指示。
4.有限演算法的執行必須在有限步結束。