簡介#
線上廣告(online advertising)讓廣告主可以在平台上競標並投放廣告,以獲取可量化的回應,例如曝光(impression)、點擊(click)和轉換(conversion)。向使用者展示相關廣告是 Google、Facebook、Instagram 等眾多線上平台的核心功能。

本章將設計一個廣告點擊預測(ad click prediction,又稱點擊率預測 click-through rate prediction)系統,類似於主流社群媒體平台所使用的系統。
需求釐清#
以下是候選人與面試官之間的典型互動。
候選人:我可以假設建立廣告預測系統的商業目標是最大化收益嗎?
面試官:是的,沒錯。
候選人:廣告有不同類型,例如影片和圖片廣告。此外,廣告可以用不同大小和格式展示,例如使用者動態時報、彈出式廣告等。為簡化起見,我可以假設廣告僅放置在使用者的動態時報上,且每次點擊產生相同收益嗎?
面試官:聽起來不錯。
候選人:系統可以向同一使用者展示同一則廣告超過一次嗎?
面試官:可以。有時候廣告在多次曝光後才會被點擊。實務上,公司會設定「疲勞期」(fatigue period),即如果使用者反覆忽略某則廣告,在 X 天內不再向該使用者展示。為簡化起見,假設沒有疲勞期。
候選人:我們是否支援「隱藏此廣告」功能?那「封鎖此廣告主」呢?這類負面回饋有助於偵測不相關的廣告。
面試官:好問題。假設使用者可以隱藏不喜歡的廣告。「封鎖此廣告主」是個有趣的功能,但目前不需要支援。
候選人:可以假設訓練資料集應使用使用者和廣告資料來建構,而標籤基於使用者與廣告的互動嗎?
面試官:當然。
候選人:我們可以透過使用者點擊來建構正樣本,但如何產生負樣本?可以假設任何未被點擊的曝光就是負樣本嗎?如果使用者快速滑過而沒有看到廣告呢?如果我們將某次曝光計為負樣本,但最終使用者點擊了它呢?
面試官:這些都是很好的問題,你怎麼看?
候選人:如果廣告在使用者螢幕上可見一定時間但未被點擊,可以計為負樣本。另一種方法是假設曝光為負樣本,直到觀察到點擊為止。此外,也可以依賴「隱藏此廣告」等負面回饋來標記負樣本。
面試官:有道理!實務上可能使用更複雜的技術來標記負樣本。本次面試就按你的建議進行。
候選人:在廣告點擊預測系統中,模型持續從新互動中學習至關重要。假設持續學習(continual learning)是必要的,合理嗎?
面試官:很好的觀點。實驗顯示,即使模型更新延遲 5 分鐘也可能損害效能。
問題總結:設計一個廣告點擊預測系統,商業目標為最大化收益。廣告僅放置在使用者動態時報上,每次點擊產生相同收益。模型需要持續在新互動資料上訓練。資料集由使用者與廣告資料構建,標籤基於互動行為。本章不討論 AdTech 特定主題,相關知識請參考。
將問題建構為 ML 任務#
定義 ML 目標#
廣告點擊預測系統的目標是透過向使用者展示更可能被點擊的廣告來增加收益。這可以轉化為以下 ML 目標:預測廣告是否會被點擊。透過正確預測點擊機率,系統可以向使用者展示相關廣告,進而提升收益。
指定系統的輸入與輸出#
廣告點擊預測系統以使用者為輸入,輸出根據點擊機率排序的廣告排名清單。

選擇 ML 類別#
圖 8.2 說明了廣告預測如何被建構為排序問題(ranking problem)。如第 7 章所述,逐點排序學習(pointwise Learning to Rank, LTR)是解決排序問題的良好起點。逐點 LTR 使用二元分類模型,以 $\langle$ user, ad $\rangle$ 配對作為輸入,預測使用者是否會點擊該廣告。圖 8.3 顯示模型的輸入與輸出。

