Advertisement

python广告点击率预测_推荐系统中的点击率预估 – Advertising & Recommendation

阅读量:

推荐系统的框架模式主要由多个召回机制(触发层)和一个单一融合排序方法(排序层)组成。这种两阶段排序模型也可以视为一种基于分层优化的推荐系统架构。

常见的召回策略种类繁多。如协同过滤中基于项(Item-based)和基于用户的(User-based)以及矩阵分解(Matrix Factorization)等技术手段。在融合排序层中,在采用点估计排序方法[24]时,默认情况下最常用的指标是点击率(Click-Through Rate, CTR)预估[1]作为主要依据。

预期转化率为在特定环境下, 某个内容展示给特定受众后所达到的转化概率。广告投放效果中的预期转化率是衡量精准投放的重要指标,在实际应用中常见的是投放数据中常见的预期转化率为0.22%和0.34%等数值,在实际应用中需综合考虑成本投入等因素进行排序;推荐系统则无需精确匹配准确值, 只需确保排序结果符合A>B>C这样的优先级顺序即可[31]. 转化效率等于曝光量除以互动次数(转化效率越高,则表示以较低成本投入获得越多关注焦点)

本文阐述基于Logistic Regression和FTRL的点击率预估模型,请参考文献[10]以获取更多相关信息。此外,请注意以下几点:第一段主要介绍了Logistic回归的基本原理及其在广告点击率预测中的应用;第二部分则详细讨论了其在实际系统中的优化实现;第三部分重点分析了算法性能评估的关键指标及其对比实验结果。

Online Learning TG

FOBOS

RDA

FTL

FTRL

数据预处理 采样

特征工程

评估

代码实现

Logistic Regression

在展示广告(图片广告)领域中已有较多的研究致力于CTR(Click-Through Rate)的预测模型。其中一种常用的方法是逻辑回归(Logistic Regression, LR),因其计算效率高以及良好的性能表现,在工业界应用最广的CTR预估模型之一。

为了构建点击率预测的模型,在时间t时点上,我们通过特征向量Xt来表征一个具体实例的状态,并赋予模型权重向量Wt。其中,在该时刻的概率估计值p(t)被定义为σ(Wt•Xt),其中σ = 1/(1 + exp(-a))表示sigmoid函数。其对应的对数损失函数(logloss)定义为:

通过上式可以很容易计算出loss function关于W的梯度

该模型结构简洁,在训练过程中具有良好的并行特性,在预测阶段仅需对输入特征进行线性组合运算因而表现出较高的泛化能力,并且特别适合处理海量离散型标识符类数据其离散型标识符作为特征的一种形式具有显著的优势能够有效避免信息损失相对于标准化的CTR编码方式尤其能提供更为细致的头部资源描述

LR 存在明显的局限性。首先,在处理连续型特征时需先将其划分为离散类别。采用人工分桶的方法可能导致多方面的问题出现。另一方面,在构建模型时需手动设计和组合大量特征,并且这要求开发者具备丰富的专业知识储备才能避免弯路。这样的模型在跨领域应用中迁移难度较大,在新领域应用时往往需要重新投入大量的人工特征工程工作[10]

Online Learning

无论是在线性回归(Linear Regression)、逻辑回归(Logistic Regression)、支持向量机(SVM)以及深度学习(Deep Learning)领域中, 最优化求解都属于基础操作. 常见的梯度下降(Gradient Descent)、牛顿法(Newton's Method)以及拟牛顿法(QN Methods)等都属于批处理方法(Batch Processing), 每次迭代都需要重新遍历并训练过的所有样本数据. 然而, 在面对高维数据和大规模数据时, 批处理的方式由于计算量大且效率低下而显得不够理想, 因此在线学习(Online Learning)方法成为解决这些问题的有效途径[7].

在线学习算法的特点在于:每当接收到一个训练样本时,在此基础上生成相应的loss值和梯度,并对模型参数进行更新一次;随后逐个样本依次处理数据以完成整个训练过程。在大规模线性模型参数优化中,在线学习算法展现出显著的优势:尽管单个特征向量的空间维度可能高达数亿级别(即达到上亿维度),但由于每个具体样本中仅有数百维具有非零值;因此无需一次性全部加载到内存中即可完成高效的数据流式读取与计算操作[4])。此外,在实时反馈机制的支持下,在线学习算法能够迅速响应数据变化并动态调整模型参数;最终实现在线预测性能随时间持续提升[3]

