当前位置: 首页 > article >正文

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

目录

      • 广告点击率预测问题
      • 数据集结构
      • 广告点击率预测模型的构建
        • 1. 数据集准备
        • 2. 构建数据加载器
        • 3. 构建深度学习模型
        • 4. 训练与评估
      • 总结

广告点击率预测(CTR,Click-Through Rate Prediction)是在线广告领域中的重要任务,它帮助广告平台根据用户的兴趣预测广告的点击概率,从而提高广告投放的效果和广告商的收益。随着深度学习的快速发展,传统的广告点击率预测方法已逐渐被基于神经网络的模型所取代,深度学习在此领域的应用带来了显著的提升。

本文将通过实现一个简单的深度学习广告点击率预测模型,介绍如何利用PyTorch构建一个广告点击率预测系统。

广告点击率预测问题

广告点击率预测问题可以描述为:给定一组广告和用户的特征,预测用户点击该广告的概率。这类任务通常是一个二分类问题——用户点击广告与否,标签为1或0。

在广告点击率预测中,输入特征通常包括用户的历史行为、广告的特征(如广告类型、广告主题、展示位置等)以及用户的环境特征(如时间、设备等)。模型的任务是从这些特征中学习到有效的信息,并做出准确的预测。

数据集结构

为了实现广告点击率预测,我们假设数据集的结构如下:

用户ID广告ID时间戳用户年龄用户性别广告类型展示位置点击标签
110011609459200250视频首页1
210021609459260301图片侧边栏0
310031609459320220视频首页1
  • 用户ID:表示用户的唯一标识符。
  • 广告ID:表示广告的唯一标识符。
  • 时间戳:表示广告展示的时间。
  • 用户年龄:表示用户的年龄。
  • 用户性别:表示用户的性别,0为女性,1为男性。
  • 广告类型:表示广告的类型(如视频广告、图片广告等)。
  • 展示位置:表示广告展示的页面位置(如首页、侧边栏等)。
  • 点击标签:表示用户是否点击广告,1表示点击,0表示未点击。

在实际应用中,数据集会非常庞大,并且包含多种类型的特征。为了让模型能够处理这些特征,我们通常需要将分类特征(如性别、广告类型等)进行数值化或独热编码。

广告点击率预测模型的构建

1. 数据集准备

首先,我们需要一个包含广告和用户特征的数据集。这里我们假设数据集中包含多个特征列,最后一列为标签(点击与否)。我们将使用 pandas 来加载数据,利用 train_test_split 将数据分为训练集和测试集。

import pandas as pd
from sklearn.model_selection import train_test_split# 加载数据
def load_data(file_path):df = pd.read_csv(file_path)features = df.iloc[:, :-1].values  # 所有特征labels = df.iloc[:, -1].values     # 最后一列标签return features, labels
2. 构建数据加载器

我们使用PyTorch的 Dataset 类来构建自定义数据集,并利用 DataLoader 来批量加载数据。这样可以更高效地进行模型训练。

from torch.utils.data import Dataset, DataLoaderclass CTRDataset(Dataset):def __init__(self, features, labels):self.features = torch.tensor(features, dtype=torch.float32)self.labels = torch.tensor(labels, dtype=torch.float32)def __len__(self):return len(self.features)def __getitem__(self, idx):return self.features[idx], self.labels[idx]
3. 构建深度学习模型

在本例中,我们使用一个简单的多层感知机(MLP)模型。该模型由三个全连接层组成,通过ReLU激活函数进行非线性变换,最终输出一个介于0和1之间的概率值。

import torch.nn as nnclass CTRModel(nn.Module):def __init__(self, input_dim):super(CTRModel, self).__init__()self.fc1 = nn.Linear(input_dim, 128)  # 第一层self.fc2 = nn.Linear(128, 64)         # 第二层self.fc3 = nn.Linear(64, 1)           # 输出层self.sigmoid = nn.Sigmoid()           # 输出概率def forward(self, x):x = torch.relu(self.fc1(x))  # 激活函数 ReLUx = torch.relu(self.fc2(x))  # 激活函数 ReLUx = self.fc3(x)              # 输出层return self.sigmoid(x)       # 预测点击率概率
4. 训练与评估