資料準備#
資料工程#
系統中可用的原始資料包括:
- 廣告(Ads)
- 使用者(Users)
- 使用者-廣告互動(User-ad interactions)
廣告#
廣告資料如表 8.1 所示。實務上每則廣告可能有數百個屬性,此處僅列出重要的欄位。
| Ad ID | Advertiser ID | Ad group ID | Campaign ID | Category | Subcategory | Images or Videos |
|---|---|---|---|---|---|---|
| 1 | 1 | 4 | 7 | travel | hotel | http://cdn.mysite.com/u1.jpg |
| 2 | 7 | 2 | 9 | insurance | car | http://cdn.mysite.com/t3.mp4 ↗ |
| 3 | 9 | 6 | 28 | travel | airline | http://cdn.mysite.com/t5.jpg |
表 8.1:廣告資料
使用者#
使用者資料的 schema 如下所示。
| ID | Username | Age | Gender | City | Country | Language | Time zone |
|---|
表 8.2:使用者資料 schema
使用者-廣告互動#
此表儲存使用者與廣告的互動,例如曝光、點擊和轉換。
| User ID | Ad ID | Interaction type | Dwell time | Location (lat, long) | Timestamp |
|---|---|---|---|---|---|
| 11 | 6 | Impression | 5sec | 38.8951, -77.0364 | 165845053 |
| 11 | 7 | Impression | 0.4 sec | 41.9241, -89.0389 | 1658451365 |
| 4 | 20 | Click | - | 22.7531, 47.9642 | 1658435948 |
| 11 | 6 | Conversion | - | 22.7531, 47.9642 | 1658451849 |
表 8.3:使用者-廣告互動資料
特徵工程#
本節目標是設計有助於預測使用者點擊的特徵。
廣告特徵#
廣告特徵包括:
- ID 類特徵
- 圖片/影片
- 類別與子類別
- 曝光數與點擊數
以下逐一說明。
ID 類特徵#
包含廣告主 ID、活動 ID、廣告群組 ID、廣告 ID 等。
- 重要性:這些 ID 代表廣告主、活動、廣告群組和廣告本身,用作預測特徵以捕捉不同實體的獨特特性。
- 準備方式:使用 embedding layer 將稀疏特徵(如 ID)轉換為密集特徵向量。每種 ID 類型有各自的 embedding layer。
圖片/影片#
- 重要性:廣告中的影片或圖片可以幫助預測廣告內容。例如,一張飛機圖片可能表示廣告與旅遊相關。
- 準備方式:先對圖片或影片進行預處理,再使用預訓練模型(如 SimCLR)將非結構化資料轉換為特徵向量。
廣告類別與子類別#
由廣告主提供的廣告類別與子類別,例如 Arts & Entertainment、Autos & Vehicles、Beauty & Fitness 等。
- 重要性:幫助模型理解廣告所屬的類別。
- 準備方式:由廣告主根據預定義的類別清單手動提供。文字資料的準備方式可參考第 4 章。
曝光數與點擊數#
- 廣告的總曝光/點擊數
- 廣告主所提供之所有廣告的總曝光/點擊數
- 活動的總曝光數
重要性:這些數字反映其他使用者對該廣告的反應。例如,高點擊率(CTR)的廣告更可能被點擊。

使用者特徵#
與前幾章類似,選擇以下特徵:
- 人口統計資訊:年齡、性別、城市、國家等
- 情境資訊:裝置、時段等
- 互動相關特徵:已點擊的廣告、使用者歷史互動統計等
以下進一步說明互動相關特徵。
已點擊的廣告#
使用者先前點擊過的廣告。
- 重要性:先前的點擊反映使用者興趣。例如,經常點擊保險相關廣告的使用者,可能再次點擊類似廣告。
- 準備方式:與「廣告特徵」中描述的方式相同。
使用者歷史互動統計#
使用者的歷史互動數據,例如廣告總瀏覽數和廣告點擊率。
- 重要性:個人的歷史互動是未來互動的良好預測指標。通常,過去經常點擊廣告的使用者未來也更可能點擊。
- 準備方式:互動統計以數值表示,透過縮放(scaling)將其值調整至相近範圍。

