点击率预估问题

点击率预估问题通常形式化描述为给定用户,物料,上下文的情况下,计算用户点击物料的概率即:pCTR = p(click=1|user,item,context)

简单来说,在广告业务中使用pCTR来计算广告的预期收益,在推荐业务中通过使用pCTR来确定候选物料的一个排序列表。

DeepCTR-Torch

人们通过构造有效的组合特征和使用复杂的模型来学习数据中的模式来提升效果。基于因子分解机的方法,可以通过向量乘积的形式学习特征的交互,并且泛化到那些没有出现过的组合上。

随着深度神经网络在若干领域的巨大发展,近年来研究者也提出了若干基于深度学习的分解模型来同时学习低阶和高阶的特征交互,如:

PNN,Wide&Deep,DeepFM,Attentional FM,Neural FM,DCN,xDeepFM,AutoInt,FiBiNET

以及基于用户历史行为序列建模的DIN,DIEN,DSIN等。

对于刚接触这方面的同学来说,可能对这些方法的细节还不太了解,虽然网上有很多介绍,但是代码却没有统一的形式,且当想要迁移到自己的数据集进行实验时也很不方便。本文介绍的一个使用PyTorch实现的基于深度学习的CTR模型包DeepCTR-PyTorch,无论是使用还是学习都很方便。

DeepCTR-PyTorch是一个简洁易用、模块化可扩展的基于深度学习的CTR模型包。除了近年来主流模型外,还包括许多可用于轻松构建您自己的自定义模型的核心组件层。

您简单的通过model.fit()model.predict()来使用这些复杂的模型执行训练和预测任务,以及在通过模型初始化列表的device参数来指定运行在cpu还是gpu上。

安装与使用

  • 安装

pip install -U deepctr-torch
  • 使用例子

下面用一个简单的例子告诉大家,如何快速的应用一个基于深度学习的CTR模型,代码地址在:

https://github.com/shenweichen/DeepCTR-Torch/blob/master/examples/run_classification_criteo.py。

The Criteo Display Ads datasetkaggle上的一个CTR预估竞赛数据集。里面包含13个数值特征I1-I13和26个类别特征C1-C26

# -*- coding: utf-8 -*-
# 使用pandas 读取上面介绍的数据,并进行简单的缺失值填充
import pandas as pd
from sklearn.metrics import log_loss, roc_auc_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, MinMaxScaler
from deepctr_torch.models import *
from deepctr_torch.inputs import SparseFeat, DenseFeat, get_fixlen_feature_names
import torch# 使用pandas 读取上面介绍的数据,并进行简单的缺失值填充
data = pd.read_csv('./criteo_sample.txt')
# 上面的数据在:https://github.com/shenweichen/DeepCTR-Torch/blob/master/examples/criteo_sample.txtsparse_features = ['C' + str(i) for i in range(1, 27)]
dense_features = ['I' + str(i) for i in range(1, 14)]data[sparse_features] = data[sparse_features].fillna('-1', )
data[dense_features] = data[dense_features].fillna(0, )
target = ['label']#这里我们需要对特征进行一些预处理,对于类别特征,我们使用LabelEncoder重新编码(或者哈希编码),对于数值特征使用MinMaxScaler压缩到0~1之间。for feat in sparse_features:lbe = LabelEncoder()data[feat] = lbe.fit_transform(data[feat])
mms = MinMaxScaler(feature_range=(0, 1))
data[dense_features] = mms.fit_transform(data[dense_features])# 这里是比较关键的一步,因为我们需要对类别特征进行Embedding,所以需要告诉模型每一个特征组有多少个embbedding向量,我们通过pandas的nunique()方法统计。fixlen_feature_columns = [SparseFeat(feat, data[feat].nunique())for feat in sparse_features] + [DenseFeat(feat, 1,)for feat in dense_features]dnn_feature_columns = fixlen_feature_columns
linear_feature_columns = fixlen_feature_columnsfixlen_feature_names = get_fixlen_feature_names(linear_feature_columns + dnn_feature_columns)#最后,我们按照上一步生成的特征列拼接数据train, test = train_test_split(data, test_size=0.2)
train_model_input = [train[name] for name in fixlen_feature_names]
test_model_input = [test[name] for name in fixlen_feature_names]# 检查是否可以使用gpudevice = 'cpu'
use_cuda = True
if use_cuda and torch.cuda.is_available():print('cuda ready...')device = 'cuda:0'# 初始化模型,进行训练和预测model = DeepFM(linear_feature_columns=linear_feature_columns, dnn_feature_columns=dnn_feature_columns, task='binary',l2_reg_embedding=1e-5, device=device)model.compile("adagrad", "binary_crossentropy",metrics=["binary_crossentropy", "auc"],)
model.fit(train_model_input, train[target].values,batch_size=256, epochs=10, validation_split=0.2, verbose=2)pred_ans = model.predict(test_model_input, 256)
print("")
print("test LogLoss", round(log_loss(test[target].values, pred_ans), 4))
print("test AUC", round(roc_auc_score(test[target].values, pred_ans), 4))

