广告推荐模型1:逻辑回归(Logistic Regression,LR)
目录
一、LR模型的核心思想:为什么它是广告点击率预估的基石?
二、一个详细的例子:预测用户是否会点击游戏广告
三、LR在广告系统中的优缺点
一、LR模型的核心思想:为什么它是广告点击率预估的基石?
逻辑回归(Logistic Regression)本质上是一个广义线性模型,它解决的是二分类问题,尤其是输出为概率的问题。
在广告推荐中,核心问题之一就是:“给这个用户在这个位置上展示这个广告,他/她点击的概率有多大?” 这是一个典型的二分类问题(点击/不点击)。LR正是解决这个问题的绝佳起点。
它的工作流程可以分解为三步:
1.线性加权求和:将输入的特征(如用户年龄、广告类别等)乘以对应的权重(w
),再加上一个偏置项(b
),得到一个线性分数 z
。
-
z = w₁*x₁ + w₂*x₂ + ... + wₙ*xₙ + b
-
w
的大小代表了特征的重要性。w
越大,说明这个特征对是否点击的影响越大。
2.Sigmoid函数映射:将这个线性分数 z
通过一个Sigmoid函数,压缩到0和1之间,得到一个概率值。
-
p = Sigmoid(z) = 1 / (1 + e^{-z})
-
这个
p
就是模型预测出的点击概率(pCTR)。
3.决策与学习:设定一个阈值(通常为0.5),如果 p > 0.5
,则预测为“点击”,否则预测为“不点击”。模型通过梯度下降等算法,利用实际点击数据(标签)来不断调整权重 w
和 b
,使得预测概率 p
越来越接近真实情况。
二、一个详细的例子:预测用户是否会点击游戏广告
假设我们是某个短视频平台(比如TikTok),要决定是否给用户Alice在信息流中展示一条《王者荣耀》的游戏广告。
第一步:特征工程(Feature Engineering)—— LR模型成功的关键
LR模型本身无法理解“男”、“游戏”这些类别数据,我们必须将其转化为数值特征(数字化)。这是最核心也是最费功夫的一步。
(1)用户特征(User Features):
-
性别:男
-> 由于是类别特征,我们将其One-Hot编码。-
x_gender_male = 1
-
x_gender_female = 0
-
-
年龄:23岁
-> 连续特征,可以直接使用,也可以进行分桶(binning)。-
x_age = 23
-
-
历史行为:过去一周点击过3次游戏广告
-> 统计特征,非常重要。-
x_historical_game_clicks = 3
-
(2)广告特征(Ad Features):
-
广告类别:游戏
-> 同样是类别特征,One-Hot编码。-
x_category_game = 1
-
x_category_e-commerce = 0
-
x_category_education = 0
-
-
广告主评级:知名公司(如腾讯)
-> 可以转换为数值,比如评级分数4.8(满分5分)。-
x_advertiser_score = 4.8
-
(3)上下文特征(Context Features):
-
时间段:晚上8点
-> 可以视为连续特征,或者将其归类为“晚间高峰”并编码。-
x_hour = 20
-
-
设备:iOS
-> One-Hot编码。-
x_os_ios = 1
-
x_os_android = 0
-
最终,我们得到一个非常长的、稀疏的(大部分为0)特征向量来表示这次展示请求:
X = [x_gender_male=1, x_gender_female=0, x_age=23, x_historical_game_clicks=3, x_category_game=1, ..., x_os_ios=1, ...]
第二步:模型预测(Inference)
假设我们的LR模型已经训练好了,它学到了一些权重(w
)。权重的大小代表了模型认为该特征对“点击”的贡献度。
模型学到的权重可能如下:
-
w_gender_male = 0.1
(男性可能稍微更爱点游戏) -
w_historical_game_clicks = 0.5
(历史点击游戏广告的行为非常重要!) -
w_category_game = 0.3
(游戏类广告本身的点击概率较高) -
w_advertiser_score = 0.4
(知名广告主更吸引人) -
w_hour = 0.05
(晚上8点大家比较空闲) -
...
-
b (偏置项) = -2.1
(一个全局的基础偏置)
现在,我们将特征值(X)和权重(W)对应相乘并求和,计算线性分数 z
:
z = (1 * 0.1) + (23 * 0.01) + (3 * 0.5) + (1 * 0.3) + (4.8 * 0.4) + (20 * 0.05) + (1 * 0.1) + ... - 2.1
假设我们计算出 z = 1.6
。
然后将 z
代入Sigmoid函数:
p = 1 / (1 + e^{-1.6}) ≈ 1 / (1 + 0.2019) ≈ 0.832
结论:模型预测Alice点击这个《王者荣耀》广告的概率高达83.2%! 系统会认为这是一个高质量的展示机会,很可能将此广告排在信息流的前列。
第三步:模型训练(Training)
如果这次展示的真实情况是:Alice确实点击了。
那么真实标签 y = 1
。模型预测值 p = 0.832
,虽然预测正确,但还不完美(理想值是1.0)。
损失函数(Loss Function):使用对数损失(Log Loss)来计算预测值与真实值的差距。
-
Loss = - [y * log(p) + (1-y) * log(1-p)]
-
代入计算:
Loss = - [1 * log(0.832) + 0] ≈ 0.184
(这是一个较小的损失)
梯度下降(Gradient Descent):模型会根据这个损失值,反向传播误差,微调所有权重(w
)和偏置(b
)。
-
对于那些贡献大的特征(比如因为
x_historical_game_clicks=3
和x_category_game=1
),模型会适当增加它们的权重w_historical_game_clicks
和w_category_game
,下次看到类似特征时预测概率会更接近1。 -
同时,可能会轻微调整其他特征的权重。
通过在海量的“展示-点击/不点击”数据上反复进行这个过程,模型最终学习到各个特征权重的最佳值。
三、LR在广告系统中的优缺点
优点:
-
可解释性极强:你能清楚地知道哪个特征在多大程度上影响了预测结果(
w
的大小和正负)。这对于商业决策和调试模型至关重要。 -
计算效率高:模型简单,训练和预测速度非常快,适合需要高并发、低延迟响应的广告系统(每秒要处理百万次请求)。
-
概率输出:天然输出概率,这个pCTR值可以直接用于后续的广告排序(如按
pCTR * bid
计算ECPM进行排序)。 -
鲁棒性:不容易过拟合,尤其在大规模稀疏数据集上表现稳定。
缺点:
-
无法自动特征交叉:这是它最核心的缺陷。它无法自动学习到“年轻男性在晚上对游戏广告的偏好”这种组合效应。必须依靠算法工程师手动构造
is_young_male_at_night_viewing_game
这样的组合特征,耗费大量人力且难以穷尽。 -
线性假设:它假设特征和最终结果之间存在线性关系,但现实世界很多关系是非线性的。