采用批处理模式时(Batch mode),L1范数正则化通常会生成具有较高稀疏性的模型(Sparse)。权重向量𝑊中更多的维度会被归零(变为零),这些被归零的维度反映了不太相关的重要特征,并有助于实现特征选择(Feature Selection)的目的。与批处理不同,在线学习中的每次迭代仅根据单个样本计算梯度方向进行更新(即沿着某个样本产生的梯度方向下降),整个优化过程本质上是一个随机搜索的过程(这是因为SGD具有随机性)。即使使用L1正则化的策略,在线学习中也难以实现真正的稀疏解(Sparse)。在线最优化求解算法中普遍重视这一特性(参考文献[7])。特别对于工程应用场景来说,在线学习由于其数据处理效率高且适应性强的特点,在减少预测时所需的内存和计算复杂度方面具有显著优势

在线梯度下降法(OGD)已得到广泛认可,并与随机梯度下降法具有相似性;该方法不仅有效提升了预测精度而且显著降低了计算资源消耗。然而,在实际应用场景中存在一个重要的考量因素:模型的整体规模直接影响系统的内存占用水平;具体而言,在权重向量W中非零系数的数量直接影响系统的内存占用水平;遗憾的是,在现有技术框架下直接引入L1正则化项无法确保权重向量W中的非零系数绝对消失[4]

TG

为了获得稀疏化的特征权重𝑾,一种直接且便捷的方法就是设定一个阈值,使得当𝑾某一维上的系数低于该阈值时将其置零(即执行简单的截断处理)。这一方法具有较高的易用性和可解释性,但其实际效果可能会受到限制,尤其是在某些特定场景下(尤其是在线梯度下降算法中)若某一维上的系数较小,则可能是由于训练数据不足所致[7]。

截断梯度法(TG, Truncated Gradient)本质上是对简单截断方法的一种优化实现;该方法通过设定一个大小为𝑘的时间窗,在时间步除以窗口大小不是整数的情况下,则采用标准的SGD进行迭代;而当时间步刚好落在窗口倍数的情况下(即t除以k结果为整数),则采用了以下具体的权重更新策略:具体而言,在时间步刚好落在窗口倍数的情况下(即t/k结果为整数),权重按照SGD的标准更新步骤进行调整

上述的简单截断法被TG的作者描述为too aggressive,因此TG对其进行了相应的改进.相较于之前的直接方法,TG采用了更为温和的方式进行处理.同样地表述为:

TG的算法逻辑如下:

FOBOS

在FOBOS中,将权重的更新分为两个步骤:

前一步骤本质上是一个标准的梯度下降过程;随后的一个步骤可视为对梯度下降结果的一种精细调整。考察第二个步骤时会发现,在这一过程中, 对𝑊的微调被划分为两个阶段:第一阶段旨在保持微调在梯度下降结果附近;第二阶段则专注于通过正则化手段实现稀疏性效果[7]。

L1-FOBOS在每次处理𝑊的过程中,会对𝑊的每一个维度进行判断,并且当满足特定条件时对该维度进行截断。

当一条样本生成的梯度未能导致对应维度上的权重值发生显著变化(\eta(t+12)\lambda),则可认为在此次更新中该维度的重要性较低,在后续迭代中应将其权重设置为0。可以看出L1-FOBOS相当于TG在特定条件下的一种表现形式。

RDA

无论何种情况下去讲, 简单截断法以及TG和FOBOS等方法均建立在SGD的基础上. 它们属于梯度下降类的方法, 其显著优点在于具有较高的精度水平, 并且这些方法也能有效提升稀疏性. 然而, 另一种算法RDA则采取了不同的策略. 它从另一个角度解决在线优化问题并能更有效地提高特征权重的稀疏度. L1-RDA特征权重的各个维度更新的方式为:

当某个维度上的累计梯度均值绝对值低于设定阈值λ时,则该维度对应的权重会被设为零,并由此引发特征权重的稀疏性出现。