高基數分類特徵的挑戰:廣告點擊預測系統通常處理大量高基數分類特徵(high cardinality categorical features)。例如「廣告類別」的值來自龐大的類別清單,「廣告主 ID」和「使用者 ID」可能有數百萬個唯一值。由於特徵空間龐大,通常有數千甚至數百萬個特徵大部分為零。模型選擇章節會介紹克服此挑戰的技術。
模型開發#
模型選擇#
如「將問題建構為 ML 任務」一節所述,選用二元分類模型來解決排序問題。以下是廣告點擊預測系統中常見的模型選擇:
- Logistic regression(LR)
- Feature crossing + LR
- Gradient boosted decision trees(GBDT)
- GBDT + LR
- Neural networks(NN)
- Deep & Cross networks(DCN)
- Factorization Machines(FM)
- Deep Factorization Machines(DeepFM)
Logistic Regression(LR)#
LR 使用特徵的線性組合來建模二元結果的機率,訓練快速且易於實作。然而在廣告點擊預測中有以下缺點:
- 無法解決非線性問題:LR 使用線性決策邊界,但廣告點擊預測的資料通常非線性可分,因此表現可能較差。
- 無法捕捉特徵交互:LR 無法建模特徵間的交互作用。在廣告預測中,特徵交互非常常見——一個特徵的效果取決於另一個特徵的值時,輸出機率無法簡單表示為各特徵效果之和。
鑑於以上缺點,LR 並非最佳選擇,但因其實作快速、訓練簡單,許多公司仍用它建立基線模型(baseline model)。
Feature Crossing + LR#
為了更好地捕捉特徵交互,使用一種稱為 feature crossing 的技術。
什麼是 feature crossing?
Feature crossing 是透過組合兩個或多個現有特徵來建立新特徵的技術,可以取其乘積、總和或其他組合。透過這種方式可以捕捉原始特徵間的非線性交互,提升模型效能。例如「年輕且喜歡籃球」或「美國且喜歡足球」等交互可能有助於預測點擊機率。
如何建立 feature crosses?
根據先驗知識手動新增特徵。如圖 8.6 所示,將「國家」和「語言」兩個特徵交叉,會新增六個特徵至現有特徵空間。詳情可參考。

如何使用 feature crossing + LR?
如圖 8.7 所示,步驟如下:
- 對原始特徵進行 feature crossing 以產生新特徵(交叉特徵)
- 將原始特徵和交叉特徵一同輸入 LR 模型

此方法允許模型捕捉特定的成對(二階)特徵交互,但有以下缺點:
- 手動流程:需要人工選擇交叉的特徵,耗時且成本高。
- 需要領域知識:需要事先理解問題和特徵空間,才能判斷哪些特徵交互是有效的預測訊號。
- 無法捕捉複雜交互:交叉特徵可能不足以捕捉來自數千個稀疏特徵的所有複雜交互。
- 稀疏性:原始特徵本身可能是稀疏的,feature crossing 會使交叉特徵的基數更大,導致更嚴重的稀疏性。
鑑於以上缺點,此方法並非廣告預測系統的理想解決方案。
Gradient-Boosted Decision Trees(GBDT)#
第 7 章已介紹過 GBDT,此處僅探討其應用於廣告點擊預測系統的優缺點。
優點:
- GBDT 具有可解釋性,易於理解
缺點:
- 持續學習效率低:廣告點擊預測系統持續收集新資料。要在新資料上持續訓練模型,通常有兩種選擇:1)從頭訓練,或 2)在新資料上微調。GBDT 並非為微調設計,因此通常需要從頭訓練,在大規模場景下效率低。
- 無法訓練 embedding layer:廣告預測系統常有大量稀疏分類特徵,embedding layer 是有效的表示方式,但 GBDT 無法使用 embedding layer。
GBDT + LR#
此方法分為兩個步驟:
- 訓練 GBDT 模型學習任務
- 不直接用訓練好的模型進行預測,而是用它來選擇和提取新的預測特徵。新產生的特徵與原始特徵一起作為 LR 模型的輸入來預測點擊
用 GBDT 進行特徵選擇
特徵選擇旨在將輸入特徵減少至最有用和最具資訊量的子集。透過決策樹,可以根據特徵重要性選擇特徵子集。詳情可參考。
用 GBDT 進行特徵提取
特徵提取的目的是透過從現有特徵建立新特徵來減少特徵數量,新提取的特徵預期具有更好的預測能力。圖 8.8 說明如何使用 GBDT 提取特徵。