相关资料

  • DeepCTR-Torch代码主页

https://github.com/shenweichen/DeepCTR-Torch

  • DeepCTR-Torch文档:

    https://deepctr-torch.readthedocs.io/en/latest/index.html

  • DeepCTR(tensorflow版)代码主页 :

    https://github.com/shenweichen/DeepCTR

  • DeepCTR(tensorflow版)文档:

    https://deepctr-doc.readthedocs.io/en/latest/index.html

DeepCTR-Torch,基于深度学习的CTR预测算法库相关推荐

  1. 【原创】推荐广告入门:DeepCTR-Torch,基于深度学习的CTR预测算法库

    在计算广告和推荐系统中,CTR预估一直是一个核心问题.无论在工业界还是学术界都是一个热点研究问题,近年来也有若干相关的算法竞赛陆续举办.本文介绍一个使用PyTorch编写的深度学习的点击率预测算法库D ...

  2. CTR预估系列:DeepCTR 一个基于深度学习的CTR模型包

    在计算广告和推荐系统中,CTR预估一直是一个核心问题.无论在工业界还是学术界都是一个热点研究问题,近年来也有若干相关的算法竞赛.本文介绍一个基于深度学习的CTR模型包DeepCTR,具有简洁易用.模块 ...

  3. DeepCTR:易用可扩展的深度学习点击率预测算法库

    本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/53231955 这个项目主要是对目前的一些基于深度学习的点击率预测算法进行了实现,并且对外提供了一致的调用接口. 关于每 ...

  4. 基于深度学习的股票预测(完整版,有代码)

    基于深度学习的股票预测 数据获取 数据转换 LSTM模型搭建 训练模型 预测结果 数据获取 采用tushare的数据接口(不知道tushare的筒子们自行百度一下,简而言之其免费提供各类金融数据 , ...

  5. 基于深度学习的视频预测研究综述

    原址:http://html.rhhz.net/tis/html/201707032.htm (收集材料ing,为论文做准备)[综述性文章,,,可以做背景资料] 莫凌飞, 蒋红亮, 李煊鹏 摘要:近年 ...

  6. DeepARG——一种基于深度学习更加准确预测ARG的方法

    DeepARG--一种基于深度学习更加准确预测ARG的方法 本文介绍的是发表于Microbiome名为DeepARG: a deep learning approach for predicting ...

  7. 基于深度学习的时间序列预测方法

    之前对时间序列预测的方法大致梳理了一下,最近系统的学习了深度学习,同时也阅读了一些处理序列数据的文献,发现对于基于深度学习的时间序列预测的方法,还可以做进一步细分:RNN.Attention和TCN. ...

  8. 病虫害模型算法_基于深度学习的目标检测算法综述

    sigai 基于深度学习的目标检测算法综述 导言 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一.由于各类物体有不同的外观,形状,姿态,加上成像 ...

  9. 综述 | 基于深度学习的目标检测算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:计算机视觉life 导读:目标检测(Object Det ...

最新文章

  1. 基于web的可定制数据填报平台
  2. OpenGL入门学习(十二) 【转】
  3. linux切换到顶层命令,一些在Linux下提高工作效率的常用命令
  4. Python正则表达式中问号的四种用法
  5. 怎样自动提取邮件的内容_这些最新的外贸搜索开发工具(图灵搜、谷歌搜索提取工具、易查查),你会使用吗?...
  6. 关于数据仓库的架构及3大类组件工具选型
  7. composer update 无法执行命令原因及解决方法
  8. 【QT】无需写connect代码关联信号和槽函数
  9. git pull 出错,error: Your local changes to the following files would be overwritten by merge...
  10. 关于Apache的25个初中级面试题
  11. Ajax.net中的Web服务
  12. (十一)RabbitMQ消息队列-如何实现高可用
  13. python alphago_如何利用 Python 打造一款简易版 AlphaGo
  14. Sublime Text 2 注册码/破解方法【蕃薯耀】
  15. JAVA 异或校验byte数组
  16. sql中取字符串长度的函数
  17. python遍历字母_如何遍历字母表?
  18. 将ViewBag的值传递给js
  19. 什么是MVC模式??
  20. [11]JDK9新特性

热门文章

  1. 天津理工大学c语言上机报告3,天津理工大学-c语言上机报告4.pdf
  2. 580分左右的计算机院校,2021年高考580分可以上什么大学 580分左右的院校
  3. python笔记之正则表达式
  4. CiscoOSPF的选路原理
  5. javascript--弹出对话框 四种对话框 获得用户输入值 .
  6. qpython怎么用matplotlib_python-通过文本框的交互式matplotlib图
  7. java快速教程_Java快速入门
  8. python aiohttp_aiohttp
  9. java如何捕获多个异常_是否可以在单个catch块中捕获多个Java异常?
  10. java中b的平方表示_第七届蓝桥杯Java B——四平方和