L1-RDA方法设定了一个恒定的截断门限λ作为常数参数,在时间步t上保持不变。相比于L1-FOBOS方法,在截断判定逻辑上表现得更为激进。这种设计特点使得L1-RDA更容易生成具有高稀疏性的模型结构;另外,在RDA方法中采用的是梯度累加平均值𝑔 𝑖(𝑡)作为判断依据。与TG或L1-FOBOS方法不同的是,在这些算法中仅基于单次梯度结果进行判断。通过这种方式可以规避了单一梯度计算可能带来的不充分性问题。此外,在微调该参数λ的同时即可实现对模型精度和稀疏性的平衡控制。

那么这两者的优势能否在一个算法框架中体现出它们的优势?这正是FTRL所要解决的核心问题。[9]中总结了FTRL的形成思路

Follow The Leader

在详细介绍FTRL算法之前建议先了解FTL(Follow The Leader)算法[25]。FTL的核心思想是通过每次选择使累计损失最小的参数来实现学习过程。

FTL的缺点是[13][26]W在上下一轮训练之间会发生剧烈变化,预测不太稳定。

Follow The Regularized Leader

FTRL算法就是在FTL的优化目标的基础上,加入了正规化,防止过拟合。

在FTRL算法中,由于其损失函数通常不容易直接求解,在这种情况下,我们需要寻找一种替代的损失函数作为近似。这种替代损失函数需要满足两个主要条件:首先要求相对容易计算;其次最好具备解析表达式。

优化代理损失函数求的解,和优化原函数得到的解差距不能太大

为了度量条件2中两个解之间的差距, 为此需要引入regret这一概念. 假设在每一步中所采用的代理函数为h(w), 每次更新时会根据观测到的结果进行相应的调整.

其中

对应着原问题的最优解而言,在每一次迭代中使用代理函数求得的解与真实损失函数所对应解之间存在一定的差异。需要注意的是,这个差异必须满足一定的条件才能使在线学习方法奏效。

随着训练数据量的增加, 两个优化目标所对应的参数在实际损失值上的差距逐渐缩小. 若fi(w)为凸函数时, 可以用其自身作为替代函数

其中gi是fi(w)的次梯度(当fi(w)是可导的,次梯度就是梯度),学习率ηt满足:

通过引入L1正则化机制能够有效地引导模型参数向零点收缩,在这一过程中其主要作用在于实现特征自动选择的功能[7]。这种特性不仅有助于减少计算开销[7][10],还可以从优化算法的角度进一步提升模型性能。基于此,我们可以深入探讨这一现象产生的根本原因及其在实际应用中的具体表现。在优化问题中定义的目标函数通常要求满足特定条件以确保收敛性,在这种情况下我们需要确保代理函数ht在满足特定约束条件下都能够正确地逼近目标函数的行为特征。通过上述分析可知,我们可以推导出w的具体解析解形式:

其中

对于上面的迭代式,如果

当某个变量等于0时,并且学习率ηt被设定为一个常数,则该过程与SGD具有相同的特性[11]。综上所述,则可以得出FTRL的更新规则。

下图是[4]中给出的针对Logistic Regression的L1&L2-FTRL算法逻辑

两种更新流程之间主要区别在于第一个流程中超参数ß设为0。具体而言,在参考文献[4]中的算法设定中

FTRL,较SGD有以下优势[40]: 带有L1正则,学习的特征更加稀疏

使用累计的梯度,加速收敛

基于特征在样本中的出现频率来设定该特征的学习率,并对各维度的学习率均采取独立设置的方式以确保每个特征都能获得足够的学习机会

数据预处理

用于点击率预估的数据多为日志形式,在实际应用中面临诸多挑战。具体而言,在进行数据分析时需要考虑样本间的关联性分析、抽样标准的确定以及权重分配等关键环节,并且在实际应用中需要考虑多个因素的影响[31]。

采样

在实践中,正样本与负样本之间存在严重失衡(引用文献30)。这种失衡可能会影响模型的估计效果。通过欠采样技术处理能有效降低训练数据集的规模。另一种方法是采用包含至少一个广告被点击的数据作为正类样本;而另一种策略则是采用一种比例r来抽样那些不含任何广告点击事件的数据作为负类样本。然而,在这种抽样策略下可能会导致预测结果出现较大的偏差。