我们使用二元交叉熵损失函数(BCELoss)和Adam优化器来训练模型。在每个epoch结束后,我们评估模型在测试集上的准确度。

import torch.optim as optim# 定义训练过程
def train(csv_file, num_epochs=10, lr=0.001):features, labels = load_data(csv_file)x_train, x_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)# 创建数据加载器train_dataset = CTRDataset(x_train, y_train)test_dataset = CTRDataset(x_test, y_test)train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)# 初始化模型、损失函数和优化器input_dim = features.shape[1]model = CTRModel(input_dim)criterion = nn.BCELoss()  # 二元交叉熵损失函数optimizer = optim.Adam(model.parameters(), lr)# 训练过程model.train()for epoch in range(num_epochs):running_loss = 0.0for inputs, labels in train_loader:optimizer.zero_grad()outputs = model(inputs).squeeze(1)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/len(train_loader):.4f}')# 训练完成后,评估模型evaluate(model, test_loader)# 评估过程
def evaluate(model, val_loader):model.eval()  # 设置为评估模式correct = 0total = 0with torch.no_grad():for inputs, labels in val_loader:outputs = model(inputs).squeeze(1)predicted = (outputs >= 0.5).float()  # 将输出转化为0或1total += labels.size(0)correct += (predicted == labels).sum().item()accuracy = correct / totalprint(f'Accuracy: {accuracy:.4f}')

总结

通过这个简单的深度学习模型,我们实现了一个广告点击率预测系统。利用PyTorch,我们可以非常方便地构建神经网络模型,训练并进行评估。通过不断优化模型架构和特征工程,我们有可能进一步提升广告点击率的预测准确度。

随着广告行业的不断发展,点击率预测的需求将会越来越大,借助深度学习的强大能力,我们可以不断优化广告投放策略,达到更加精确的预测结果。希望本文的内容能为你搭建广告点击率预测系统提供帮助。

相关文章:

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

目录 广告点击率预测问题数据集结构广告点击率预测模型的构建1. 数据集准备2. 构建数据加载器3. 构建深度学习模型4. 训练与评估 总结 广告点击率预测(CTR,Click-Through Rate Prediction)是在线广告领域中的重要任务,它帮助广告平…...

算法每日双题精讲 —— 二分查找(寻找旋转排序数组中的最小值,点名)

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧💪 在算法的…...

Flutter TextPainter 计算文本高度和行数

在开发中有的时候需要去计算文本的高度或者行数,从而控制展示的内容,比如进一步设置展示控件的高度,或者根据行数进行不同的内容展示。 在原生 Android 开发时,View 的绘制流程分为 measure,layout,draw 三…...

STM32-时钟树

STM32-时钟树 时钟 时钟...

算法知识补充2

一部分&#xff1a;Tire树&#xff1a;高效地存储和查找字符串集合的数据结构acwing835 #include<iostream> #include<cstring> using namespace std; const int N100010; int son[N][26],cnt[N],idx; char str[N]; void insert(char str[]){int p0;for(int i0;st…...

微信小程序-点餐(美食屋)02开发实践

目录 概要 整体架构流程 &#xff08;一&#xff09;用户注册与登录 &#xff08;二&#xff09;菜品浏览与点餐 &#xff08;三&#xff09;订单管理 &#xff08;四&#xff09;后台管理 部分代码展示 1.index.wxml 2.list.wxml 3.checkout.wxml 4.detail.wxml 小结优点 概要…...

WPF基础 | WPF 常用控件实战:Button、TextBox 等的基础应用

WPF基础 | WPF 常用控件实战&#xff1a;Button、TextBox 等的基础应用 一、前言二、Button 控件基础2.1 Button 的基本定义与显示2.2 按钮样式设置2.3 按钮大小与布局 三、Button 的交互功能3.1 点击事件处理3.2 鼠标悬停与离开效果3.3 按钮禁用与启用 四、TextBox 控件基础4.…...

CentOS7使用源码安装PHP8教程整理

CentOS7使用源码安装PHP8教程整理 下载安装包解压下载的php tar源码包安装所需的一些依赖扩展库安装前的配置修改配置文件1、进入php8的安装包 配置环境变量开机自启启动服务创建软连接常见问题1、checking for icu-uc > 50.1 icu-io icu-i18n... no2、configure: error: Pa…...