GBDT 搭配 LR 的整體架構如圖 8.9 所示。

優點:
- GBDT 產生的新特徵比原始特徵更具預測力,使 LR 模型更容易學習任務
缺點:
- 無法捕捉複雜交互:與 LR 類似,此方法無法學習成對特徵交互。
- 持續學習速度慢:微調 GBDT 模型需要時間,拖慢整體持續學習的速度。
Neural Network(NN)#
NN 是建構廣告點擊預測系統的另一個候選方案。使用 NN 預測點擊機率有兩種架構選擇:
- 單一 NN
- 雙塔架構(Two-tower architecture)
單一 NN:以原始特徵為輸入,神經網路輸出點擊機率(圖 8.10)。

雙塔架構:使用兩個編碼器——使用者編碼器和廣告編碼器。透過廣告嵌入和使用者嵌入之間的相似度來判斷相關性(即點擊機率)。圖 8.11 顯示此架構的概覽。

儘管 NN 有許多優點,但在廣告點擊預測系統中可能不是最佳選擇:
- 稀疏性:特徵空間通常龐大且稀疏,大部分特徵為零。$\mathrm{NN}$ 可能因缺乏足夠的資料點而無法有效學習任務。
- 難以捕捉所有成對特徵交互:由於特徵數量龐大。
鑑於這些限制,我們不選用 NN。
Deep & Cross Network(DCN)#
2017 年,Google 提出了 DCN 架構,能自動發現特徵交互,解決了手動 feature crossing 的問題。此方法使用兩個平行網路:
- Deep network:使用 DNN 架構學習複雜且具泛化能力的特徵
- Cross network:自動捕捉特徵交互並學習良好的 feature crosses
兩個網路的輸出被串接(concatenate)後進行最終預測。
DCN 架構有兩種類型:堆疊式(stacked)和平行式(parallel)。圖 8.12 顯示平行式 DCN 的架構。堆疊式架構可參考。面試中通常不需要提供 DCN 的詳細實作,若有興趣可參考。

DCN 比純神經網路更有效,因為它能隱式學習 feature crosses。然而,cross network 僅建模特定的特徵交互,可能影響整體效能。
Factorization Machines(FM)#
FM 是一種基於嵌入的模型,透過自動建模所有成對特徵交互來改進 logistic regression。在廣告點擊預測系統中,FM 因能高效建模複雜的特徵交互而被廣泛使用。
FM 的運作原理:為每個特徵學習一個 embedding 向量,兩個特徵之間的交互由其嵌入的內積(dot product)決定。公式如下:
$\hat{y}(x)=w_0+\sum_i w_i x_i+\sum_i \sum_j\langle v_i, v_j\rangle x_i x_j$
其中 $x_i$ 為第 $i$ 個特徵,$w_i$ 為學習到的權重,$v_i$ 為第 $i$ 個特徵的嵌入向量。$\langle v_i, v_j \rangle$ 表示兩個嵌入向量的內積。
此公式實際上易於理解:
- 前兩項計算特徵的線性組合,類似 logistic regression
- 第三項建模成對特徵交互
$\hat{y}(x)=\underbrace{w_0+\sum_i w_i x_i}{\text{Logistic regression}}+\underbrace{\sum_i \sum_j\langle v_i, v_j\rangle x_i x_j}{\text{Pairwise interactions}}$
圖 8.13 顯示 FM 的高階概覽,詳情可參考。