在训练过程中采取的方法是对每个样本分配一个特定的权重系数,并将这些权重应用到损失函数上;这样一来,在梯度计算时会自动带上这些分配好的权重系数[2]。主要策略是在采样阶段减少负样本的数量,在后续的学习过程中通过给每个正样本赋予较高的权重来弥补数量上的不足[9][11];其核心理论依据在于保持重新采样后的期望损失与原始损失一致[37]。

[41]中发现,在负样本上进行1%的采样(样本量大小为),在训练时间和预测准确性上达到了良好的均衡。

[31]中

特征工程

CTR预估模型所采用的主要特征主要包括以下三种类型:一是与用户的个人属性相关的信息(如年龄, 性别, 职业, 兴趣, 品类偏好等), 二是与商品的基本属性及销售表现相关的信息(如所属品类, 销量, 价格, 评分等), 三是与用户体验及商品匹配度相关的数据信息(如用户的近期点击数据, 用户行为转化率等)。其中详细列举了移动端推荐的相关数据指标

标识符相关属性中包含User、Item、Context的基本维度特徵,在動態場景下具體表现为設備ID與用戶ID的對比分析;地理位置相关的屬性特徵;基於手機型號的屬性特徵以及混合設備類型(PC & Mobile)的結合體現。各个屬性的重要性由其在數據集中的統計分布決定,并便於构建完整的屬性體系並進行模型調試分析;便于集成在线學習机制[37].

特征处理一般包括以下内容[31]:

LR 处理离散特性的熟练程度较高(即能够得心应手),但在处理连续特性的过程中必须将它们转换为离散形式以便模型后续处理。常见地来说,在实际应用中会遇到以下几种典型的连续型变量:大量具有反馈价值的CTR相关特征;同时存在语义相近的不同取值变量;以及与属性相关的数值型变量如年龄与价格等指标。以年龄段为例,在实际应用中可以通过业务知识划分bucket的方式将其划分为多个区间 bucket:例如按照从小学到大学的不同学习阶段划分学生的学习平均年龄区间 bucket;另外还可以采用统计量方法来划分bucket 使得每个bucket内的数据分布更加均匀。其中Criteo公司采用基于梯度提升树(GBDT)的方法自动生成并优化这些feature bucket以及交叉 feature [34]

文献[19]对Avazu竞赛[20]中的点击率预估数据进行了归纳总结,并归纳出三种特征处理方法。其中第一种方法主要采用每一列直接进行OneHotEncoding,并将经过编码后对应的index作为新的特征

该方法主要通过数据分析整合相关联的特征参数。例如整合设备型号(device-model)、设备ID(device-id)以及设备IP地址(device_ip)这三个参数的具体数值信息作为用户的唯一标识ID,并对该编码结果进行One-Hot编码处理。随后将该编码后的索引值作为一个新的特征参数加入模型训练过程。值得注意的是,在推荐系统的CTR预估过程中这一技术已经被广泛采用并取得了较好的效果

该方法涉及将每个键值对进行处理。具体而言,即对于每个键值对,例如device_id等于a99f214a的数据,将其组合为device_id_a99f214a的形式,然后将这些字符串进行哈希编码处理,并对其取模运算,计算其模运算结果作为新的特征向量维度。例如图中所示,325886表示第325886个特征向量维度对应的特征值为1

评估

模型的评估主要分为离线和线上评估:

线上评估指标包括MAP和NDCG[35]。

[36]

代码实现

[31] 中给出了推荐系统中点击率预估的系统流程:

在移动端推荐排序方面,《3》提出了一种在线学习架构体系。该体系将展示日志、点击日志以及订单日志分别存储于不同的Kafka流中进行管理。系统通过从Kafka流中读取数据,并以HBase作为中间缓存层,在此过程中实现了label匹配(即将点击与订单对应到相应的展示日志)。具体而言,在label匹配的过程中会将同一会话的日志进行归集整理以便于后续筛选训练数据。随后系统会不断从HBase数据库中提取数据用于模型训练,并将训练得到的模型存储于美团内部使用的Redis数据库(Medis)。当线上系统运行时,则会利用Medis中的预训练模型来预测用户的下单概率,并基于这一预测结果来进行排序操作以提升用户体验

[12]中采用了基于Python实现FTRL的一个版本,在详细阐述了训练过程的具体逻辑后可供参考。