强化学习 - 基于策略搜索和策略优化: 高斯策略

最近在做毕设需要用强化学习来做控制&#xff0c;对强化学习的知识点做一下总结。 高斯策略 高斯策略属于强化学习中的基于策略优化的分支&#xff08;Policy Optimization&#xff09;&#xff0c;尤其是策略梯度方法&#xff08;Policy Gradient Methods&#xff09; 的一部…...

126周日复盘 (166)本周回顾

关键词&#xff1a;帧数测试 1、上午继续各处排查&#xff0c;优化帧数。 中午打包测试。 显卡锁60帧&#xff0c;720p窗口模式&#xff0c;画质3下&#xff0c; 低负载时50-60帧&#xff0c;密集战斗时35-45帧&#xff0c;基本达到预期&#xff0c; 硬件占用&#xff0c;显…...

08-Elasticsearch

黑马商城作为一个电商项目&#xff0c;商品的搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的&#xff0c;存在很多问题。 首先&#xff0c;查询效率较低。 由于数据库模糊查询不走索引&#xff0c;在数据量较大的时候&#xff0c;查询性能很…...

SQL在DBA手里-改写篇

背景 最近运营需要做月报汇总交易情况&#xff0c;之前一直是他们手工出的数据&#xff0c;他们想做成月初自动发送邮件&#xff0c;从而减轻他们的工作量。于是他们提供SQL我们在邮件服务器配置做定时发送任务。 表介绍&#xff08;表及字段已做脱敏处理&#xff09; trans…...

02-机器学习-核心概念

以下是机器学习核心概念的详细梳理。 1. 机器学习三大范式 类型定义典型应用监督学习使用带标签的数据训练模型&#xff0c;预测未知数据的标签。分类&#xff08;邮件垃圾过滤&#xff09;、回归&#xff08;房价预测&#xff09;无监督学习从无标签的数据中发现隐藏模式或结…...

企业财务管理系统的需求设计和实现

该作者的原创文章目录&#xff1a; 生产制造执行MES系统的需求设计和实现 企业后勤管理系统的需求设计和实现 行政办公管理系统的需求设计和实现 人力资源管理HR系统的需求设计和实现 企业财务管理系统的需求设计和实现 董事会办公管理系统的需求设计和实现 公司组织架构…...

Couchbase UI: Server

在 Couchbase UI 中的 Server&#xff08;服务器&#xff09;标签页主要用于管理和监控集群中的各个节点。以下是 Server 标签页的主要内容和功能介绍&#xff1a; 1. 节点列表 显示集群中所有节点的列表&#xff0c;每个节点的详细信息包括&#xff1a; 节点地址&#xff1…...

【软件设计师中级】-笔记缩减版本-计算机系统基础知识

1. 计算机系统基础知识 1.1. 计算机系统硬件基本组成硬件 中央处理器&#xff08;CPU&#xff09;硬件系统的核心 运算器 控制器 存储器&#xff08;记忆设备&#xff09; 内部存储器&#xff08;速度高&#xff0c;容量小&#xff09;&#xff1a;临时存放程序、数据及中间结…...

SAP MM 记录一次SAP外协采购收货提示 这种物料的特殊库存 O 0100003359 14019002不存在的问题

根据采购订单收货&#xff0c;调用时 BAPI_GOODSMVT_CREATE时返回 { "TYPE":"E", "ID":"M7", "NUMBER":"076", "MESSAGE":"这种物料的特殊库存 O 0100003359 14019002不存在"…...

2025牛客寒假算法基础集训营2

H 一起画很大的圆&#xff01; 看起来像是一道计算几何的题&#xff0c;实际上通过分析和猜想&#xff0c;是有O1复杂度的结论的。具体证明略&#xff0c;结论是三点越接近共线&#xff0c;得出的半径越大。 #include <bits/stdc.h> using namespace std; #define endl \…...

统计学中的样本概率论中的样本

不知道当初谁想的把概率论和数理统计合并&#xff0c;作为一门课。这本身是可以合并&#xff0c;完整的一条线&#xff0c;看这里。但是&#xff0c;作为任课老师应该从整体上交代清楚&#xff0c;毕竟是两个学科&#xff0c;不同的学科合并必然会有各种不协调的问题。 举个最…...