FM 及其變體(如 FFM)能有效捕捉成對特徵交互,但與神經網路不同,FM 無法學習複雜的高階特徵交互。下一個方法將結合 FM 和 DNN 來克服此問題。
Deep Factorization Machines(DeepFM)#
DeepFM 結合了 NN 和 FM 的優勢:
- DNN 網路:捕捉複雜的高階特徵
- FM:捕捉低階的成對特徵交互
圖 8.14 顯示 DeepFM 的高階架構,詳情可參考。

一種可能的改進是結合 GBDT 和 DeepFM:GBDT 將原始特徵轉換為更具預測力的特徵,DeepFM 在新特徵上運作。此方法曾贏得多項廣告預測系統競賽。然而,加入 GBDT 會拖慢訓練和推論速度,也會減緩持續學習流程。
實務上,通常透過實驗來選擇合適的模型。我們的做法是:
- 先用簡單的 LR 建立基線
- 接著實驗 DCN 和 DeepFM,兩者在業界都被廣泛使用
模型訓練#
建構資料集#
對每次廣告曝光,建構一個新的資料點。輸入特徵由使用者和廣告資料計算而來,標籤按以下策略指定:
- 正標籤:若使用者在廣告展示後 $t$ 秒內點擊了廣告,標記為「正」。$t$ 為超參數,可透過實驗調整。
- 負標籤:若使用者在 $t$ 秒內未點擊廣告,標記為「負」。
實務上,公司會使用更複雜的方法來找到最佳的負樣本標記策略,詳情可參考。

為了讓模型適應新資料,必須持續訓練。因此需要利用新互動持續產生新的訓練資料點。持續學習將在服務(serving)章節進一步討論。
選擇損失函數#
由於訓練的是二元分類模型,選擇交叉熵(cross-entropy)作為分類損失函數。
評估#
離線指標#
評估廣告點擊預測系統通常使用兩個指標:
- 交叉熵(Cross-Entropy, CE)
- 標準化交叉熵(Normalized Cross-Entropy, NCE)
CE#
此指標衡量模型預測機率與真實標籤的接近程度。理想系統對負類預測 0、正類預測 1 時,CE 為零。CE 越低,預測準確度越高。公式為:
$H(p, q)=-\sum_{c=1}^C p_c \log q_c$
其中 $p$ 為真實值,$q$ 為預測機率,$C$ 為類別總數。
對於二元分類,CE 公式可改寫為:
$H(p, q)=-\sum_i p_i \log q_i=-\sum_i\left(y_i \log \hat{y}_i+\left(1-y_i\right) \log \left(1-\hat{y}_i\right)\right)$
其中 $y_i$ 為第 $i$ 個資料點的真實標籤,$\hat{y}_i$ 為第 $i$ 個資料點的預測機率。
具體範例如圖 8.16 所示。

CE 除了作為評估指標外,也常用作分類任務中的標準損失函數。
NCE#
NCE 是模型 CE 與背景 CTR(訓練資料中的平均 CTR)CE 之比。換言之,NCE 將模型與一個始終預測背景 CTR 的簡單基線進行比較:
- NCE 低:模型優於簡單基線
- $NCE \geq 1$:模型表現不如簡單基線
$\text{Normalized cross entropy}=\frac{CE(\text{ML model})}{CE(\text{Simple baseline})}$
具體範例如圖 8.17 所示。簡單基線模型始終預測 $0.6$(訓練資料中的 CTR),此時 NCE 值為 $0.324$(小於 1),表示模型 A 優於簡單基線。

