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

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

CTR预估简介

CTR预估是计算广告中最核心的算法之一,那么CTR预估是指什么呢?简单来说,CTR预估是对每次广告的点击情况做出预测,预测用户是点击还是不点击。

在计算广告和推荐系统中,CTR预估一直是一个核心问题。无论在工业界还是学术界都是一个热点研究问题,近年来也有若干相关的算法竞赛。

DeepCTR简介

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

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

FNN,PNN,Wide&Deep,DeepFM,NFM,AFN,DIN等。

对于刚接触这方面的同学来说,可能对这些方法的细节还不太了解,虽然网上有很多介绍,但是代码却没有统一的形式,且使用起来不是很方便,从头开始实现成本又比较高。那么这里介绍一个基于深度学习的CTR模型包DeepCTR,无论是使用还是学习都很方便。

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

您可以像使用其他Keras模型一样简单的通过model.fit()和model.predict()使用这些复杂模型。

图:支持文档

    安装与使用

安装
pip install deepctr
使用例子:

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

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

#ai8py.com
# 先导入相应的python包,记得先安装以下tensorflow(1.4.0到1.6.0都可以)
import pandas as pd
from sklearn.preprocessing import LabelEncoder, MinMaxScaler
from deepctr.models import DeepFM
# 使用pandas 读取上面介绍的数据,并进行简单的缺失值填充
data = pd.read_csv('./criteo_sample.txt')
# 上面的数据在:https://github.com/shenweichen/DeepCTR/blob/master/demo/criteo_sample.txt
sparse_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()方法统计。
sparse_feature_dict = {feat: data[feat].nunique() for feat in sparse_features}
dense_feature_list = dense_features
#最后,我们按照上一步生成的特征字典拼接训练数据
model_input = [data[feat].values for feat in sparse_feature_dict] + [data[feat].values for feat in dense_feature_list]  
# 一切就绪,使用DeepFM进行训练!
model = DeepFM({"sparse": sparse_feature_dict, "dense": dense_feature_list}, 
                 final_activation='sigmoid')
model.compile("adam", "binary_crossentropy",
                 metrics=['binary_crossentropy'], )
history = model.fit(model_input, data[target].values, batch_size=256, epochs=10, verbose=2, validation_split=0.2, )
print("train done")

总结

DeepCTR是一个简洁易用模块化可扩展的基于深度学习的CTR模型包。本文对DeepCTR进行简单介绍,并举例说明,同时提供DeepCTR代码文档资源

资源下载

文档主页:

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

代码主页:

https://github.com/shenweichen/DeepCTR

github主页:https://github.com/shenweichen

发表评论

电子邮件地址不会被公开。 必填项已用*标注