# 基于DNN模型的点击率预估模型 ## 介绍 `CTR(Click Through Rate)`,即点击率,是“推荐系统/计算广告”等领域的重要指标,对其进行预估是商品推送/广告投放等决策的基础。简单来说,CTR预估对每次广告的点击情况做出预测,预测用户是点击还是不点击。CTR预估模型综合考虑各种因素、特征,在大量历史数据上训练,最终对商业决策提供帮助。本模型实现了下述论文中提出的DNN模型: ```text @inproceedings{guo2017deepfm, title={DeepFM: A Factorization-Machine based Neural Network for CTR Prediction}, author={Huifeng Guo, Ruiming Tang, Yunming Ye, Zhenguo Li and Xiuqiang He}, booktitle={the Twenty-Sixth International Joint Conference on Artificial Intelligence (IJCAI)}, pages={1725--1731}, year={2017} } ``` # ## 目录 * [运行环境](#运行环境) * [数据准备](#数据准备) * [数据来源](#数据来源) * [数据预处理](#数据预处理) * [一键下载训练及测试数据](#一键下载训练及测试数据) * [模型组网](#模型组网) * [数据输入声明](#数据输入声明) * [CTR-DNN模型组网](#ctr-dnn模型组网) * [Embedding层](#embedding层) * [FC层](#fc层) * [Loss及Auc计算](#loss及auc计算) * [dataset数据读取](#dataset数据读取) * [引入dataset](#引入dataset) * [如何指定数据读取规则](#如何指定数据读取规则) * [快速调试Dataset](#快速调试dataset) * [单机训练 VS 分布式训练](#单机训练-vs-分布式训练) * [区别一:数据需要分配到各个训练节点上](#区别一数据需要分配到各个训练节点上) * [区别二:每个节点需要扮演不同的角色](#区别二每个节点需要扮演不同的角色) * [共有的环境变量](#共有的环境变量) * [Pserver特有的环境变量](#pserver特有的环境变量) * [Trainer特有的环境变量](#trainer特有的环境变量) * [区别三 分布式需要指定训练策略](#区别三-分布式需要指定训练策略) * [区别四 分布式训练需要分别运行Pserver与Trainer](#区别四-分布式训练需要分别运行pserver与trainer) * [区别五 启动训练](#区别五-启动训练) * [运行单机训练](#运行单机训练) * [运行分布式训练(本地模拟分布式)](#运行分布式训练本地模拟分布式) * [区别六 保存模型](#区别六-保存模型) * [单机训练中模型的保存](#单机训练中模型的保存) * [分布式训练中模型的保存](#分布式训练中模型的保存) * [区别七 增量训练](#区别七-增量训练) * [单机增量训练](#单机增量训练) * [分布式增量训练](#分布式增量训练) * [单机离线预测](#单机离线预测) * [构建预测网络及加载模型参数](#构建预测网络及加载模型参数) * [测试数据的读取](#测试数据的读取) * [AUC的清零步骤](#auc的清零步骤) * [运行Infer](#运行infer) * [benchmark](#benchmark) * [启动分布式训练](#启动分布式训练) * [训练代码准备](#训练代码准备) * [运行环境准备](#运行环境准备) * [启动server](#启动server) * [启动worker](#启动worker) # ## 运行环境 **示例训练代码仅支持在Linux环境下运行** - Win/Mac 暂不支持dataset数据读取方式 - Win/Mac 可以使用其他数据读取方式改写本示例代码并运行(参照`infer.py`) - 目前仅支持Linux,如:`unbuntu`及`CentOS` - 目前仅支持python版本`2.7` - 请确保您的paddle版本高于`1.6.1`,可以利用pip升级您的paddle版本 - 请确保您的本地模拟分布式运行环境中没有设置`http/https`代理,可以在终端键入`env`查看环境变量 # ## 数据准备 ### 数据来源 训练及测试数据集选用[Display Advertising Challenge](https://www.kaggle.com/c/criteo-display-ad-challenge/)所用的Criteo数据集。该数据集包括两部分:训练集和测试集。训练集包含一段时间内Criteo的部分流量,测试集则对应训练数据后一天的广告点击流量。 每一行数据格式如下所示: ```bash