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

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)是在线广告领域中的重要任务,它帮助广告平…...

PAT甲级-1017 Queueing at Bank

题目 题目大意 银行有k个窗口,每个窗口只能服务1个人。如果3个窗口已满,就需要等待。给出n个人到达银行的时间和服务时间,要求计算每个人的平均等待时间。如果某个人的到达时间超过17:00:00,则不被服务,等待时间也不计…...

OneData体系架构详解

阿里巴巴的 OneData 体系架构方法论,主要分为三个阶段:业务板块、规范定义 和 模型设计。每个阶段的核心目标是确保数据的高效管理、共享与分析能力。 一. 业务板块(Business Segment) 业务板块是OneData体系架构中的第一步&…...

Gin 框架入门实战系列教程

一,Gin介绍 Gin是一个 Go (Golang) 编写的轻量级 http web 框架,运行速度非常快,如果你是性能和高效的追求者,我们推荐你使用Gin框架。 Gin最擅长的就是Api接口的高并发,如果项目的规模不大,业务相对简单…...

鸿蒙harmony json转对象(2)

在ArkTS(Ark TypeScript)中,接口(interface)是用来定义一个对象的结构,它可以包含属性、方法签名,以及嵌套的类型(包括其他接口或对象类型)。因此,接口里面可…...

M-LAG与E-trunk

M-LAG和E-trunk都是用来实现跨设备链路聚合,解决单点故障的,其大部分特性相同,工作模式M-LAG更胜一筹,支持双活,而且其原理感觉像是vrrpmstp的升级版,是往增加网络可靠性去发展的;而E-trunk是基于LACP扩展实现&#xf…...

【面试常见问题】

如何自我介绍 自我介绍是面试关键部分,是面试官了解求职者的首要途径,清晰自信的介绍能提升面试官印象,对求职成功至关重要。 糟糕的自我介绍示例 求职者朱晓明虽表明自己善于交际、积极,23 年毕业且从事 java 开发&#xff0c…...

Spring Boot Starter介绍

前言 大概10来年以前,当时springboot刚刚出现并没有流行,当时的Java开发者们开发Web应用主要是使用spring整合springmvc或者struts、iBatis、hibernate等开发框架来进行开发。项目里一般有许多xml文件配置,其中配置了很多项目中需要用到的Be…...

vue和reacts数据响应式的差异

Vue 的数据响应式: 原理: Vue 使用 Object.defineProperty 或 Proxy(在 Vue 3 中)来实现数据的响应式。当创建 Vue 实例时,会对 data 对象中的属性进行遍历,将其转换为响应式属性。对于 Object.definePro…...

OpenEuler学习笔记(九):安装 OpenEuler后配置和优化

安装OpenEuler后,可以从系统基础设置、网络配置、性能优化等方面进行配置和优化,以下是具体内容: 系统基础设置 更新系统:以root用户登录系统后,在终端中执行sudo yum update命令,对系统进行更新&#xf…...

npm命令与yarn命令的区别

npm与Yarn的区别详解 在软件开发中,npm和Yarn都是流行的包管理工具,它们各自拥有独特的特性和优势。以下是它们的主要区别: 1. 安装速度 npm:安装速度相对较慢,尤其是在依赖项较多的情况下。Yarn:采用并…...

python如何导出数据到excel文件