線上指標#
以下是線上評估中可能使用的指標:
- CTR
- 轉換率(Conversion rate)
- 收益提升(Revenue lift)
- 隱藏率(Hide rate)
CTR#
衡量已點擊廣告與展示廣告總數的比率。
$CTR=\frac{\text{Number of clicked ads}}{\text{Number of shown ads}}$
CTR 是廣告點擊預測系統的優良線上指標,因為最大化使用者點擊廣告直接關聯到收益增長。
轉換率#
衡量轉換數與展示廣告總數的比率。
$\text{Conversion rate}=\frac{\text{Number of conversions}}{\text{Number of impressions}}$
此指標很重要,因為它反映廣告主實際從系統中獲益的次數。如果廣告未帶來轉換,廣告主最終會失去興趣並停止投放。
收益提升#
衡量收益隨時間的增長百分比。
隱藏率#
衡量使用者隱藏的廣告數與展示廣告總數的比率。
$\text{Hide rate}=\frac{\text{Number of ads hidden by users}}{\text{Number of shown ads}}$
此指標有助於了解系統向使用者展示了多少不相關的廣告(即偽陽性)。
服務架構#
在服務階段,系統負責輸出按點擊機率排序的廣告清單。圖 8.18 顯示提議的 ML 系統設計。以下分別說明各 pipeline:
- 資料準備 pipeline
- 持續學習 pipeline
- 預測 pipeline

資料準備 pipeline#
資料準備 pipeline 執行以下兩項任務:
- 計算線上和批次特徵
- 從新廣告和互動持續產生訓練資料
特徵計算使用以下兩種方式:
批次特徵計算
部分特徵是靜態的,甚少變動。例如廣告的圖片和類別是靜態特徵。此元件定期(如每幾天或幾週)以批次作業計算靜態特徵,並儲存至 feature store。由於特徵已預先計算,可提升服務階段的系統效能。
線上特徵計算
部分特徵是動態的,變動頻繁。例如廣告的曝光數和點擊數是動態特徵。這些特徵需要在查詢時計算,此元件負責計算動態特徵。
持續學習 pipeline#
根據需求,模型的持續學習至關重要。此 pipeline 負責:
- 在新訓練資料上微調模型
- 評估新模型
- 若指標改善則部署模型
確保預測 pipeline 始終使用適應最新資料的模型。
預測 pipeline#
預測 pipeline 以查詢使用者為輸入,輸出按點擊機率排序的廣告清單。由於模型依賴的部分特徵是動態的,無法使用批次預測,而是採用線上預測(online prediction)逐一處理請求。
如同前幾章所述,預測 pipeline 採用兩階段架構:
- 候選生成服務(Candidate generation service):高效地將可用廣告池縮減為小型候選子集。此處使用廣告主常提供的廣告定向條件(如目標年齡、性別、國家)。
- 排序模型(Ranking model):從候選生成服務取得候選廣告,根據點擊機率排序並輸出排名最高的廣告。此元件與 feature store 和線上特徵計算元件互動。取得靜態和動態特徵後,排序服務使用模型預測每個候選廣告的點擊機率,並據此排序輸出最高點擊機率的廣告。
- 重新排序服務(Re-ranking service):加入額外邏輯和啟發式規則修改廣告清單。例如,移除非常相似的廣告以增加多樣性。
其他討論主題#
若面試尚有剩餘時間,以下是可與面試官討論的議題:
- 在排序和推薦系統中,避免資料洩漏(data leakage)至關重要
- 廣告點擊預測系統中模型需要被校準(calibrated)。討論模型校準及相關技術
- FM 的常見變體是 Field-aware Factorization Machine(FFM),可討論 FFM 與 FM 的差異
- DeepFM 的常見變體是 XDeepFM,可討論 XDeepFM 與 DeepFM 的差異
- 我們已說明廣告點擊預測系統為何需要持續學習,但在新資料上持續學習可能導致災難性遺忘(catastrophic forgetting)。可討論其定義與常見解決方案