用戶建模#

用戶建模的目標是把「使用者」轉成系統可運算的特徵與向量,作為推薦演算法的輸入。

推薦系統用的是 User Profile(基於真實資料的用戶特徵),不是產品設計用的 Persona(虛擬人物代表)。兩者不要混淆。

用戶畫像的構成#

用戶畫像 = 人口統計學特徵 + 行為特徵 + 興趣標籤
類別範例取得方式
人口統計學年齡、性別、地域、職業用戶註冊、第三方資料
行為特徵瀏覽、點擊、購買、收藏埋點日誌
興趣標籤喜歡科技、愛看電影從文本/行為挖掘

隱式 vs 顯式回饋#

行為資料分兩種,後續章節(協同過濾、矩陣分解)的選型都圍繞這個分類:

類型範例特性
顯式回饋評分、按讚、收藏量少、精準、有偏(活躍用戶才會評)
隱式回饋點擊、停留時間、播放完成率量大、雜訊多、無「不喜歡」訊號

工業界以隱式回饋為主,原因是顯式回饋資料太稀疏,且「用戶說喜歡什麼」往往與「用戶實際做什麼」不一致。

標籤體系設計#

特點說明
層次結構從粗到細,如:數位 ➡️ 手機 ➡️ iPhone
互斥與非互斥性別標籤互斥,興趣標籤不互斥
權重標籤強度,反映興趣程度
時效性興趣會隨時間衰減

從標籤到 Embedding#

傳統用戶畫像用「標籤」表示用戶;現代推薦系統幾乎都改用「向量」(Embedding)。

表示法形式優缺點
標籤{科技: 0.8, 電影: 0.5}可解釋、易維護;無法表達細緻關係
Embedding一條 64~256 維的稠密向量表達力強、可端到端學習;不可解釋

Embedding 是後續所有章節的共通語言:矩陣分解產出 user embedding(第 4 章)、雙塔模型用 user tower 產 embedding(第 7 章)。

短期興趣 vs 長期興趣#

實務上會把用戶建模拆成兩層:

層次來源更新頻率
長期興趣累積行為、人口統計學天/週級
短期興趣最近 N 次瀏覽、Session 行為即時

兩者通常會分別建 embedding,再在排序層融合。

特徵工程基礎#

從「原始資料」到「模型可吃的特徵」之間,有一道必經的加工。推薦系統的特徵又多又雜(ID、數值、類別、文本),處理方式直接決定模型能不能學得動。

類別特徵的編碼#

用戶 ID、標籤 ID、品牌等都是高基數類別特徵(unique 值可能上百萬),不能直接丟進模型:

編碼方式適用直覺
One-hot低基數(性別、年齡段)每個值一個維度,簡單但維度爆炸
Embedding 層高基數(用戶/物品/標籤 ID)把稀疏 ID 壓成稠密低維向量,可學習
特徵雜湊會持續長出新值(新標籤)用 hash 把任意值映到固定桶,省記憶體
分桶(Bucket)連續值想當類別用把年齡切成段、把長尾值併入「其他」

數值特徵的正規化#

用戶特徵的尺度差很大:年齡 0100、CTR 01、點擊數可達百萬。尺度不一致會拖慢甚至卡死訓練:

  • Min-max / Z-score:把不同特徵拉到相近範圍。
  • Log 縮放:點擊數、停留時間常呈長尾(冪律分佈),取 log 後分佈更平滑。

稀疏與特徵交叉#

  • 稀疏性:用戶 - 物品矩陣常 99% 以上是空的,多數類別特徵也極稀疏。Embedding 層正是把「百萬維 one-hot」換成「幾十維稠密向量」的關鍵手段,既省記憶體又能對沒見過的值泛化。
  • 特徵交叉:線性模型假設特徵彼此獨立,但「年齡 25 × 科技興趣」和「年齡 50 × 科技興趣」其實意義不同。手動交叉(age_bucket × interest)可解釋但成本高;深度模型則能自動學到隱式交叉(見 第 6 章)。

用資訊量挑特徵#

面對上百個候選特徵,可用資訊論判斷哪些值得做:

  • 互資訊 I(X;Y) 衡量「知道特徵 X 後,對目標 Y 的不確定性減少多少」,越大越該保留。
  • H(X) 衡量特徵本身的多樣性,太單一(幾乎都同一值)的特徵貢獻有限。

把工程力氣花在高互資訊的特徵上,而不是盲目把所有特徵都做出來。

從文本挖掘用戶興趣#

當行為資料不足時,可以從用戶寫的、看的、按讚的文本中挖標籤。

TF-IDF#

TF-IDF(t,d) = TF(t,d) × IDF(t)

