PyTorch广告点击率预测(CTR)利用深度学习提升广告效果 ...

打印 上一主题 下一主题

主题 976|帖子 976|积分 2928

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
广告点击率预测(CTR,Click-Through Rate Prediction)是在线广告范畴中的重要任务,它资助广告平台根据用户的爱好预测广告的点击概率,从而提高广告投放的效果和广告商的收益。随着深度学习的快速发展,传统的广告点击率预测方法已逐渐被基于神经网络的模型所代替,深度学习在此范畴的应用带来了显着的提升。
本文将通过实现一个简单的深度学习广告点击率预测模型,介绍怎样利用PyTorch构建一个广告点击率预测体系。
广告点击率预测问题

广告点击率预测问题可以形貌为:给定一组广告和用户的特性,预测用户点击该广告的概率。这类任务通常是一个二分类问题——用户点击广告与否,标签为1或0。
在广告点击率预测中,输入特性通常包括用户的历史行为、广告的特性(如广告类型、广告主题、展示位置等)以及用户的环境特性(如时间、设备等)。模型的任务是从这些特性中学习到有效的信息,并做出精确的预测。
数据集结构

为了实现广告点击率预测,我们假设数据集的结构如下:
用户ID广告ID时间戳用户年龄用户性别广告类型展示位置点击标签110011609459200250视频首页1210021609459260301图片侧边栏0310031609459320220视频首页1……………………

  • 用户ID:表示用户的唯一标识符。
  • 广告ID:表示广告的唯一标识符。
  • 时间戳:表示广告展示的时间。
  • 用户年龄:表示用户的年龄。
  • 用户性别:表示用户的性别,0为女性,1为男性。
  • 广告类型:表示广告的类型(如视频广告、图片广告等)。
  • 展示位置:表示广告展示的页面位置(如首页、侧边栏等)。
  • 点击标签:表示用户是否点击广告,1表示点击,0表示未点击。
在实际应用中,数据聚会会议非常庞大,而且包含多种类型的特性。为了让模型能够处理处罚这些特性,我们通常必要将分类特性(如性别、广告类型等)进行数值化或独热编码。
广告点击率预测模型的构建

1. 数据集准备

首先,我们必要一个包含广告和用户特性的数据集。这里我们假设数据会合包含多个特性列,末了一列为标签(点击与否)。我们将利用 pandas 来加载数据,利用 train_test_split 将数据分为训练集和测试集。
  1. import pandas as pd
  2. from sklearn.model_selection import train_test_split
  3. # 加载数据
  4. def load_data(file_path):
  5.     df = pd.read_csv(file_path)
  6.     features = df.iloc[:, :-1].values  # 所有特征
  7.     labels = df.iloc[:, -1].values     # 最后一列标签
  8.     return features, labels
复制代码
2. 构建数据加载器

我们利用PyTorch的 Dataset 类来构建自界说数据集,并利用 DataLoader 来批量加载数据。这样可以更高效地进行模型训练。
  1. from torch.utils.data import Dataset, DataLoader
  2. class CTRDataset(Dataset):
  3.     def __init__(self, features, labels):
  4.         self.features = torch.tensor(features, dtype=torch.float32)
  5.         self.labels = torch.tensor(labels, dtype=torch.float32)
  6.    
  7.     def __len__(self):
  8.         return len(self.features)
  9.    
  10.     def __getitem__(self, idx):
  11.         return self.features[idx], self.labels[idx]
复制代码
3. 构建深度学习模型

在本例中,我们利用一个简单的多层感知机(MLP)模型。该模型由三个全连接层组成,通过ReLU激活函数进行非线性变换,最终输出一个介于0和1之间的概率值。
  1. import torch.nn as nn
  2. class CTRModel(nn.Module):
  3.     def __init__(self, input_dim):
  4.         super(CTRModel, self).__init__()
  5.         self.fc1 = nn.Linear(input_dim, 128)  # 第一层
  6.         self.fc2 = nn.Linear(128, 64)         # 第二层
  7.         self.fc3 = nn.Linear(64, 1)           # 输出层
  8.         self.sigmoid = nn.Sigmoid()           # 输出概率
  9.    
  10.     def forward(self, x):
  11.         x = torch.relu(self.fc1(x))  # 激活函数 ReLU
  12.         x = torch.relu(self.fc2(x))  # 激活函数 ReLU
  13.         x = self.fc3(x)              # 输出层
  14.         return self.sigmoid(x)       # 预测点击率概率
复制代码
4. 训练与评估

我们利用二元交错熵丧失函数(BCELoss)和Adam优化器来训练模型。在每个epoch结束后,我们评估模型在测试集上的精确度。
  1. import torch.optim as optim
  2. # 定义训练过程
  3. def train(csv_file, num_epochs=10, lr=0.001):
  4.     features, labels = load_data(csv_file)
  5.     x_train, x_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)
  6.     # 创建数据加载器
  7.     train_dataset = CTRDataset(x_train, y_train)
  8.     test_dataset = CTRDataset(x_test, y_test)
  9.     train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
  10.     test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)
  11.     # 初始化模型、损失函数和优化器
  12.     input_dim = features.shape[1]
  13.     model = CTRModel(input_dim)
  14.     criterion = nn.BCELoss()  # 二元交叉熵损失函数
  15.     optimizer = optim.Adam(model.parameters(), lr)
  16.     # 训练过程
  17.     model.train()
  18.     for epoch in range(num_epochs):
  19.         running_loss = 0.0
  20.         for inputs, labels in train_loader:
  21.             optimizer.zero_grad()
  22.             outputs = model(inputs).squeeze(1)
  23.             loss = criterion(outputs, labels)
  24.             loss.backward()
  25.             optimizer.step()
  26.             running_loss += loss.item()
  27.         
  28.         print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/len(train_loader):.4f}')
  29.    
  30.     # 训练完成后,评估模型
  31.     evaluate(model, test_loader)
  32. # 评估过程
  33. def evaluate(model, val_loader):
  34.     model.eval()  # 设置为评估模式
  35.     correct = 0
  36.     total = 0
  37.     with torch.no_grad():
  38.         for inputs, labels in val_loader:
  39.             outputs = model(inputs).squeeze(1)
  40.             predicted = (outputs >= 0.5).float()  # 将输出转化为0或1
  41.             total += labels.size(0)
  42.             correct += (predicted == labels).sum().item()
  43.    
  44.     accuracy = correct / total
  45.     print(f'Accuracy: {accuracy:.4f}')
复制代码
总结

通过这个简单的深度学习模型,我们实现了一个广告点击率预测体系。利用PyTorch,我们可以非常方便地构建神经网络模型,训练并进行评估。通过不断优化模型架构和特性工程,我们有可能进一步提升广告点击率的预测精确度。
随着广告行业的不断发展,点击率预测的需求将会越来越大,借助深度学习的强盛能力,我们可以不断优化广告投放策略,达到更加精确的预测效果。盼望本文的内容能为你搭建广告点击率预测体系提供资助。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表