互联网广告常见算法介绍
一、广告系统算法整体结构
广告算法通常分为以下几个阶段:
- 召回(Recall):从海量广告中快速筛选出与用户最相关的一小部分候选广告;
- 粗排(粗略排序):对召回结果进行初步排序,降低排序规模;
- 精排(精细排序):使用复杂模型对候选广告精准打分;
- 重排(Re-ranking):引入多样性、新颖性、用户兴趣等特征,最终确定展示顺序;
- 点击率预估(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
user_vector = np.random.rand(1, 300) ad_vectors = np.random.rand(1000, 300)
similarities = cosine_similarity(user_vector, ad_vectors)[0]
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
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'] 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)、多塔结构等。
简要伪代码结构如下:
🧾 四、重排策略(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 |
高维组合特征建模 |