python导出数据到excel文件的方法: 1、调用Workbook()对象中的add_sheet()方法 wb xlwt.Workbook() ws wb.add_sheet(A Test Sheet) 2、通过add_sheet()方法中的write()函数将数据写入到excel中,然后使用save()函数保存excel文件 ws.write(0, 0, 1234…...

MYSQL学习笔记(五):单行函数(字符串、数学、日期时间、条件判断、信息、加密、进制转换函数)讲解

前言: 学习和使用数据库可以说是程序员必须具备能力,这里将更新关于MYSQL的使用讲解,大概应该会更新30篇,涵盖入门、进阶、高级(一些原理分析);这一篇是讲解单行函数,当然mysql函数很多哈,只有多用才能记得…...

Grafana系列之Dashboard:新增仪表板、新增变量、过滤变量、变量查询、导入仪表板、变量联动、Grafana Alert

概述 关于Prometheus和Grafana的安装,略过。 写在前面 Dashboard:仪表板,可包含多个PanelPanel:面板,Dashboard中的组件 如有写得不对的地方,烦请指出。 新增仪表板 点击右上角的 选择New dashboard…...

(java版本)基于Misty1算法的加密软件的实现-毕业设计

一、基于Misty1算法的加密软件(Java)的实现 随着计算机网络及通信技术的飞速发展,信息安全成了信息社会急需解决的最重要的问题之一,密码技术是保证信息安全的核心技术。本文用JAVA语言开发了一个基于Misty1算法的加密软件&#x…...

Spring注解篇:@RestController详解

全文目录: 开篇语前言摘要概述源码解析使用案例分享代码分析使用场景优缺点分析测试用例 应用场景案例优缺点分析核心类方法介绍测试用例测试用例分析使用场景优缺点分析测试用例 小结总结文末 开篇语 哈喽,各位小伙伴们,你们好呀&#xff0c…...

C++:将字符数组rkpryyrag,每个字母转换为其前面第13个字母后输出,如果超过a则从z再继续接着数。例如:b前面第1个字母是a。a前面第3个字母是x。

代码如下&#xff1a; #include <iostream> #include <string> using namespace std;int main(){string str "rkpryyrag";for (int i 0; i < str.length(); i){if (str[i] > a && str[i] < z){if (str[i] - a < 13){cout <<…...

《探秘鸿蒙Next:人工智能助力元宇宙高效渲染新征程》

在元宇宙的宏大愿景中&#xff0c;高效的渲染技术是构建沉浸式虚拟世界的关键。鸿蒙Next凭借与人工智能的深度融合&#xff0c;为元宇宙的渲染带来了全新的解决方案和无限可能。 智能场景分析与优化 人工智能能够对元宇宙场景进行智能分析。鸿蒙Next可以利用AI技术对场景中的…...

微前端qiankun的部署

微前端qiankun的部署 本地开发主应用配置启动端口子应用配置启动端口测试环境部署:场景 1:主应用和微应用部署到同一个服务器(同一个 IP 和端口)微应用都放在在一个特殊名称(不会和微应用重名)的文件夹下主应用配置子应用配置配置nginx本地开发 主应用配置启动端口 打开…...

HTML表格-掌握表格标签与属性

HTML表格是网页设计中用于展示数据的强大工具&#xff0c;它通过一系列标签和属性来控制表格的布局和样式。 一、HTML表格的基本结构 HTML表格由<table>标签定义&#xff0c;内部包含多个行&#xff08;<tr>&#xff09;、单元格&#xff08;<td>或<th&…...

PID控制的优势与LabVIEW应用

PID控制&#xff08;比例-积分-微分控制&#xff09;已在工业控制领域得到广泛应用&#xff0c;尤其在实时控制和自动化系统中&#xff0c;其核心优点是简单、稳定且高效。尽管许多现代控制方法&#xff08;如自适应控制、模型预测控制等&#xff09;逐渐崭露头角&#xff0c;P…...

全球化趋势与中资企业出海背景

1. 全球化趋势与中资企业出海背景 1.1 全球经济格局变化 全球经济格局正经历深刻变革&#xff0c;新兴经济体崛起&#xff0c;全球产业链重塑&#xff0c;中资企业出海面临新机遇与挑战。据世界银行数据&#xff0c;新兴市场和发展中经济体在全球 GDP 中占比已超 40%&#xff…...

Oracle之RMAN备份异机恢复(单机到单机)

Oracle之RMAN备份异机恢复&#xff08;单机到单机&#xff09; 一、环境说明二、正式库进行RMAN备份三、将正式库备份与参数文件拷贝到测试库四、测试库异机恢复五、验证数据 一、环境说明 系统版本主机名DB版本DB名实例名Public-IP正式库Redhat9.5lemonEnterprise 19.25lemon…...

Servlet快速入门

Servlet 由于目前主流使用SpringBoot进行开发Servlet可以说是时代的眼泪&#xff0c;这篇文章主要介绍我基于SpringBoot对应Servlet的浅薄认知&#xff0c;有利于更好的理解前端界面和java服务器的数据交换过程 快速入门 我比较推荐这篇文章来对Servlet有一个大概的了解 都2…...

深入解析 Linux 内核中的 InfiniBand 驱动接口:ib_verbs.h

InfiniBand(IB)是一种高性能、低延迟的网络互连技术,广泛应用于高性能计算(HPC)、数据中心和云计算等领域。Linux 内核通过 InfiniBand 子系统提供了对 IB 设备的支持,而 ib_verbs.h 是 InfiniBand 驱动开发中的核心头文件之一。它定义了 IB 核心框架与用户空间接口(ver…...

vulnhub靶场【kioptrix-1靶机】

前言 靶机&#xff1a;kioptrix-1&#xff0c;IP地址为192.168.1.104 攻击&#xff1a;kali&#xff0c;IP地址为192.168.1.16 都采用虚拟机&#xff0c;网卡为桥接模式 文章中涉及的靶机&#xff0c;来源于vulnhub官网&#xff0c;想要下载&#xff0c;可自行访问官网下载&…...

Linux 6.14 内核的主要特性

原文参考&#xff1a;https://www.kernel.org/ Linux 6.14 内核是 Linux 内核的一个重要版本&#xff0c;预计于 2025 年 3 月发布。该版本引入了多项新特性和改进&#xff0c;涵盖了硬件支持、性能优化、安全性增强以及新技术的整合。 1. Rust 语言驱动的正式支持 Linux 6.1…...

【Linux】深刻理解动静态库

1.什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复⽤的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个⼈的代码都从零开始&#xff0c;因此库的存在意义⾮同寻常。本质上来说库是⼀种可执⾏代码的⼆进制形式&#xff0c;可以被操作系统载…...

亚博microros小车-原生ubuntu支持系列:8-脸部检测与人脸特效

前面的都是使用了mediapipe框架。后面的这两节采用了opencv\dlib的框架。 一 脸部检测 核心&#xff1a;opencv detectMultiScale函数 detectMultiScale(image, scaleFactor, minNeighbors, flags, minSize, maxSize) image--待检测图片&#xff0c;一般为灰度图像加快检测…...

代码随想录算法训练营day32

代码随想录算法训练营 —day32 文章目录 代码随想录算法训练营前言一、动态规划理论基础二、509. 斐波那契数动态规划动态规划优化空间版递归法 三、70. 爬楼梯动态规划动态规划空间优化 746. 使用最小花费爬楼梯动态规划空间优化 总结 前言 今天是算法营的第32天&#xff0c…...