核心:一個詞在某篇文件中出現多、但在整體語料庫中出現少,就是這篇的關鍵詞。

TextRank#

把詞語建成共現圖,套用 PageRank 算每個詞的重要度,取 Top K 為關鍵詞。

命名實體識別(NER)#

從文本中抽出人名、地名、品牌、產品等專有名詞,作為高品質的興趣標籤來源(例如「Apple」「iPhone 15」直接對應到品牌與產品)。

LDA(主題模型)#

假設每篇文件是多個主題的混合,每個主題是多個詞的分佈。輸出:

文件 → 主題分佈 → 詞分佈

實務用途:把「文章」歸到「科技 / 體育 / 政治」這類粗粒度主題,作為使用者興趣的補強訊號。

Word2Vec#

把詞映射到稠密向量,相近語意的詞在向量空間中相近。

模型輸入輸出
CBOW上下文詞中心詞
Skip-gram中心詞上下文詞
from gensim.models import Word2Vec

model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)
vector = model.wv['手機']
similar = model.wv.most_similar('手機')

Word2Vec 的詞向量具加法性質: vector('國王') - vector('男人') + vector('女人') ≈ vector('女王') 這是 Embedding 在文字領域最早被廣泛驗證的重要性質,也啟發了後續 Item2Vec、User2Vec 的做法。

基於內容的推薦#

「基於內容的推薦」嚴格來說是與協同過濾(第 3 章)並列的方法,但因為它只用用戶畫像與物品畫像就能跑,沒有用到「群體智慧」,所以放在這章一起學。

流程#

1. 物品內容分析 → 物品向量
2. 用戶行為彙整 → 用戶向量
3. 計算用戶向量與物品向量的相似度
4. 按相似度排序,回傳 TopK

相似度計算#

方法公式適用場景
餘弦相似度cos(θ) = A·B / (|A||B|)文本、稀疏向量
歐氏距離√(Σ(a_i - b_i)²)稠密向量
Jaccard 相似度|A∩B| / |A∪B|集合比較

優缺點#

優點缺點
不需要其他用戶資料需要物品內容分析
可以推薦新物品(無物品冷啟動)難以發現新興趣(容易過度專業化)
推薦結果可解釋依賴特徵工程品質

用戶興趣衰減#

用戶興趣會隨時間衰減,常用指數衰減:

weight(t) = weight_0 × e^(-λt)

工程上常用「滑動窗口(最近 N 天 / 最近 K 次行為)」作為近似,避免每次都算指數。

時間與上下文特徵#

衰減只處理了「興趣會變舊」,但用戶偏好還有週期性情境性,單靠衰減抓不到:

維度範例特徵做法
一天內時段早上看新聞、晚上看娛樂hour-of-day embedding
一週內節奏工作日看工作、週末看休閒day-of-week one-hot
裝置情境手機看短影音、桌機看長文device × 內容類型 交叉特徵

這些把「同一個用戶在不同情境下是不同的人」這件事顯式建進模型。

冷啟動特徵設計#

新用戶沒有歷史行為,從互動學來的 embedding 直接缺席。冷啟動特徵的設計原則是用「不依賴歷史」的訊號優雅降級

訊號來源範例直覺
人口統計年齡、地域、語言「某地域用戶偏好某類目」的群體先驗
註冊情境裝置、註冊時間、來源渠道從哪來、什麼時候來,本身就帶偏好訊號
首次行為第一次點擊的類目、引導頁選擇首擊類目常與長期興趣高度相關

目標是漸進式:歷史完整時用強個人化特徵,歷史為零時退回人口統計與群體先驗,中間平滑過渡。這也呼應 第 5 章 用探索策略主動為新用戶試探興趣。

實踐建議#

  1. 標籤粒度:太粗沒區分度,太細覆蓋不足。
  2. 多維度組合:人口統計學、行為、文本各有偏差,要混合使用。
  3. 長短期分離:長期興趣穩定,短期興趣即時,分開建模再在排序層融合。
  4. A/B 測試:建模假設一定要靠線上實驗驗證,別憑直覺。

總結#

要點說明
用戶畫像真實用戶資料的結構化表示
資料來源人口統計學 + 行為(隱式為主) + 興趣標籤
表示法從標籤逐步轉向 Embedding
特徵工程類別編碼、正規化、特徵交叉、資訊量選特徵
文本挖掘TF-IDF、TextRank、NER、LDA、Word2Vec
冷啟動用人口統計、註冊情境、首次行為優雅降級
基於內容推薦用戶向量與物品向量的相似度匹配
興趣衰減指數衰減 / 滑動窗口

下一章:協同過濾