DDD-全面理解领域驱动设计中的各种“域”

一、DDD-领域 在领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;中&#xff0c;**领域&#xff08;Domain&#xff09;**指的是软件系统所要解决的特定业务问题的范围。它涵盖了业务知识、规则和逻辑&#xff0c;是开发团队与领域专家共同关注的核心…...

在 Ubuntu22.04 上安装 Splunk

ELK感觉太麻烦了&#xff0c;换个日志收集工具 Splunk 是一种 IT 工具&#xff0c;可帮助在任何设备上收集日志、分析、可视化、审计和创建报告。简单来说&#xff0c;它将“机器生成的数据转换为人类可读的数据”。它支持从虚拟机、网络设备、防火墙、基于 Unix 和基于 Windo…...

计算机网络 (60)蜂窝移动通信网

一、定义与原理 蜂窝移动通信网是指将一个服务区分为若干蜂窝状相邻小区并采用频率空间复用技术的移动通信网。其原理在于&#xff0c;将移动通信服务区划分成许多以正六边形为基本几何图形的覆盖区域&#xff0c;称为蜂窝小区。每个小区设置一个基站&#xff0c;负责本小区内移…...

壁纸设计过程中如何增加氛围感

在壁纸设计过程中&#xff0c;增加氛围感是提升整体视觉效果和情感传达的关键。以下是一些具体的方法和技巧&#xff0c;帮助你在设计中营造出强烈的氛围感&#xff1a; 一、色彩运用 选择主题色&#xff1a; 根据你想要传达的情感选择主色调。例如&#xff0c;温暖的色调&…...

|Python新手小白中级教程|第二十九章:面向对象编程(Python类的拓展延伸与10道实操题目)(5)

文章目录 前言1.类变量与实例变量2.静态方法和类方法1.静态方法2.类方法 3.实操使用1. 创建一个名为Person的类&#xff0c;包含属性name和age&#xff0c;并且有一个方法introduce()用于介绍自己的名字和年龄。2. 创建一个名为Circle的类&#xff0c;包含属性radius和color&am…...

专为课堂打造:宏碁推出三款全新耐用型 Chromebook

IT之家 1 月 25 日消息&#xff0c;宏碁&#xff08;Acer&#xff09;昨日&#xff08;1 月 24 日&#xff09;发布公告&#xff0c;针对教育市场&#xff0c;推出 Chromebook Spin 512 (R857T)、Chromebook Spin 511 (R757T) 和 Chromebook 511 (C737) 三款产品&#xff0c;兼…...

UE求职Demo开发日志#12 完善击杀获得物品逻辑和UI

1 实现思路 1.给WarehouseManager添加一个按TArray增加物品的函数 2.Enemy身上一个变量记录掉落物品&#xff0c;死亡时调用增加物品函数 3.同时调用UI显示 2 实现过程 2.1 在WarehouseManager里添加一个AddItemByArray函数 遍历数组调用添加函数 void UWarehouseManage…...

Oracle查看数据库表空间使用情况

Oracle RAC环境查看表空间使用情况 查询字段释义&#xff1a; NEED_ADDFILE,--是否需增加表空间文件 TABLESPACE_NAME,--表空间名称 TABLESPACE_FILE_COUNT, --表空间当前数据文件数量 NOW_FILEENABLE_BLOCKS,--表空间文件当前数据块数 NOW_FILEENABLE_BYTES_GB,--表空间文件当…...

安装Ubuntu22.04

1.引用教程 如何安装Ubuntu Server 22.04 LTS_ubuntu22.04 server-CSDN博客 2.空间分配 要使用 docker 比较多所以分别的 docker 空间大...

【阅读笔记】基于整数+分数微分的清晰度评价算子

本文介绍的是一种新的清晰度评价算子&#xff0c;整数微分算子分数微分算子 一、概述 目前在数字图像清晰度评价函数中常用的评价函数包括三类&#xff1a;灰度梯度评价函数、频域函数和统计学函数&#xff0c;其中灰度梯度评价函数具有计算简单&#xff0c;评价效果好等优点…...

scratch七彩六边形 2024年12月scratch三级真题 中国电子学会 图形化编程 scratch三级真题和答案解析

目录 scratch七彩六边形 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、…...