基于Outbrain[22]提供的广告展示记录、广告基本数据以及在展示广告时所处的环境数据,在此研究中涉及的研究对象包括:display_id

ad_id

广告基本数据包括 document_id

campaign_id

advertiser_id

广告的展示上下文数据包括 display_id

uuid

document_id

timestamp

platform

geo_location

在文献[28]中所描述的方法中,在应用FTRL算法处理训练数据之前,请您参考上文所述的方法:将各分类别下的特征值与类别标签进行连接操作后,并通过哈希冲突校验并取模运算得到对应的数值作为特征表示;随后,在每个样本的学习过程中定期更新系数向量以及各特征的学习速率参数;最后利用平均准确率(Mean Average Precision)指标评估测试集上的预测性能。值得注意的是,在文献[27]中提供了基于R语言实现这一方法的一个版本

[16]一文中详细介绍了采用Factorization Machine及FTRL优化框架进行二分类问题的建模与求解,并特别针对二分类问题进行建模与求解,在点击率预测(Click-Through Rate, CTR)等场景中进行了应用与验证。

总结

FTRL 可以实现在线更新,并使 LR 模型中存储的信息能够迅速地被更新。此外 FTRL 具备良好的稀疏性和准确性 从而能够有效降低内存消耗并防止过拟合 最终 FTRL_Proximal 支持动态学习率 并对不同特征完整性采用不同的步长进行梯度下降 同样 FTRL 存在一些局限性 需要依赖人工特征工程以及离散化分桶操作[10]

代码示例

参考资料

[1]http://mp.weixin.qq.com/s/scnAVuiMb3kH2NLyOmdCcQ

[2]A Survey on Algorithms of the Regularized Convex Optimization Problem

[3]https://tech.meituan.com/online-learning.html

[4]Ad Click Prediction : a View from the Trenches

[5]Display Advertising with Real-Time Bidding and Behavioural Targeting

[6]https://www.quora.com/What is an intuitive explanation of the FTRL algorithm

[7]冯扬.在线最优化求解

[8]Factorization Machines based on Follow-The-Regularized-Leader for predicting CTR in display advertising

[9]http://www.cnblogs.com/EE-NovRain/p/3810737.html

[10]https://www.qcloud.com/community/article/701728

[11]

[12]https://github.com/zhouyonglong/FTRLp

[13]poetniu.Online Learning/Optimization算法实现与理论分析

[14]https://www.qcloud.com/community/article/643549

[15]https://www.qcloud.com/community/article/622182

[16]https://github.com/zhouyonglong/alphaFM

[17]https://www.kaggle.com/sudalairajkumar/ftrl-starter-with-leakage-vars

[18]https://www.kaggle.com/c/criteo-display-ad-challenge/discussion/10322

[19]Jian Li.Ad Click-Through Rate Prediction

[20]https://www.kaggle.com/c/avazu-ctr-prediction

[21]https://www.zhihu.com/question/37866658

[22]https://www.kaggle.com/c/outbrain-click-prediction

[23]http://www.cs.cmu.edu/~ninamf/courses/806/

[25]Online Learning II : ERM and Follow the (Regularized) Leader

[26]Online Learning and Online Convex Optimization

[27] http://dsnotes.com/page/2017/01/lessons learned from outbrain click prediction Kaggle competition/

[28] 提供 Kaggle 上一个 FTRL 开源 Starter 包带泄漏变量的连接。

[29]Performance Evaluation of Information Retrieval Systems

[30]计算广告 互联网商业变现的市场与技术

[31]https://zhuanlan.zhihu.com/p/27278885

[32]这是一个参考链接。

[33]Efficiency/Effectiveness Trade-offs in Learning to Rank

[34]http://labs.criteo.com/Role/data-scientist/

[35]http://fastml.com/evaluating-recommender-systems/

[36]http://www.cnblogs.com/zhengyun_ustc/p/55solution1.html

[37]夏粉.广告数据上的大规模机器学习

[38]https://yq.aliyun.com/articles/122

[39]https://tech.meituan.com/mt_dsp.html

[40]http://mp.weixin.qq.com/s/lUP2BehOh7KczR3WRnOqFw

[41]Simple and scalable response prediction for display advertising

[42]https://github.com/alexeygrigorev/libffm-python

Advertisements

全部评论 (0)

还没有任何评论哟~