互联网广告常见算法介绍

互联网广告常见算法介绍

一、广告系统算法整体结构

广告算法通常分为以下几个阶段:

  1. 召回(Recall)​:从海量广告中快速筛选出与用户最相关的一小部分候选广告;
  2. 粗排(粗略排序)​:对召回结果进行初步排序,降低排序规模;
  3. 精排(精细排序)​:使用复杂模型对候选广告精准打分;
  4. 重排(Re-ranking)​:引入多样性、新颖性、用户兴趣等特征,最终确定展示顺序;
  5. 点击率预估(CTR)、转化率预估(CVR)​:排序核心模型。

🔍 一、召回阶段(Recall)

🎯 目标:

从海量广告中快速筛选出与用户最可能感兴趣的一小部分候选广告,减少后续排序的计算量。

🧠 常见算法:

1. 基于内容的召回(Content-Based Recall)

原理​:根据广告与用户特征的相似性进行召回,例如关键词、类别、向量表示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

# 假设用户和广告向量为 300 维
user_vector = np.random.rand(1, 300)
ad_vectors = np.random.rand(1000, 300) # 假设 1000 个广告

# 计算用户与所有广告的相似度
similarities = cosine_similarity(user_vector, ad_vectors)[0]

# 取前 50 个最相似的广告索引
top_k_indices = similarities.argsort()[-50:][::-1]

# 输出召回结果
recall_ads = [f"ad_{i}" for i in top_k_indices]

2. 协同过滤(Collaborative Filtering)

原理​:基于历史点击行为,挖掘用户-广告之间的偏好关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from surprise import Dataset, SVD
from surprise.model_selection import train_test_split

# 假设已有 (user, ad, interaction) 的行为数据
data = Dataset.load_builtin('ml-100k') # 实际应用中为广告数据
trainset, testset = train_test_split(data, test_size=0.2)

model = SVD()
model.fit(trainset)

# 推荐广告给某用户
uid = str(196) # 示例用户
ad_candidates = ['101', '102', '103'] # 示例广告 ID
results = [(iid, model.predict(uid, iid).est) for iid in ad_candidates]

# 按评分排序
sorted_results = sorted(results, key=lambda x: x[1], reverse=True)

🧮 二、粗排(初步排序)

🎯 目标:

对召回结果进行第一轮排序,通常模型较轻量,快速打分。

🧠 常见算法:

1. Logistic Regression(CTR 粗排)

原理​:训练一个二分类模型判断点击概率(CTR)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# 示例特征:年龄、性别、广告类别等
data = pd.read_csv('ad_click_data.csv')
X = data[['user_age', 'ad_category', 'is_male']]
y = data['clicked']

# 拟合模型
X_train, X_test, y_train, y_test = train_test_split(X, y)
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测候选广告点击概率
y_pred_prob = model.predict_proba(X_test)[:, 1]

🧠 三、精排/重排(Fine Ranking)

🎯 目标:

使用更复杂模型对候选广告打分排序,实现精准投放。

🧠 常见算法:

1. XGBoost 排序模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import xgboost as xgb

# 假设有用户广告交互特征以及标签
X = data[['user_age', 'ad_category', 'ad_price']]
y = data['clicked']

dtrain = xgb.DMatrix(X, label=y)
params = {
'objective': 'binary:logistic',
'eval_metric': 'logloss',
'max_depth': 6,
'eta': 0.1
}

bst = xgb.train(params, dtrain, num_boost_round=100)

# 预测打分
scores = bst.predict(dtrain)

2. DeepFM / DIN(适合大规模工业推荐系统)

说明​:融合了特征组合和深度神经网络,能捕捉复杂的非线性交互关系。

使用 TensorFlow 或 PyTorch 实现,涉及特征嵌入(Embedding)、多塔结构等。

简要伪代码结构如下:

1
2
3
4
5
6
7
# DeepFM 结构简图:
# 1. Sparse embedding 层
# 2. FM 组件处理特征组合
# 3. DNN 层处理高阶特征交叉
# 4. 输出层为 CTR/Score

# 推荐使用现成框架如 DeepCTR(https://github.com/shenweichen/DeepCTR)

🧾 四、重排策略(Rerank)

🎯 目标:

考虑业务目标(点击率、转化率、GMV、曝光公平性等)进行精细调控。

示例:点击转化混合目标 + 多目标重排

1
2
# 简化版策略分数
final_score = 0.7 * predicted_ctr + 0.3 * predicted_cvr

也可引入 multi-objective ranking,比如:

  • 使用强化学习学习排序策略(RL Ranking)
  • 使用 A/B 实验调节权重比例

五、CTR预估(点击率预测)

CTR 是排序核心,深度学习(如 DNN、Wide&Deep、DeepFM)在工业界广泛使用。

DNN CTR 模型结构简介(伪代码)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import torch.nn as nn

class SimpleCTRModel(nn.Module):
def __init__(self):
super(SimpleCTRModel, self).__init__()
self.model = nn.Sequential(
nn.Linear(10, 64),
nn.ReLU(),
nn.Linear(64, 1),
nn.Sigmoid()
)

def forward(self, x):
return self.model(x)

✅ 总结

阶段 目标 常用方法 特点
召回 快速缩小候选 协同过滤、内容匹配 快速粗粒度
粗排 初步排序 LR、GDBT 模型轻量,可实时计算
精排 精细打分 XGBoost、DeepFM 复杂模型,效果最关键
重排 战略排序 多目标融合策略 平衡转化、点击、GMV 等目标
CTR/CVR 排序核心模型 Wide&Deep、DeepFM 高维组合特征建模

互联网广告常见算法介绍
https://dreamshao.github.io/2025/05/15/广告算法介绍/
作者
Yun Shao
发布于
2025年5月15日
许可协议