前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法复现·推荐算法 | DeepFM for CTR Prediction

算法复现·推荐算法 | DeepFM for CTR Prediction

作者头像
用户1621951
发布2020-10-22 10:00:58
1.1K0
发布2020-10-22 10:00:58
举报
文章被收录于专栏:数据魔术师数据魔术师

背景

点击率(CTR)的预测在推荐系统中至关重要,目的是估算用户点击推荐项目的可能性。大多数推荐系统的目标都是最大程度地增加点击次数,因此返回给用户的项目也根据估算的点击率进行排名;而在其他应用场景(例如互联网广告)中,提高收入也很重要,因此项目的排名策略调整为所有候选项的点击率X出价,其中“出价”是用户点击商品后系统获得的收益。故无论哪种情况,很明显,关键都在于正确估算点击率。

难点与现状

对于CTR预测而言,了解用户点击行为背后的隐式交互特征非常重要:

比如,人们经常在用餐时下载用于送餐的APP,这表明应用程序类别和时间戳之间的(2阶)交互作用可用作CTR预测的一个特征。再比如,男性青少年喜欢射击游戏和RPG游戏,这意味着应用类别,用户性别和年龄的(3阶)交互作用也是CTR的一个特征。

如上,用户点击行为背后的各种交互非常复杂,其中低阶和高阶特征交互均发挥重要作用。

因此,CTR预测关键在于如何有效的建模捕捉交互特征。一些功能交互很容易理解(如上面的实例),但其实大多数交互都隐藏在数据中,并且很难识别(例如,零售业经典关联规则“尿布和啤酒”是从数据中提取的,而不是由专家发现的),这类交互只能通过机器学习自动捕获。而即使对于易于理解的交互,当其规模很大时,也很难做到详尽的建模描述。

目前主流的几种方法,如FTRL、FM、CNN、RNN、DNN、PNN、Wide&Deep要么仅支持低阶特征(或高阶特征),要么就需要大量的特征工程。

故本文提出了一种DeepFM方法,既能支持低阶与高阶的特征交互,同时引入了特征嵌入的共享策略,以避免特征工程。

文章模型

数据集描述:

假设用于训练的数据集包含n个实例(x,y)

其中x是涉及用户和产品的m个字段的数据记录,y∈{0,1}是表示用户点击行为的标签(1表示点击、0表示未点击), x通常包括类别字段(例如,性别,位置)和连续字段(例如,年龄)。

数据处理阶段,每个类别字段均表示为one-hot的向量,而每个连续字段则表示为值本身,或离散化后的one-hot的向量。

然后,将每个实例转换为(x,y)

其中,

是d维向量,其中X field j是x的第j个字段的矢量表示。通常,x是高维且极为稀疏的。

CTR预测的任务就是建立一个预测模型y = CT R_model(x)来估计用户在给定上下文中点击特定应用的概率。

DeepFM:

DeepFM由两个部分组成,FM部分和Deep部分,它们共享相同的输入。

对于特征i,标量wi用于权衡其1阶重要性,而潜在矢量Vi用于测量其与其他特征相互作用的影响。

Vi馈入FM组件以建模2阶特征交互,并馈入深层组件以建模高阶特征交互。

联合训练预测模型所有参数,包括wi,Vi和网络参数(下文提到的W(l),b(l)),则有:

其中ˆ y∈(0,1)是预测的CTR,yFM是FM分量的输出,而yDNN是DNN分量的输出。

FM Component:

除了特征之间的线性(1阶)交互作用外,FM模型将2阶的特征交互作为各个特征潜在向量的内积。它可以比以前的方法更有效地捕获2阶特征交互,尤其是在数据集稀疏的情况下。在先前的方法中,仅当特征i和特征j都出现在同一数据记录中时,才能训练特征i和j的交互作用的参数。在FM中,通过其潜在向量Vi和 Vj的内积对其进行测量。由于这种灵活的设计,只要i(或j)出现在数据记录中,FM都可以训练潜矢量Vi(Vj)。因此,FM可以更好地学习从未或很少出现在训练数据中的特征交互。

如图2所示,FM的输出是2个单元的总和:

其中,

前半部分反映了1阶特征的重要性,后半部分表示2阶特征交互的影响。

Deep Component:

Deep部分用于学习高阶特征交互。如图3所示,数据记录(向量)被馈送到神经网络,这些原始特征输入向量通常是高度稀疏且超高维的,类别字段与连续字段混合并且按标签(例如性别,位置,年龄)分组。

故在进一步馈入第一隐藏层之前,嵌入层会将输入向量压缩为低维,密集的实值向量,否则网络可能不堪重负。

图4突出显示了从输入层到嵌入层的子网结构。注意:1)虽然不同输入场矢量的长度可以不同,但它们的嵌入大小相同(k);2)FM中的潜在特征向量(V)现在用作网络权重,这些权重已被学习并用于将输入场向量压缩为嵌入向量。

与[Zhang et al,2016]不同,本文没有使用FM的潜在特征向量来初始化网络,而是将FM模型作为整体学习架构的一部分。这样一来,我们就无需通过FM进行预训练。

将嵌入层的输出表示为:

其中ei是第i个字段的嵌入,m是字段数。然后,馈入深度神经网络,正向过程为:

其中l是层深度,σ是激活函数。a(l),W(l),b(l)是第l层的输出,模型权重和偏差。进一步,生成一个密集的实值特征向量,最终将其输入到用于CTR预测的S型函数中:

其中| H |是隐藏层的数量。

算法复现

数据处理

设定权重

模型训练

模型预测

模型评估

结果输出

参考文献:

Guo H , Tang R , Ye Y , et al. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction[J]. 2017.

参考代码:

https://github.com/ChenglongChen/tensorflow-DeepFM

数据下载:

https://www.kaggle.com/c/porto-seguro-safe-driver-prediction/overview

--------- END ----------

代码语言:javascript
复制
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据魔术师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档