ctr预估_ctr预估模型 - CSDN
精华内容
参与话题
  • CTR预估算法(浅层模型)

    千次阅读 2019-09-11 15:17:57
    CTR预估中,Logistic Regression应该是最早被应用而且应用最广泛的模型了。输入是one-hot之后的特征,输出是点击广告的概率。对于类别型特征,one-hot之后,每一个取值都变成了一维新的特征。线性模型有一个致命的...

    1. 发展

    在CTR预估中,Logistic Regression应该是最早被应用而且应用最广泛的模型了。输入是one-hot之后的特征,输出是点击广告的概率。对于类别型特征,one-hot之后,每一个取值都变成了一维新的特征。线性模型有一个致命的缺点:对于每一个维度特征权重的学习是独立的,很难有效的学习到组合特征的权重。

    为了解决这个问题,相继提出了改进模型Poly2和FM。Poly2又叫做degree-2 polynomial mappings,它对于每一对组合特征都会学习一个权重,从名字上应该能看出来,最高考虑2维组合特征;FM则是通过把特征组合分解成两个隐向量的内积来学习组合特征的权重,理论上可以提取任意高维组合特征,但是出于计算复杂度的考虑,实际往往也只是到2维组合特征。

    关于FM,在CTR预估系列的第四篇文章中我们会给出详细介绍,敬请期待~

    FFM全称是Field-aware Factorization Machines,是从PITF(pairwise interaction tensor factorization)改进而来的。PITF限制了特征维度为User、Item、Tag这三个维度,而且主要关注的问题是个性化标签推荐。FFM去掉了对于特征维度的限制,并且专注于CTR预估问题,更加泛化通用。这也是两者间仅有的区别。

    2. 理论公式

    CTR预估模型中,LR,FM,FFM的目标函数或者说是损失函数,都可以统一为:

    包括两部分:正则项 + 经验损失。经验损失用的是logistic loss.

    对于线性模型有:

    决策函数为:

    对于FM有:

    对于FFM有:


    其中,j1, j2表示特征维度,f1, f2分别表示j1, j2所属的field。

    公式有点多,是不是有点乱?没关系,让我们来理一理!

    首先,为了简单,上面公式中省略了常数项和一次项。
    其次,我们知道统计学习三要素:模型+策略+算法,模型就是要学习的条件概率分布或决策函数。由决策函数表示的模型为非概率模型,由条件概率分布表示的模型为概率模型。我们可以认为上面的函数就是决策函数,针对不同的模型线性模型、Poly2、FM、FFM,决策函数自然也不同。。里面的x对应一条样本,x的下标表示该条样本中,不同维度特征的取值。
    最后,我们的目标函数就是最小化:正则项 + logistic_loss。其中logistic_loss自然就和模型的决策函数有关了。

    3. 思想

    3.1 Poly2

    对于Poly2:

    1. 相比于kernel method,训练时间要短

    2. 为每一个组合特征都学习一个权重。特征权重之间是独立

    3. 又叫做degree-2 polynomial mapping,多项式线性模型,主要是2维组合特征

    决策函数为

    Poly2最naive的版本,认为每一对组合特征都是一个新特征。但是这样模型大小是O(n^2),模型太大了无法学习。
    Vowpal Wabbit (VW)是一个库,通过对j1和j2做hash,解决了这个问题。

    换句话说,函数h(j1,j2)是一个Hash函数。作用是将j1和j2,映射到一个合理的自然数上。为什么会有这样奇怪的举动那?原因是:CTR问题的输入维度一般比较高,Poly2考虑所有的2维组合特征,为每个组合特征都要学习一个权重,这个维度是O(n^2)。所以我们把原来的维度通过Hash,转换到一个合理的维度范围,再进行学习。

    VW和FFM中实现的Hash函数如下:

    3.2 FM

    这里简单介绍下,详细介绍CTR系列后续文章会更新,敬请关注

    FM的做法:

    1. 为每一维特征都学习一个隐向量

    2. 每一个隐向量都包含k个latent factors。k是人为设定的超参数

    3. 每一个组合特征对于最终预测结果的影响,或者说权重,都通过对应的隐向量的内积来表示

    FM的论文里有提到,FM效果比Poly2要好的原因,个人认为这也是FM的核心所在:
    最主要的原因可以说是样本不够充分造成的。 有人会说,CTR问题的训练集一般很大,样本怎么会不够用那?输入数据one-hot之后,维度会很高,而且非常稀疏,相比之下样本数量就没那么多了。

    举个例子,假设这是我们的训练数据:

    具体来说,原因有两点:

    1, 样本不充分。 Poly2学习到的权重不准确。

    在ESPN的广告中,Adidas的样本只有一个,预测结果是-1。那么Poly2对于这个组合特征会学到一个非常大的负的权重 . 因为只有这一个样本,而且label是-1. 模型就认为只要这个pair出现,那么基本上预测结果就是-1, 所以对应的weights会是一个非常大的负值。
    但是,FM不同,对于样本(ESPN,阿迪)的预测,是由两个向量决定的:W_espn * W_adidas 。 而这两个向量,可以单独的去从其他的pair中学习,比如(ESPN,Nike), (BBC, Adidas). 所以FM这样学习的更加准确。
    也就是说,样本的不充分会导致Poly2学习的权重不准确,而FM的会更加准确。

     

    2,样本中根本没有出现这个组合特征。 Poly2学习不到权重。

    比如(NBC, Gucci)这一对样本取值,在给出的训练集上根本就没有。
    Poly2会什么都学不到,或者认为weights是0,所以给出的预测也就没有意义。但是FM不同,可以单独的从其他的pair中学习到W_nbc, W_gucci 所以FM仍然可以给出有意义的预测。
    这里面的关键在于:Poly2中对于每个组合特征的权重是独立的,比如和其他的任何权重都没有关系,他们是相互独立的,你无法从其他的权重中得到关于的任何信息。

    FM中组合特征的权重不再是独立的,比如,它是由两部分组成的 V_NBC, V_Gucci。虽然(NBC, Gucci)没有这个样本。但是可以从包含NBC的其他样本中学习到V_NBC, 从包含Gucci的其他样本中学习到V_Gucci。那么就可以估计出(NBC, Gucci)的权重了。
    这也更加符合逻辑。(NBC,Gucci)和(NBC,Adidas)都含有NBC,所有他们的权重应该是有一些联系,而不应该是完全独立的。

    3.3 FFM

    3.3.1 FFM模型—思想

    FFM是从PITF改进来的,后者用于推荐系统中的个性化标签。

    PITF起初是应用在推荐系统中的,开始只考虑三个维度的特征:User、Tag、Item。并且在三个不同的latent space学习了组合特征:(User,Tag),(User, Item), (Tag, Item). 后来又加上了更多的特征:AdId, UserId, QueryId等,并且也被应用于CTR。但是,PITF的目标毕竟还是推荐系统,而且限制特征维度为User Tag Item这三个维度。

    所以,FFM应运而生!

    CTR大部分的数据集的 特征都可以被分组到field中。FFM就是在FM的基础上利用了这些分组的信息。

    举例来说,假设训练集只有一条训练样本:

    FM模型的决策函数是:

    注意:这里不要写成 
    这关乎到FM中一个重要的问题,隐向量矩阵V到底表示的是什么?
    V的一行表示一个特征,但是这个特征是one-hot之后的,上表中给出的是one-hot之前的。也就是说,one-hot之后,之前那些取值比如:ESPN Nike Male都变成了特征,他们一个取值就是一个维度!!惊不惊喜,意不意外!那么FM学习的就是每个取值(每个维度)的隐向量,所以这里要这么写。

    在FM中,对于任意一个特征维度,比如ESPN,它只有一个latent vector。 无论是在(ESPN, Nike),还是(ESPN,Male)都用同一个latent vector。但是Nike Male属于不同的field,所以可能需要使用不同的latent vector。

    这就是FFM的出发点:每一个特征,针对不同的field使用不同的latent vector.

    FFM函数的决策函数是:

    在FFM中,特征ESPN不再是一个latent vector用到底,而是针对Field A和Field G使用不同的隐向量来计算。因为隐向量变多了,所以隐向量的维度会远远小于FM的。

    3.3.2 FFM模型—方程

    根据FFM对Field敏感的特性,可以导出其模型方程为:

    其中,fj是第j个特征所属的field,fi是第i个特征所属的field。如果隐向量的维度是k,field的个数是f,那么FFM的参数个数是nfk。FFM的二次项并不能化简,计算复杂度就是O(kn^2)

    3.3.3 FFM模型—学习算法

    FFM模型使用logistic loss作为损失函数,加上L2惩罚项,因此只能用于二分类。损失函数:

    其中,yi是-1,+1表示label,L是样本数量,lambda是惩罚项系数。模型采用SGD优化,优化流程如下:

    tr,va,pa分别是训练样本集,验证样本集,参数设置。流程如下:

    1. 根据样本特征数量(tr.n),样本field数量(tr.m),以及参数pa来初始化model。也就是随机的生成模型的参数

    2. 如果pa.norm为真,就对训练集tr和验证集va,在样本维度进行归一化。也就是除以每个样本的模

    3. 对每一轮迭代,如果pa.rand为真,就先打乱训练集tr的顺序。一共迭代pa.itr轮

    4. 训练集中每一个样本执行如下操作:

      1. 根据模型当前参数,计算当前样本FFM的输出项f(x)

      2. 使用交叉熵损失函数,计算当前样本的损失 log(1 + exp(-y*f(x)))

      3. 利用单个样本的损失函数,计算梯度,再根据梯度来更新模型参数

    5. 对于验证集每一个样本,计算FFM输出和损失

    6. 重复3~5,直到到达设置迭代轮数,或验证误差达到最小

    为了加快SGD算法的速度,FFM的实现中采用了如下四种优化

    1. 梯度分布计算。


      损失函数求导中,这一部分和单个W无关,可以只计算一次,之后更新每一个W的时候都用这一个值。W参数的个数为nfk,这样做可以极大的减少运算量。

    2. AdaGrad自适应调整学习速率。

      普通的SGD调整学习率用指数递减,而FFM是参考AdaGrad来更新的。

      其中,Wj1,f2是特征j1针对field f2的隐向量的一个因素(k中的一个,为了简单k维度的下标未给出)。t表示每一轮的迭代。从式子中可以看出,随着迭代的进行,不断的累积梯度,使得学习速率逐渐下降。但是,每个参数学习速率的更新速度是不同的,与其历史梯度有关。根据AdaGrad的特点,对于样本比较稀疏的特征,学习速率要大于样本比较密集的特征。所以参数可以较快速达到最优,又不会造成损失误差的大幅震荡。

    3. OpenMP多核并行计算。

      OpenMP基于共享内存实现多核并行计算。FFM并行化的点:在上面算法的第四步,对每一个样本点执行,求FFM输出,求损失,求梯度,更新梯度模型参数。是在样本层面的并行化

    4. SSE指令集加快向量内积运算。

      SSE是CPU对数据层并行的关键指令,常用于多媒体和游戏的应用程序中。FFM中有大量的向量运算,采用SSE来加快向量内积的运算速度,对模型训练非常有利。

    3.3.4 FFM模型—多值类别型特征

    原始的FFM模型建模时,对于离散特征做one-hot处理,这样同一个样本,同一个field只会有一个特征取值为1,其余的都是0.
    但是,当原始的离散特征取值有多个时,该怎么处理那?比如:

    对于Genre这一个类别型变量来说,一条样本中它可能有多个取值。我们的做法是:依旧认为他们属于同一个Field,但是属于不同的特征
    对于上述训练集,我们会得到5个特征,其中Genre=ComedyGenre=Drame是属于同一个Field的两个不同特征维度。FFM要求我们对field进行编号,然后对feature进行编号。这两个编号是单独进行的。Price是连续型数值,不用one-hot。如下:

    对应的FFM输出为:

    下标中,蓝色对应feature编号,红色对应field编号。绿色是特征取值。

    4. 各模型计算复杂度


    FFM是计算复杂度最高的。FM很好的平衡了计算开销和效果。其实这是一个trade off。

    5. 优缺点

    FFM优点:
    细化隐向量的表示,同一特征针对不同field使用不同隐向量,模型建模更加准确

    FFM缺点:
    计算复杂度比较高,参数个数为nfk,计算复杂度为O(k * n^2)

    6. 使用FFM需要注意的地方

    1. 样本归一化。即pa.norm为真,对样本进行归一化,否则容易造成数据溢出,梯度计算失败。

    2. 特征归一化。为了消除不同特征取值范围不同,量纲不同造成的问题,需要对特征进行归一化。

    3. Early stopping。一定要设置早停策略,FFM很容易过拟合。

    4. 省略零值特征。零值特征对模型没有任何贡献,无论是1次项还是2次项都为0。这也是系数样本采用FFM的显著优势。

     

     

    1. CTR预估

    CTR预估数据特点

    1. 输入中包含类别型和连续型数据。类别型数据需要one-hot,连续型数据可以先离散化再one-hot,也可以直接保留原值

    2. 维度非常高

    3. 数据非常稀疏

    4. 特征按照Field分组

    CTR预估重点在于学习组合特征。注意,组合特征包括二阶、三阶甚至更高阶的,阶数越高越复杂,越不容易学习。Google的论文研究得出结论:高阶和低阶的组合特征都非常重要,同时学习到这两种组合特征的性能要比只考虑其中一种的性能要好。

    那么关键问题转化成:如何高效的提取这些组合特征。一种办法就是引入领域知识人工进行特征工程。这样做的弊端是高阶组合特征非常难提取,会耗费极大的人力。而且,有些组合特征是隐藏在数据中的,即使是专家也不一定能提取出来,比如著名的“尿布与啤酒”问题。

    2. 模型演进历史

    2.1 线性模型

    线性模型最大的缺点就是无法提取高阶的组合特征,依赖于人工的特征组合,这也直接使得它表达能力受限,基本上只能处理线性可分或近似线性可分的问题。。所以常用的做法是人为的加入pairwise feature interactions。即使是这样:对于那些出现很少或者没有出现的组合特征以及高阶组合特征依旧无法提取。

    2.2 FM模型

    FM模型通过对于每一维特征的隐变量(latent vector)内积来提取特征组合,从理论上解决了低阶和高阶组合特征提取的问题。但是实际应用中受限于计算复杂度,一般也就只考虑到2阶交叉特征。那么对于高阶的特征组合来说,可以通过多层的神经网络即DNN去解决。

    线性模型:思路及问题

    线性模型:xi是某个特征值,目标是给每个特征学习一个对应的权重:wi,最终的模型预测值是所有的特征值乘以对应权重的和。

    线性模型取值范围可以无限大,不可控,LR在线性模型基础上,通过S形sigmoid函数把它压到0和1之间,所以LR为广义线性模型。

    线性模型优点:简单,速度快,解释性好,易扩展。缺点:没有考虑特征间的关系,不能够捕获特征组合。

    线性模型改进:加入特征组合

    在线性模型的的基础上,任意两个特征的组合当作一个新特征可以把组合特征显式地、简单的揉进了这个公式,它的优点是:现在能够捕获两两特征组合。但改过来的模型本质是SVM,其缺点是特征组合的泛化能力弱,需进一步对其进行修改。

    FM模型

    FM将权重wi,j,换成了vi和vj的点积。vi是:对于xi这个特征来说它会学到一个embedding向量,特征组合权重是通过两个单特征各自的embedding的内积呈现的,因为它内积完就是个数值,可以代表它的权重。

    SVM泛化能力弱,FM的泛化能力强。

     

     

     

     

    FM模型

    因子分解机(Factorization Machine,简称FM)主要是为了解决高维数据稀疏的情况下,特征怎样组合的问题。高维稀疏数据:通过引入隐向量(对参数矩阵进行矩阵分解),完成对特征的参数估计;特征组合:通过对两两特征组合,引入交叉项特征,提高模型表达能力。所以,FM模型在高度稀疏的条件下能够更好地挖掘数据特征间的相关性,尤其是对于在训练样本中没出现的交叉数据;而且FM在计算目标函数和在随机梯度下降做优化学习时都可以在线性时间内完成。

    在传统的线性模型中,每个特征都是独立的,如果需要考虑特征与特征之间的相互作用,可能需要人工对特征进行交叉组合。非线性SVM可以对特征进行核变换,但是在特征高度稀疏的情况下,并不能很好的进行学习。由于推荐系统是一个高度系数的数据场景,由此产生了FM系列算法,包括FM,FFM,DeepFM等算法。

    逻辑回归无法学习到特征间的组合关系,而特征组合关系在推荐和CTR预估中却是比较常见的。在进行点击率预估时,特征通常来自于用户、广告和上下文环境,如果没有对一这些特征进行组合,模型就无法学习到所有有用的信息。例如,同一个用户在不同时间或者地点感兴趣的广告是不同的;同一件商品在不同地区的受欢迎程度也是不同的。但人工对特征组合需要做大量的特征工程工作,对特征做暴力组合模型又太复杂、参数太多。模型训练迭代无论是内存开销还是时间开销都计人很难接受,迭代效果往往一也比较差。因子分解机和场感知因子分解机是可以自动做特征组合,并且算法效率比较高的模型。

     利用模型来做特征组合,我们很容易想到使用支持向量机的核函数来实现特征之间的交叉。但是多项式核函数的问题就是二次参数过多。设特征维数为n,则二次项的参数数 ,特别是某些广告ID、用户ID类特征,其特征维数可能达到几百万维,这导致只有极少数的二阶组合模式才能找到,所以这些特征组合后得到的特征矩阵就是十分稀疏。而在训练样本不足的时候,特征矩阵的稀疏性很容易导致相关参数准确性较低,导致模型效果不好。而我们可以通过对二次项参数施加某种限制来减少参数的自由度。

    one-hot编码带来的问题

    以广告CTR为例,根据用户与广告位的一些特征,预测用户是否会点击广告。clicked是label,1点击,0未点击。country,day,ad_type是样本的特征。对于类别特征,一般进行one-hot编码。

    one-hot编码会使低维稠密矩阵变为高维的稀疏矩阵,样本特征空间变大,而且数据变得非常稀疏,直接导致计算量过大,特征权值更新缓慢。

    对特征进行组合

    在进行CTR预估时,除了单特征外,往往要对特征进行组合。如果对原始特征直接建模,很有可能会忽略掉特征与特征之间的关联信息。以电商为例,一般女性用户看化妆品服装之类的广告比较多,而男性更青睐各种球类装备。那很明显,女性这个特征与化妆品类服装类商品有很大的关联性,男性这个特征与球类装备的关联性更为密切。因此,可以通过构建新的交叉特征这一特征组合方式提高模型的效果。如果我们能将这些有关联的特征找出来,显然是很有意义的。

    在传统的线性模型如LR中,每个特征都是独立的,没有考虑到特征与特征之间的相互关系,如果需要考虑特征与特征直接的交互作用,需要人工对特征进行交叉组合,但是,LR模型最大的缺陷就是人工特征工程,耗时费力,那么能否将特征组合的能力体现在模型层面呢;非线性SVM可以对特征进行kernel映射,但是在特征高度稀疏的情况下,并不能很好地进行学习;比如为了表述特征间的相关性,采用多项式模型,对任意两个特征进行组合,在多项式模型中,特征xi与xj的组合用xixj表示。二阶多项式模型表达式如下:

    为二阶多项式模型的二阶特征组合和多项式核SVM是等价的。解决了二阶特征组合问题了,但它对组合特征建模,当存在大规模稀疏特征时泛化能力比较弱。

    FM

        二元交叉的FM(2-way FM)目标函数如下:

        其中,w是输入特征的参数,<vi,vj>是输入特征i,j间的交叉参数,v是k维向量。FM表达式的求解核心在于对交叉项的求解。

    组合部分的特征相关参数共有n(n−1)/2个。在数据很稀疏的情况下,满足xi,xj都不为0的情况非常少,这样将导致ωij无法通过训练得出。为了求出ωij,我们对每一个特征分量xi引入辅助向量Vi=(vi1,vi2,⋯,vik)。然后,利用vivj^T对ωij进行求解。


    FM模型也直接引入任意两个特征的二阶特征组合,和SVM模型最大的不同,在于特征组合权重的计算方法FM对于每个特征,学习一个大小为k的一维向量,本质上是在对特征进行embedding化表征。于是,两个特征  和  的特征组合的权重值,通过特征对应的向量  和 的内积  来表示。FM模型和目前的各种深度DNN排序模型比,它仅仅是少了2层或者3层MLP隐层,用来直接对多阶特征非线性组合建模,其它方面基本相同。

    FM的这种特征embedding模式,在大规模稀疏特征应用环境下效果较好,泛化能力强。因为即使在训练数据里两个特征并未同时在训练实例里见到过,即  一起出现的次数为0,如果换做SVM的模式,是无法学会这个特征组合的权重的。但是因为FM是学习单个特征的embedding,并不依赖某个特定的特征组合是否出现过,所以只要特征  和其它任意特征组合出现过,那么就可以学习自己对应的embedding向量。于是,尽管  这个特征组合没有看到过,但是在预测的时候,如果看到这个新的特征组合,因为  和  都能学会自己对应的embedding,所以可以通过内积算出这个新特征组合的权重。这是FM模型泛化能力强的根本原因。其实本质上,这也是目前很多embedding的最核心特点,就是从0/1这种二值硬核匹配,切换为向量软匹配,使得原先匹配不上的,现在能在一定程度上算密切程度了,具备很好的泛化性能。

    为什么要通过向量v的学习方式而不是简单的wij参数呢?

    这是因为在稀疏条件下,这样的表示方法打破了特征的独立性,能够更好地挖掘特征之间的相关性。以上述电影为例,我们要估计用户A和电影ST的关系w(A&ST)以更好地预测y,如果是简单地考虑特征之间的共现情况来估计w(A&ST),从已有的训练样本来看,这两者并没有共现,因此学习出来的w(A&ST)=0。而实际上,A和ST应该是存在某种联系的,从用户角度来看,A和B都看过SW,而B还看过ST,说明A也可能喜欢ST,说明A很有可能也喜欢ST。而通过向量v来表示用户和电影,任意两两之间的交互都会影响v的更新,从前面举的例子就可以看过,A和B看过SW,这样的交互关系就会导致v(ST)的学习更新,因此通过向量v的学习方式能够更好的挖掘特征间的相互关系,尤其在稀疏条件下。

    简单谈谈算法的效率问题

    从FM的原始数学公式看,因为在进行二阶(2-order)特征组合的时候,假设有n个不同的特征,那么二阶特征组合意味着任意两个特征都要进行交叉组合,时间复杂度是O(k*n^2)。通过数学公式的巧妙转化可以变成O(kn)。利用了2xy = (x+y)^2 – x^2 – y^2的思路。

    对于一个实用化模型来说,效果是否足够好只是一个方面,计算效率是否够高也很重要,在数据量特别大的情况下,如果在效果好和速度快之间做选择,很多时候跑得快的简单模型会胜出,这是为何LR模型在CTR预估领域一直被广泛使用的原因。

    而FFM模型则是反例,作为排序模型,效果确实是要优于FM模型的,但是FFM模型对参数存储量要求太多,以及无法能做到FM的运行效率,如果中小数据规模做排序没什么问题,但是数据量一旦大起来,对资源和效率的要求会急剧升高,这是严重阻碍FFM模型大规模数据场景实用化的重要因素。现在很多效果好的DNN排序模型,考虑到运算效率问题,其实不具备实用价值,算起来太复杂,效果好得又很有限,超大规模训练或者在线 Serving速度根本跟不上。如果你原始线上版本是LR做升级方案,我给的建议会是这个序列:LR—>FM-->Wide&Deep->DeepFM—>干点其他的。

    如何优化FM的计算效率

    FM被广泛采用并成功替代LR模型的一个关键所在是:它可以通过数学公式改写,把表面貌似是  的复杂度降低到  ,其中n是特征数量,k是特征的embedding size,这样就将FM模型改成与LR类似和特征数量n成线性规模的时间复杂度了

    FM公式是怎么改写的那么,如何求解vi和vj呢?主要采用了公式:

    \large \begin{aligned} & \sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j} \\=& \frac{1}{2}\left(\sum_{i=1}^{n} \sum_{j=1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j}-\sum_{i=1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{i}\right\rangle x_{i} x_{i}\right) \\=& \frac{1}{2}\left(\sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{f=1}^{k} v_{i, f} v_{j, f} x_{i} x_{j}-\sum_{i=1}^{n} \sum_{f=1}^{k} v_{i, f} v_{i, f} x_{i} x_{i}\right) \\=& \frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} v_{i, f} x_{i}\right)\left(\sum_{j=1}^{n} v_{j, f} x_{j}\right)-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}\right) \\=& \frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} v_{i, f} x_{i}\right)^{2}-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}\right) \end{aligned}

    第一步:改变求和的上下标后,会多两个东西,1、原来没有<Vi,Vi>,现在要把它去掉;2、原来<Vi,Vj>和<Vj,Vi>算作一项,现在要乘1/2

    第二步:Vi和Vj是K维向量,把点积公式展开

    第三步:把k维向量共同的点积部分提取到外部

    第四步:两个不同的下标i和j,求和后值相同,所以可以合并为一个下标,乘积改为平方项

    于是,通过上述四步的公式改写,FM模型时间复杂度就降低到了 了,n还有点大,但是推荐数据的特征值是极为稀疏的,大量xi取值是0,真正需要计算的特征数n是远远小于总特征数目n的,这会进一步极大加快FM的运算效率。

    经过这样的分解之后,我们就可以通过随机梯度下降SGD进行求解:

    FM目标函数可以在线性时间内完成,那么对于大多数的损失函数而言,FM里面的参数w和v更新通过随机梯度下降SGD的方法同样可以在线性时间内完成,比如logit loss,hinge loss,square loss,模型参数的梯度计算如下:对于常数项、一次项、交叉项的导数分别为:

    模型延伸:多元交叉

        前面提到到都是二元交叉,其实可以延伸到多元交叉,目标函数如下:(看起来复杂度好像很高,其实也是可以在线性时间内完成的)

     

    隐向量v就是embedding vector?

    假设训练数据集dataMatrix的shape为(20000,9),取其中一行数据作为一条样本i,那么样本i 的shape为(1,9),同时假设隐向量vi的shape为(9,8)(注:8为自定义值,代表embedding vector的长度)

    可以看到,样本i 经过交叉项中的计算后,得到向量shape为(1,8)。

    由于维度变低,所以此计算过程可以近似认为在交叉项中对样本i 进行了embedding vector转换。

    故,我们需要对之前的理解进行修正:

    1. 我们口中的隐向量vi实际上是一个向量组,其形状为(输入特征One-hot后的长度,自定义长度);
    2. 隐向量vi代表的并不是embedding vector,而是在对输入进行embedding vector的向量组,也可理解为是一个权矩阵;
    3. 由输入i*vi得到的向量才是真正的embedding vector。

    https://www.cnblogs.com/wkang/p/9588360.html

    从MF到FM模型

    Matrix Factorization基本原理

    MF(Matrix Factorization,矩阵分解)核心思想是通过两个低维小矩阵(一个代表用户embedding矩阵,一个代表物品embedding矩阵)的乘积计算,来模拟真实用户点击或评分产生的大的协同信息稀疏矩阵,本质上是编码了用户和物品协同信息的降维模型。

    当训练完成,每个用户和物品得到对应的低维embedding表达后,如果要预测某个  对  的评分的时候,只要它们做个内积计算  ,这个得分就是预测得分。

    MF和FM本质思想上有很多相同点。Matrix Factorization到FM的转换

    本质上,MF模型是FM模型的特例,MF可以被认为是只有User ID 和Item ID这两个特征Fields的FM模型,MF将这两类特征通过矩阵分解,来达到将这两类特征embedding化表达的目的。而FM则可以看作是MF模型的进一步拓展,除了User ID和Item ID这两类特征外,很多其它类型的特征,都可以进一步融入FM模型里,它将所有这些特征转化为embedding低维向量表达,并计算任意两个特征embedding的内积,就是特征组合的权重。

    FM继承了MF的特征embedding化表达这个优点,同时引入了更多Side information作为特征,将更多特征及Side information embedding化融入FM模型中。所以很明显FM模型更灵活,能适应更多场合的应用范围。

    其一:在你有使用MF做协同过滤的想法的时,可以优先考虑引入FM,因为可以在实现等价功能的基础上,很方便地融入其它任意你想加入的特征,扩展性更好。

    其二:从实际大规模数据场景下的应用来讲,在排序阶段,绝大多数只使用ID信息的模型是不实用的,没有引入Side Information,也就是除了User ID/Item ID外的很多其它可用特征的模型,是不具备实战价值的。原因很简单,大多数真实应用场景中,User/Item有很多信息可用,而协同数据只是其中的一种,引入更多特征明显对于更精准地进行个性化推荐是非常有帮助的。而如果模型不支持更多特征的便捷引入,明显受限严重,很难真正实用,这也是为何矩阵分解类的方法很少看到在Ranking阶段使用,通常是作为一路召回形式存在的原因。

    1、FM 对比 SVM

    SVM的线性模型函数表示为:

    2)FM 对比 SVM

        看到上面的式子,是不是觉得跟FM特别像?SVM和FM的主要区别在于,SVM的二元特征交叉参数是独立的,如wij,而FM的二元特征交叉参数是两个k维的向量vi、vj,这样子的话,<vi,vj>和<vi,vk>就不是独立的,而是相互影响的。

        为什么线性SVM在和多项式SVM在稀疏条件下效果会比较差呢?线性svm只有一维特征,不能挖掘深层次的组合特征在实际预测中并没有很好的表现;而多项式svn正如前面提到的,交叉的多个特征需要在训练集上共现才能被学习到,否则该对应的参数就为0,这样对于测试集上的case而言这样的特征就失去了意义,因此在稀疏条件下,SVM表现并不能让人满意。而FM不一样,通过向量化的交叉,可以学习到不同特征之间的交互,进行提取到更深层次的抽象意义。

        此外,FM和SVM的区别还体现在:1)FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常需要在对偶形式下进行;2)FM的模型预测是与训练样本独立,而SVM则与部分训练样本有关,即支持向量。

    https://www.cnblogs.com/AndyJee/p/7879765.html

    这里需要强调下改写之后的FM公式的第一个平方项,怎么理解这个平方项的含义呢?这里其实蕴含了后面要讲的使用FM模型统一多路召回的基本思想,所以这里特殊提示一下。

    参考上图,你体会下这个计算过程。它其实等价于什么?

    这个平方项,它等价于将FM的所有特征项的embedding向量累加,之后求内积。我再问下之前问过的问题:“我们怎样利用FM模型做统一的召回?”这个平方项的含义对你有启发吗?你可以仔细想想它们之间的关联。

     

    因子分解机施加的限制就是要求二次项参数矩阵是低秩的,能够分解为低秩矩阵的乘积。所有。换句话说,就是因子分解机模型的核心思想。因此因子分解机的模型方程为:

     

    其中,vi是i维特征的权重向量,<·,·)代表向量点积。隐向量长度为k(一般设置在100以内,k<<n,极大减少模型的参数。但参数因子化使得xhx‘和xixj不一再是相互独立的,xhx‘和xixj的系数分别为(vn, vi>和(二‘Wi),它们有共同项vi也就是说,所有包含xj的非零组合特征的样本都可以用来学习隐向量vi,这在很大程度上避免了数据稀疏性造成的影响。而在多项式模型中,w。‘和Wi,是相互独立的。显而易见,上面公式是一个通用的拟合方程,可以采用不同的损失函数用于解决分类、二元回归等问题,比如可以采用均方误差损失函数来求解回归问题,也司一以采用Hinge/Cross-Enn}opy损失来求解分类问题。在进行二元分类时,因子分解机输出需要经过Sigmoid变换,这与逻辑回归是一样的直观上因子分解机每次迭代都需要计算}i=1界i+lwu vj )xixj ,
     

     


     

    FFM模型

    FFM(Field-aware Factorization Machine),能意识到特征域(Field)存在的FM模型。通过引入field的概念,FFM把相同性质的特征归于同一个field,相当于把FM中已经细分的feature再次进行拆分进行特征组合。

    在上面的广告点击案例中,“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”这三个特征都是代表日期的,可以放到同一个field中。同理,Country也可以放到一个field中。简单来说,同一个categorical特征经过One-Hot编码生成的数值特征都可以放到同一个field,包括用户国籍,广告类型,日期等等。

    在FFM中,每一维特征 xi,针对其它特征的每一种field fj,都会学习一个隐向量 v_i,fj。因此,隐向量不仅与特征相关,也与field相关。也就是说,“Day=26/11/15”这个特征与“Country”特征和“Ad_type"特征进行关联的时候使用不同的隐向量,这与“Country”和“Ad_type”的内在差异相符,也是FFM中“field-aware”的由来。

    假设样本的 n个特征属于 f个field,那么FFM的二次项有 nf个隐向量。而在FM模型中,每一维特征的隐向量只有一个。FM可以看作FFM的特例,是把所有特征都归属到一个field时的FFM模型。根据FFM的field敏感特性,可以导出其模型方程。

    可以看到,如果隐向量的长度为 k,那么FFM的二次参数有 nfk 个,远多于FM模型的 nk个。此外,由于隐向量与field相关,FFM二次项并不能够化简,其预测复杂度是 O(kn^2)。

    下面以一个例子简单说明FFM的特征组合方式。输入记录如下:

    这条记录可以编码成5个特征,其中“Genre=Comedy”和“Genre=Drama”属于同一个field,“Price”是数值型,不用One-Hot编码转换。为了方便说明FFM的样本格式,我们将所有的特征和对应的field映射成整数编号。

    那么,FFM的组合特征有10项,如下图所示。

    其中,红色是field编号,蓝色是特征编号。

    2、FFM实现细节

    这里讲得只是一种FFM的实现方式,并不是唯一的。

    损失函数
    FFM将问题定义为分类问题,使用的是logistic loss,同时加入了正则项

    逻辑回归其实是有两种表述方式的损失函数的,取决于你将类别定义为0和1还是1和-1。大家可以参考下下面的文章:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/6340129.html。当我们将类别设定为1和-1的时候,逻辑回归的损失函数就是上面的样子。

    举广告CTR的例子:包含三个特征域(Field):投放广告的网站Publisher(特征值ESPN、Vogue、NBC),广告主Advertiser(特征值Nike、Adidas、Gucci),用户性别特征Gender(特征值Male、Female)。由这个例子可以看出组合特征的重要性:如果在体育网站ESPN上发布Nike的广告,那么100次展现,80次会被点击,而20次不会被点击。意味着组合特征(Publisher=”ESPN” and Advertiser=”Nike”)是个很强的预测用户是否点击的二阶组合特征。

    FM模型在做二阶特征组合的时候,对于每个二阶组合特征的权重,是根据对应两个特征的Embedding向量内积,来作为这个组合特征重要性的指示。当训练好FM模型后,每个特征都可以学会一个特征embedding向量,参考上图。当做预测的时候,比如我们接收到上面例子的数据,需要预测用户是否会点击这条广告,则对三个特征做两两组合,每个组合特征的权重,可以根据两个对应的特征embedding内积求得,对所有组合特征求和后,套接Sigmoid函数即可做出二分类预测。

    对于FM模型来说,每个特征学会唯一的一个特征embedding向量,拿Vespn这个特征作为例子,当这个特征和其它特征域的某个特征进行二阶特征组合的时候,不论哪个特征域的特征和Vespn特征进行组合,Vespn这个特征都反复使用同一个特征embedding去做内积,所以可以理解为Vespn这个特征在和不同特征域特征进行组合的时候,共享了同一个特征向量。

    既然FM模型的某个特征,在和任意其它特征域的特征进行组合求权重的时候,共享了同一个特征向量。那么,如果我们把这个事情做地更细致些,比如Vespn这个特征,当它和Nike(所属特征域Advertiser)组合的时候用一个特征embedding向量,而当它和Male(所属特征域Gendor)组合的时候,使用另外一个特征embedding向量,这样是否在描述特征组合的时候更细腻一些?也就是说,当Vespn这个特征和属于Advertiser这个域的特征进行组合的时候,用一个特征embedding;和属于Gendor这个特征域的特征进行组合的时候,用另外一个特征embedding。这意味着,如果有F个特征域,那么每个特征由FM模型的一个k维特征embedding,拓展成了(F-1)个k维特征embedding。之所以是F-1,而不是F,是因为特征不和自己组合,所以不用考虑自己。

     

     

    例子有三个特征域,所以Vespn有两个特征embedding,当和Nike特征组合的时候,用的是针对Advertisor这个特征域的embedding去做内积;而当和Male这个特征组合的时候,则用的是针对Gendor这个特征域的embedding去做内积。同理,Nike和Male这两个特征也是根据和它组合特征所属特征域的不同,采用不同的特征向量去做内积。而两两特征组合这个事情的做法,FFM和FM则是完全相同的,区别就是每个特征对应的特征embedding个数不同。FM每个特征只有一个共享的embedding向量,而对于FFM的一个特征,则有(F-1)个特征embedding向量,用于和不同的特征域特征组合时使用。

    假设模型具有n个特征,那么FM模型的参数量是n*k(暂时忽略掉一阶特征的参数),其中k是特征向量大小。因为每个特征具有(F-1)个k维特征向量,所以它的FFM模型参数量是(F-1)*n*k,参数量比FM模型扩充了(F-1)倍。如果我们的任务有100个特征域,FFM模型的参数量就是FM模型的大约100倍。FM模型可以通过公式改写,把本来看着是n的平方的计算复杂度,降低到  。而FFM无法做类似的改写,它的计算复杂度是  ,这明显在计算速度上也比FM模型慢得多。急剧膨胀的参数量,较高的时间复杂度,使FFM模型相对FM模型是略显笨重的。

    FFM模型参数量太大,在训练时容易过拟合,需要采取早停等防止过拟合的手段。而根据经验,FFM模型的k值可以取得小一些,一般在几千万训练数据规模下,取8到10能取得较好的效果。

    FFM是FM的一个特例,它更细致地刻画了这个特征。首先它做了任意两个特征组合,但是区别在于,怎么刻划这个特征?FM只有一个向量,但FFM现在有两个向量,也就意味着同一个特征,要和不同的fields进行组合的时候,会用不同的embedding去组合,它的参数量更多。对于一个特征来说,原先是一个vector,现在会拓成F个vector,F是特征fields的个数,只要有跟其它特征的任意组合,就有一个vector来代表,这就是FFM的基本思想。

    FFM模型参数相比FM扩大了F倍(F=特征fields个数),虽然效果好于FM模型,但是难以实用化(参数太大,太耗内存),双线性FFM,可以达到接近于FFM的效果,但内存消耗远小于FFM模型

    FFM模型改进版:双线性FFM(Bilinear-FFM)模型

    双线性FFM模型:基本思路

    因为每个特征现在有F个vector来表示它的参数空间,每个特征都需要跟上F个vector,一般CTR任务中的特征数量是非常大的,所以FFM的参数量就异常地大。能不能把跟每个特征走的参数矩阵,抽出它们的共性,所有特征大家一起共享地来用这个参数?如果你一起用的话,就能够共享这个参数矩阵,你就能把参数量降下来,这就是双线性FFM的核心思想。vi,vj还是跟FM一样,还是用一个vector来表达,但是把两个特征交互的信息放在共享参数里面去学,这就是双线性FFM的核心思想。

    双线性FFM模型 共享参数矩阵W的设计,可以有三种选择。

    类型1,不论有多少个特征,大家都共享同一个W,这是参数量最小的一种形式。W的参数量是K×K,K就是特征embedding的size。

    类型2,每个fields给一个不同的W。有12个Fields,就有12个W,每个Fields,各自学各自的W。

    类型3,Fields还可以组合,有12个不同Fields,就有12×12种Fields间的组合,如果每个组合给一个W,这就能更加细化地描述特征组合。

    所以这里可以有三种不同的W定义。此外还可以有一个变化点,即可以加入Layer Norm,我们试过,加入Layer Norm影响比较大。

    在两个工业级数据集Criteo和Avazu上进行实验,数据量约在四千到四千五百万的CTR数据。

    双线性FFM模型:效果对比

    双线性FFM的AUC达到了0.7995,Fields组合效果是最好的,接近于FFM,但稍微低一点。还有个变化点,可以加入Layer Norm,同样加到了那三个模型里面去,最好的效果达到了0.8035,已经超过FFM,而且效果比较显著。

    结论:双线性FFM的推荐效果是可以达到与FFM相当,或者说超过FFM的性能的,而且Layer Norm对这个事情有明显的提升作用。

    双线性FFM模型:新增参数量对比

    我们来估算一下,改进的双线性FFM模型,它的参数量跟FFM比是什么情况?如果说我们用Criteo这个4500万的数据集,它有230万个特征,39个Fields,假设embedding size是10,如果用FFM就会有8.97亿的参数量,而用双线性FFM,FM部分是大概2300万的参数,刚才三个改进模型中,类型一100个参数,类型二3900个参数,类型三15万参数,与FFM相比,参数差了38倍,但性能两者是相当的,这就是这个模型的价值所在。

    双线性FFM模型:总结

    1. 性能优于或者接近于FFM模型
    2. 参数量是FFM模型的2.6%

    总结一下双线性FFM模型:它的性能接近于FFM,但是参数量是FFM模型的2.6%,这是它的优点所在。

     

    https://tech.meituan.com/2016/03/03/deep-understanding-of-ffm-principles-and-practices.html

    https://www.hrwhisper.me/machine-learning-fm-ffm-deepfm-deepffm/

    https://mp.weixin.qq.com/s/avof0o9nGNqy6eyOgikEgw

     

    美团ffm

    场感知因子分解机原理

    通过观察因子分解机模型我们可以发现,这虽然对特征的计算进行了非常大的简化,但在实际预测中,特征间往往有巨大的差异,因子分解机任意两组特征交叉的隐向虽都是相关的,这实际_!二限制了模型的复杂度。可是如果任意一对特征组合都是完全独立的,这与之前提到的通过支持向量机核函数来计算特征交叉类似,它们有着极高的复杂性和自由度,模型计算十分复杂,效果也不明显,
    实际上,可以通过引人特征组(场)的概念来优化这个问题。阮毓钦及其比赛队员借鉴了Michael Jahrer的论文中的场概念,提出了基于因子分解机的优化模型。场感知因子分解机把相同性质的特征归于同一个场,按照场级别分别计算当前特征与其他场里特征组合时的特征向量。

    在场感知因子分解机中,何一维特征xix} ,针对其他特征的每一种场fi寿组合,都会学习一个隐向量}i}f jvl}fi·它按照特征的含义将规则分为多个场,每个特征属于某个特定的场·每个特征将映射出多个隐向量,每个隐向量对应一个场。当两个特征组合时,它们分别用这两个特征对应的场的隐向量做内积,因此场感知因子分解机的模型方程为:

    其中,}J,f‘是翔个特征所属的场。如果隐向量长度为k,那么场感知因子分解机的二次参数有nfk个,远多于因子分解机模型的nk个。由于场感知因子分解机引人了场的概念,每两组特征交叉的隐向量都是独立的,可以取得更好的组合效果,这也使得场感知因子分解机的无法像因子分解机}}S样通过优化把计算复杂度变成线性时间复杂度,因此场感知因子分解机对每个样本预测的时间复杂度为0(knz),但场感知因子分解机的k值通常远小于因子分解机的lc值。在因子分解机模型中,每一维特征的隐向量只有一个,因子分解机可以看作场感知因子分解机的特例,是把所有特征都归属到一个场时的场感知因子分解机模型。LibFFM在具体实现的时候选取的是AdaGrad的随机梯度下降算法,因此使用随机梯度下降法对场感知因子分解机的求解算法如下。

     

     

    场感知因子分解机可以自动做特征组合和处理高维稀疏特,因而它在处理大量离散特征的问题上往往有比较好的效果。使用场感知因子分解机时要注意对连续特征归一化或离散化    

    下面我们介绍一下因子分解机、场感知因子分解机与其他模型的对比关系。

    • 因子分解机与场感知因子分解机。场感知因子分解机对因子分解机模型引人场的概念,增加了模型的复杂度和模型的表达能力可以将因子分解机理解为场感知因子分解机的特殊简化模式,即所有的特征都属于同一个场。
    • 因子分解机与神经网络。神经网络难以直接处理高维稀疏的离散特征,因为这导致神经元的连接参数太多。而因子分解机可以看作对高维稀疏的离散特征做嵌人(Embedding ),上而举的例子也可以看作将每个用户和每个广告嵌人到低维连续的嵌入空间中,然后在这个嵌入空间中比较用户和广告的相似性来学习到用户对广告的偏好

    因子分解机和梯度提升树。因子分解机与梯度提升树都可以做特征组合,Facebook就基于梯度提升树学习过特征的组合,梯度提升树可以方便对特征做高阶组合当数据不是高度稀疏时,梯度提升树可以有效地学习到比较复杂的特征组合;但是在高度稀疏的数据中,特征二阶组合的数量就足以让绝大多数模式找不到样本,因而梯度提升树无法学习到这种高阶组合

    因子分解机与其他模型。因子分解机是一种比较灵活的模型,通过合适的特征变换方式, 因子分解机可以模拟二阶多项式核的支持向量机模型、MF模型、S V D++模型等。但SVD++与MF在特征的扩展性上都不如因子分解机,而支持向量机核函数计算复杂度较高。
     

     

    展开全文
  • CTR预估评价指标介绍

    2019-10-30 19:59:11
    1.1 Logloss 1.1.1 基本原理 Logloss即对数损失, 也称为对数似然损失(Log-likelihood ...CTR预估是一个二分类问题,只有两类 {0, 1}, 则Logloss公式为  其中, yi为输入实例 xi的真实类别, pi为预测输入实例 xi属于...

    1.1 Logloss

    1.1.1 基本原理

    • Logloss即对数损失, 也称为对数似然损失(Log-likelihood Loss),或交叉熵损失(cross-entropy Loss), 是在概率估计上定义的.可用于评估分类器的概率输出.
    • CTR预估是一个二分类问题,只有两类 {0, 1}, 则Logloss公式为
      在这里插入图片描述
        其中, yi为输入实例 xi的真实类别, pi为预测输入实例 xi属于类别 1 的概率.
    • 对于完全正确的分类(预测概率为1),Logloss为0
    • 对所有样本的Logloss表示对每个样本的Logloss的平均值, 对于完美的分类器, 对数损失为 0 .
    • 注意控制范围,避免因为0或1带来的log溢出问题

    1.1.2 可视化

    • Logloss通过惩罚错误的分类,实现对分类器的准确度(Accuracy)的量化. 最小化Logloss基本等价于最大化分类器的准确度.
    • 为了计算Logloss, 分类器必须提供对输入的所属的每个类别的概率值, 不只是最可能的类别.
    • 下图展示了lable=1时Logloss值的范围 当预测概率接近1时,Logloss缓慢下降。但随着预测概率的降低,Logloss迅速增加 Logloss对两种类型的错误都会进行处罚,尤其是那些置信度很高的错误预测!在这里插入图片描述

    1.2 AUC

    1.2.1 二分类的常用评价指标

    CTR预估是一个二分类问题。二分类问题的评价指标有FP rate,TP rate,准确率accuracy,精确率precision,召回率recall,分别定义如下:
    在这里插入图片描述
    在这里插入图片描述

    • precision表示的是预测为阳性的样本中有多少是预测对的,recall表示有多少阳性样本被预测了出来,这二者通常是此消彼长,需要根据具体场合看用哪个指标。

    • accuracy表示预测准确的占所有的样本的比例。

    1.2.2 ROC曲线

    • ROC曲线以FPR(False Positive Rate)为横坐标,以TPR(True Positive Rate)为纵坐标对于二分类器,可以通过ROC曲线评判优劣。若FPR越小,TPR越大,则说明分类器性能越好,即曲线越逼近左上角,越好。
    • 最理想状态就是(0,1)点,最差情况是(1,0)点。
        在这里插入图片描述
    • 由于预测值是一个评分,还要通过选定一个阈值来将它划分成1还是0。预测值大于阈值的样本为正样本,预测值小于阈值的样本为负样本,从而得到一对(FPR,TPR)值,此(FPR,TPR)就可以看做ROC图上的一点。
    • 不难推测到,只要我们设置一系列不同阈值,就可以得到一系列(FPR,TPR)点,从而画出最终ROC曲线。例如下面示例:
      在这里插入图片描述

    1.2.3 ROC曲线特性

    • 当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。
    • 在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化,ROC曲线基本保持原貌。
      在这里插入图片描述
      上图中,{a,b}图代表原始数据集正负样本平衡时{c,d}代表测试集中负样本的数量增加到原来的10倍后,分类器的结果。易发现ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大

    1.2.4 AUC

    • AUC(Area Under Curve)被定义为ROC曲线下的面积, 显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。
      在这里插入图片描述
    • 数学上可以证明,AUC值等于一个概率,即在前面已经排序的样本列表中,随机选取一个正样本,再随机选取一个负样本,正样本排在负样本之前的概率。AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。
    • AUC表征了正样本排在负样本前面的能力,并且与阈值选取无关,而与模型本身有关。

    1.3 参考文献

    展开全文
  • 计算广告CTR预估系列(五)–阿里Deep Interest Network理论 计算广告CTR预估系列(五)–阿里Deep Interest Network理论 1. 背景 1.1 名词解释 1.2 相关工作 2. 系统总览 2.1 训练数据 2.2 特征处理 2.3 评价指标 ...

    计算广告CTR预估系列(五)–阿里Deep Interest Network理论

    1. 背景

    Deep Interest Network(DIN)是盖坤大神领导的阿里妈妈的精准定向检索及基础算法团队,在2017年6月提出的。
    它针对电子商务领域(e-commerce industry)的CTR预估,重点在于充分利用/挖掘用户历史行为数据中的信息

    先给出结论:
    针对互联网电子商务领域,数据特点:Diversity、Local Activation。DIN给出了解决方案:

    1. 使用用户兴趣分布来表示用户多种多样的兴趣爱好
    2. 使用Attention机制来实现Local Activation
    3. 针对模型训练,提出了Dice激活函数,自适应正则,显著提升了模型性能与收敛速度

    1.1 名词解释

    这两个词在论文中通篇出现,先把其表示的意思说清楚。

    Diversity:
    用户在访问电商网站时会对多种商品都感兴趣。也就是用户的兴趣非常的广泛。

    Local Activation:
    用户是否会点击推荐给他的商品,仅仅取决于历史行为数据中的一小部分,而不是全部。

    不明白?举个例子:

    Diversity:一个年轻的母亲,从他的历史行为中,我们可以看到她的兴趣非常广泛:羊毛衫、手提袋、耳环、童装、运动装等等。
    Local Activation:一个爱游泳的人,他之前购买过travel book、ice cream、potato chips、swimming cap。当前给他推荐的商品(或者说是广告Ad)是goggle(护目镜)。那么他是否会点击这次广告,跟他之前是否购买过薯片、书籍、冰激凌一丁点关系也没有!而是与他之前购买过游泳帽有关系。也就是说在这一次CTR预估中,部分历史数据(swimming cap)起了决定作用,而其他的基本都没啥用。

    1.2 相关工作

    CTR预估是一个比较窄的研究领域,但是模型性能一点点的提升,在实际应用中都非常关键,真金白银毫不含糊。随着深度学习在CV、NLP等领域取得突破性进展,一些研究也开始尝试将DNN应用于CTR预估,比如:Wide&Deep, DeepFM等。

    这些做法一般分为两部分:
    1. 在输入上面加一层embeding层,把最原始高维度、稀疏的数据转换为低维度的实值表示上(dense vector)。
    2. 增加多个全连接层,学习特征之间的非线性关系。
    Sparse Features -> Embedding Vector -> MLPs -> Output

    这些方法的优点在于:相比于原来的Logistic Regression方法,大大减少了人工特征工程的工作量。

    缺点:在电子商务领域中,用户的历史行为数据(User Behavior Data)中包含大量的用户兴趣信息,之前的研究并没有针对Behavior data**特殊的结构(Diversity + Local Activation)**进行建模。

    这就是DIN要改进的地方! DIN同时对Diversity和Local Activation进行建模。

    针对Diversity:
    针对用户广泛的兴趣,DIN用an interest distribution去表示。

    针对Local Activation:
    DIN借鉴机器翻译中的Attention机制,设计了一种attention-like network structure, 针对当前候选Ad,去局部的激活(Local Activate)相关的历史兴趣信息。和当前候选Ad相关性越高的历史行为,会获得更高的attention score,从而会主导这一次预测。

    当DNN深度比较深(参数非常多),输入又非常稀疏的时候,很容易过拟合。DIN提出Adaptive regularizaion来防止过拟合,效果显著。

    论文还提出,DIN方法也可以应用于其他有丰富用户行为数据的场景,比如:

    • 电子商务中的个性化推荐
    • 社交网络中的信息推流排序(feeds ranking)

    2. 系统总览


    阿里推荐系统工作流程就像上图所示:

    1. 检查用户历史行为数据
    2. 使用matching module产生候选ads
    3. 通过ranking module得到候选ads的点击概率,并根据概率排序得到推荐列表
    4. 记录下用户在当前展示广告下的反应(点击与否)

    这是一个闭环的系统,对于用户行为数据(User Behavior Data),系统自己生产并消费。

    2.1 训练数据

    前面提到,电子商务领域,充分利用User Behavior Data非常关键,而它又有着非常显著的特点:

    • Diversity. 兴趣爱好非常广泛
    • Local Activation. 历史行为中部分数据主导是否会点击候选广告

    还有的特点,就是CTR中输入普遍存在的特点:

    • 高纬度
    • 非常稀疏

    CTR中一旦涉及到用户行为数据,还有一个特点:

    • 特征往往都是multi-hot的稀疏ids。

    也就是:多值离散特征。比如:用户在YouTube上看的视频和搜索过的视频。无论是看过的还是搜索过的,都不止一个,但是相对于所有的视频来说,看过和搜索过的数量都太小了(非常稀疏)。
    在电子商务上的例子就是:用户购买过的good_id有多个,购买过的shop_id也有多个,而这也直接导致了每个用户的历史行为id长度是不同的。

    为了得到一个固定长度的Embedding Vector表示,原来的做法是在Embedding Layer后面增加一个Pooling Layer。Pooling可以用sum或average。最终得到一个固定长度的Embedding Vector,是用户兴趣的一个抽象表示,常被称作User Representation。缺点是会损失一些信息。

    DIN使用Attention机制来解决这个问题。Attention机制来源于Neural Machine Translation(NMT)。DIN使用Attention机制去更好的建模局部激活。在DIN场景中,针对不同的候选广告需要自适应地调整User Representation。也就是说:在Embedding Layer -> Pooling Layer得到用户兴趣表示的时候,赋予不同的历史行为不同的权重,实现局部激活。从最终反向训练的角度来看,就是根据当前的候选广告,来反向的激活用户历史的兴趣爱好,赋予不同历史行为不同的权重。

    2.2 特征处理

    参考论文Learning piece-wise linear models from large scale data for ad click predictioncommon feature trick,目的是降低空间开销和计算开销。大体的思想是:同一个用户多条样本,它们之间很多信息重复,比如用户统计信息,昨天之前的统计信息等。针对这些重复信息只存储一次,并建立索引。

    另外,论文中作者把特征分为四大类,并没有进行特征组合/交叉特征。而是通过DNN去学习特征间的交互信息。特征如下:

    可以看到特征主要包括:用户特征、用户行为特征、广告特征、上下文特征。
    其中,只有用户行为特征中会出现multi-hot,原因就是一个用户会购买多个good_id,也会访问多个shop_id,另一个表现就是这样导致了每个用户的样本长度都是不同的。还记得我们是怎么解决这个问题的吗?

    Embedding -> Pooling + Attention

    聪明如你,一定答对了吧~

    2.3 评价指标

    评价标准是阿里自己提出的GAUC。并且实践证明了GAUC相比于AUC更加稳定、可靠。

    AUC表示正样本得分比负样本得分高的概率。在CTR实际应用场景中,CTR预测常被用于对每个用户候选广告的排序。但是不同用户之间存在差异:有些用户天生就是点击率高。以往的评价指标对样本不区分用户地进行AUC的计算。论文采用的GAUC实现了用户级别的AUC计算,在单个用户AUC的基础上,按照点击次数或展示次数进行加权平均,消除了用户偏差对模型的影响,更准确的描述了模型的表现效果:

    其中权重w既可以是展示次数(impression)也可以是点击次数(clicks)。n是用户数量。

    3. 原理

    用户访问阿里巴巴的电商网站,看到推荐的广告时,大部分人都是没有一个明确的目标的,他自己也不知道要买什么。所以,用一个高效的方法从用户丰富的历史行为数据中获取用户的兴趣信息并进行推荐,就非常关键了。

    3.1 Base Model


    如上图所示,Base Model主要由两部分组成:

    1. 把稀疏的输入(id特征)转换成embedding vector
    2. 增加MLPs得到最终的输出

    对于一个用户,之前购买过的good_ids组成了一个user behavior sequence ids。针对不同的用户,这个序列的长度是不同的(不同用户购买的物品数量不同). 所以在Embedding Layer和MLPs中间,增加了一个Pooling Layer,使用的是sum operation,把这些goods或shops的embedding vector相加,得到一个固定长度的向量作为MLPs的输入。

    这里对multi-hot多值离散特征进行Pooling操作,就是对Diversity的建模。Base Model中还没有引入Attention机制。

    Base Model上线后表现很好,现在也在承担着阿里线上广告展示系统的大部分流量。(论文发表时)

    3.2 DIN Design

    但是,仔细的研究下Base Model中Pooling Layer就会发现,Pooling操作损失了很多信息,所以有了后面DIN的完整模型。

    这个图太重要了,一定要仔细研究:

    先给出结论:

    1. Activation Unit实现Attention机制,对Local Activation建模
    2. Pooling(weighted sum)对Diversity建模

    我们模型的目标:基于用户历史行为,充分挖掘用户兴趣和候选广告之间的关系。用户是否点击某个广告往往是基于他之前的部分兴趣,这是应用Attention机制的基础。Attention机制简单的理解就是对于不同的特征有不同的权重,这样某些特征就会主导这一次的预测,就好像模型对某些特征pay attention。但是,DIN中并不能直接用attention机制。因为对于不同的候选广告,用户兴趣表示(embedding vector)应该是不同的。也就是说用户针对不同的广告表现出不同的兴趣表示,即时历史兴趣行为相同,但是各个行为的权重不同。这不就是Local Activation的含义吗?

    这该怎么理解那?下面我们给出两种解释,从两个角度来解释:

    1.核心是: 到Embedding后的空间中思考。

    无论是用户兴趣行为,还是候选广告都会被映射到Embedding空间中。他们两者的关系,是在Embedding空间中学习的。

    现在有用户U和两个候选广告 A,B。在Embedding空间中,U和A,U和B的相关性都比较高。假设我们使用内积来计算用户和广告之间的相关性。广告A和B嵌入后的向量分别为Va, Vb,那么就要求对于Va Vb终点连线上的任何一个广告,用户U都要有很高的相关性。
    这样的限制使得模型非常难学习到有效的用户和广告的embedidng表示。当然,如果增大embedding的大小,也许能行。但是会极大的增加模型参数数量。

    2.用户的兴趣分布是一个多峰的函数,随着候选广告的变化而变化,表现出局部激活的特性

    用户Embedding Vector的维度为k,它最多表示k个相互独立的兴趣爱好。但是用户的兴趣爱好远远不止k个,怎么办?DIN给出的方案是:用户兴趣不再是一个点,而是一个一个分布,一个多峰的函数。这样即使在低维空间,也可以获得几乎无限强的表达能力。

    用户的兴趣不是一个点,而是一个多峰的函数。一个峰就表示一个兴趣,峰值的大小表示兴趣强度。那么针对不同的候选广告,用户的兴趣强度是不同的,也就是说随着候选广告的变化,用户的兴趣强度不断在变化。
    换句话说:假定用户兴趣表示的Embedding Vector是Vu,候选广告的是Va,那么Vu是Va的函数。 也就是说,同意用户针对不同的广告有不同的用户兴趣表示(嵌入向量不同)。

    公式如下:

    其中,Vi表示behavior id i的嵌入向量,比如good_id,shop_id等。Vu是所有behavior ids的加权和,表示的是用户兴趣。候选广告影响着每个behavior id的权重,也就是Local Activation。权重表示的是:每一个behavior id针对当前的候选广告Va,对总的用户兴趣表示的Embedding Vector的贡献大小。在实际实现中,权重用激活函数Dice的输出来表示,输入是Vi和Va。

    3.3 Dice: Data Dependent Activation Function

    PReLU其实是ReLU的改良版,ReLU可以看作是x*Max(x,0),相当于输出x经过了一个在0点的阶跃整流器。由于ReLU在x小于0的时候,梯度为0,可能导致网络停止更新,PReLU对整流器的左半部分形式进行了修改,使得x小于0时输出不为0。
    研究表明,PReLU能提高准确率但是也稍微增加了过拟合的风险。PReLU形式如下:

    无论是ReLU还是PReLU突变点都在0,论文里认为,对于所有输入不应该都选择0点为突变点而是应该依赖于数据的。于是提出了一种data dependent的方法:Dice激活函数。形式如下:

    可以看出,pi是一个概率值,这个概率值决定着输出是取yi或者是alpha_i * yi,pi也起到了一个整流器的作用。
    pi的计算分为两步:

    1. 首先,对x进行均值归一化处理,这使得整流点是在数据的均值处,实现了data dependent的想法;
    2. 其次,经过一个sigmoid函数的计算,得到了一个0到1的概率值。巧合的是最近google提出的Swish函数形式为x*sigmoid(x) 在多个实验上证明了比ReLU函数x*Max(x,0)表现更优。

    另外,期望和方差使用每次训练的mini batch data直接计算,并类似于Momentum使用了指数加权平均

    alpha是一个超参数,推荐值为0.99

    3.4 Adaptive Regularization

    由于深度模型比较复杂,输入又非常稀疏,导致参数非常多,不出意外的过拟合了。

    CTR中输入稀疏而且维度高,已有的L1 L2 Dropout防止过拟合的办法,论文中尝试后效果都不是很好。用户数据符合 长尾定律long-tail law,也就是说很多的feature id只出现了几次,而一小部分feature id出现很多次。这在训练过程中增加了很多噪声,并且加重了过拟合。

    对于这个问题一个简单的处理办法就是:人工的去掉出现次数比较少的feature id。缺点是:损失的信息不好评估;阈值的设定非常的粗糙。

    DIN给出的解决方案是:

    1. 针对feature id出现的频率,来自适应的调整他们正则化的强度;
    2. 对于出现频率高的,给与较小的正则化强度;
    3. 对于出现频率低的,给予较大的正则化强度。



    B是mini batch样本,大小为b;ni是出现频率;Ii表示我们考虑特征非零的样本。

    这样做的原因是,作者实践发现出现频率高的物品无论是在模型评估还是线上收入中都有较大影响。

    我个人的感觉是:
    这仅仅是由于出现频率高的商品更符合大众的兴趣,而现有的模型还不能实现真正的千人千面推荐,所以使得热度高的商品重要性依旧非常大,不这样做的话模型性能就下降。
    这就好比最简单的推荐系统:给所有人都推荐最热的商品。当技术还不够成熟,模型效果没那么好的时候,我们增加对热点商品的权重(极端就是给所有人都推荐热点商品),从最终的指标来看多半能提升模型效果,毕竟这符合大多数人兴趣爱好。但是这并不是我们想要的千人千面的推荐。

    4. 实现

    DIN在阿里内部的实现,使用了多个GPU。并行化是基于模型并行化、数据并行化。命名为X-Deep Learning(XDL)

    4.1 组成部分

    由三部分组成:

    1. Distributed Embedding Layer。模型并行化部分,Embedding Layer的参数分布在多个GPU上,完成前向后向传播计算。
    2. Local Backend。单独的模块,用来在处理网络的训练。使用了开源的deep learning框架,比如tf,mxnet,theano等。作为一个后端支撑,良好的接口封装方便集成或切换各个开源框架。
    3. Communication Component。基础模块,用来帮助embedding layer和backend来实现并行化。使用MPI实现。

    4.2 架构图

    分为模型并行化、数据并行化

    4.3 Common Feature Trick

    对于一个用户,一次pageview中假设展示了200个商品。那么每个商品就对应一条样本。但是,这200条样本中是有很多Common Feature的。所以DIN的实现中并没有把用户都展开,类似于下图:

    对于很多静态的不变的特征,比如性别、年龄、昨天以前的行为等只计算一次、存储一次。之后利用索引与其他特征关联,大幅度的压缩了样本的存储,加快了模型的训练。最终实验仅用了1/3的资源,获得了12倍的加速。

    4.4 结果展示

    下图展示了用户兴趣分布:颜色越暖表示用户兴趣越高,可以看到用户的兴趣分布有多个峰。

    利用候选的广告,反向激活历史兴趣。不同的历史兴趣爱好对于当前候选广告的权重不同,做到了local activation,如下图:

    5. 总结

    1. 用户有多个兴趣爱好,访问了多个good_id,shop_id。为了降低纬度并使得商品店铺间的算术运算有意义,我们先对其进行Embedding嵌入。那么我们如何对用户多种多样的兴趣建模那?使用Pooling对Embedding Vector求和或者求平均。同时这也解决了不同用户输入长度不同的问题,得到了一个固定长度的向量。这个向量就是用户表示,是用户兴趣的代表。
    2. 但是,直接求sum或average损失了很多信息。所以稍加改进,针对不同的behavior id赋予不同的权重,这个权重是由当前behavior id和候选广告共同决定的。这就是Attention机制,实现了Local Activation。
    3. DIN使用activation unit来捕获local activation的特征,使用weighted sum pooling来捕获diversity结构。
    4. 在模型学习优化上,DIN提出了Dice激活函数自适应正则 ,显著的提升了模型性能与收敛速度。

    6. Reference

    1. Deep Interest Network for Click-Through Rate Prediction
    2. Learning piece-wise linear models from large scale data for ad click prediction
    3. https://www.leiphone.com/news/201707/t0AT4sIgyWS2QWVU.html
    4. https://www.leiphone.com/news/201706/pDfOAoMYp8mqNKEC.html
    5. 盖坤的分享视频 http://www.itdks.com/dakalive/detail/3166

    计算广告CTR预估系列往期回顾

    计算广告CTR预估系列(一)–DeepFM理论
    计算广告CTR预估系列(二)–DeepFM实践
    计算广告CTR预估系列(三)–FFM理论与实践
    计算广告CTR预估系列(四)–Wide&Deep理论与实践


    获取更多机器学习干货、荐货,欢迎关注机器学习荐货情报局,加入荐货大家庭!
    公众号

    展开全文
  • CTR预估的几种方式

    千次阅读 2018-08-13 02:59:40
    CTR预估的几种方式 2017年12月11日 20:46:55 阅读数:2617 1.CTR预估 CTR预估是计算广告中最核心的算法之一,那么CTR预估是指什么呢?简单来说,CTR预估是对每次广告的点击情况做出预测,预测用户是点击还是不...

    CTR预估的几种方式

    2017年12月11日 20:46:55

    阅读数:2617

    1.CTR预估

    CTR预估是计算广告中最核心的算法之一,那么CTR预估是指什么呢?简单来说,CTR预估是对每次广告的点击情况做出预测,预测用户是点击还是不点击。具体定义可以参考 CTR. CTR预估和很多因素相关,比如历史点击率、广告位置、时间、用户等。CTR预估模型就是综合考虑各种因素、特征,在大量历史数据上训练得到的模型。CTR预估的训练样本一般从历史log、离线特征库获得。样本标签相对容易,用户点击标记为1,没有点击标记为0. 特征则会考虑很多,例如用户的人口学特征、广告自身特征、广告展示特征等。这些特征中会用到很多类别特征,例如用户所属职业、广告展示的IP地址等。一般对于类别特征会采样One-Hot编码,例如职业有三种:学生、白领、工人,那么会会用一个长度为3的向量分别表示他们:[1, 0, 0]、[0, 1, 0]、[0, 0, 1]. 可以这样会使得特征维度扩展很大,同时特征会非常稀疏。目前很多公司的广告特征库都是上亿级别的。

    2.DNN

    深度神经网络(DNN)近年来在图像、语音、自然语言等领域大放异彩,特别是在图像分类、语音识别、机器翻译方面DNN已经超过人,精度已经达到商业应用程度。不过,DNN在CTR预估这种场景的应用却仍在摸索中。图像、语言、自然语言领域的数据一般是连续的,局部之间存在某些结构。比如,图像的局部与其周围存在着紧密的联系;语音和文字的前后存在强相关性。但是CTR预估的数据如前面介绍,是非常离散的,特征前后之间的关系很多是我们排列的结果,并非本身是相互联系的。

    3.Embeding

    Neural Network是典型的连续值模型,而CTR预估的输入更多时候是离散特征,因此一个自然的想法就是如何将将离散特征转换为连续特征。如果你对词向量模型熟悉的话,可以发现之间的共通点。在自然语言处理(NLP)中,为了将自然语言交给机器学习中的算法来处理,通常需要首先将语言数学化,词向量就是用来将语言中的词进行数学化的一种方式。

    一种最简单的词向量方式是one-hot,但这么做不能很好的刻画词之间的关系(例如相似性),另外数据规模会非常大,带来维度灾难。因此Embeding的方法被提出,基本思路是将词都映射成一个固定长度的向量(向量大小远小于one-hot编码向量大些),向量中元素不再是只有一位是1,而是每一位都有值。将所有词向量放在一起就是一个词向量空间,这样就可以表达词之间的关系,同时达到降维的效果。

    既然Embeding可以将离散的词表达成连续值的词向量,那么对于CTR中的类别特征也可以使用Embeding得到连续值向量,再和其他连续值特征构成NN的输入。下图就是这种思路的表达。 
    这里写图片描述 
    因此问题的关键就是采用何种Embeding技术将离线特征转换到离线空间。

    3.1 FM Embeding  

    Factorization Machine是近年来在推荐、CTR预估中常用的一种算法,该算法在LR的基础上考虑交叉项,如下面公式所示: 
    这里写图片描述 
    FM在后半部分的交叉项中为每个特征都分配一个特征向量V,这其实可以看作是一种Embeding的方法。Dr.Zhang在文献[1]中提出一种利用FM得到特征的embeding向量并将其组合成dense real层作为DNN的输入的模型,FNN。FNN模型的具体设计如下: 
    这里写图片描述
    Dr.Zhang在模型中做了一个假设,就是每个category field只有一个值为1,也就是每个field是个one-hot表达向量。field是指特征的种类,例如将特征occupation one-hot之后是三维向量,但这个向量都属于一个field,就是occupation。这样虽然离散化后的特征有几亿,但是category field一般是几十到几百。 模型得到每个特征的Embeding向量后,将特征归纳到其属于field,得到向量z,z的大小就是1+#fields * #embeding 。z是一个固定长度的向量之后再在上面加入多个隐藏层最终得到FNN模型。

    Dr.Zhang在FNN模型的基础上又提出了下面的新模型PNN. PNN和FNN的主要不同在于除了得到z向量,还增加了一个p向量,即Product向量。Product向量由每个category field的feature vector做inner product 或则 outer product 得到,作者认为这样做有助于特征交叉。另外PNN中Embeding层不再由FM生成,可以在整个网络中训练得到。 
    这里写图片描述

    3.2 NN Embeding 
    这里写图片描述
    Google团队最近提出Wide and Deep Model。在他们的模型中,Wide Models其实就是LR模型,输入原始的特征和一些交叉组合特征;Deep Models通过Embeding层将稀疏的特征转换为稠密的特征,再使用DNN。最后将两个模型Join得到整个大模型,他们认为模型具有memorization and generalization特性。 Wide and Deep Model中原始特征既可以是category,也可以是continue,这样更符合一般的场景。另外Embeding层是将每个category特征分别映射到embeding size的向量,如他们在TensorFlow代码中所示:

    deep_columns = [
      tf.contrib.layers.embedding_column(workclass, dimension=8),
      tf.contrib.layers.embedding_column(education, dimension=8),
      tf.contrib.layers.embedding_column(gender, dimension=8),
      tf.contrib.layers.embedding_column(relationship, dimension=8),
      tf.contrib.layers.embedding_column(native_country, dimension=8),
      tf.contrib.layers.embedding_column(occupation, dimension=8),
      age, education_num, capital_gain, capital_loss, hours_per_week]
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.结合图像

    目前很多在线广告都是图片形式的,文献[4]提出将图像也做为特征的输入。这样原始特征就分为两类,图像部分使用CNN,非图像部分使用NN处理。 其实这篇文章并没有太多新颖的方法,只能说多了一种特征。对于非图像特征,作者直接使用全连接神经网络,并没有使用Embeding。 
    这里写图片描述

    5.CNN

    CNN用于提取局部特征,在图像、NLP都取得不错的效果,如果在CTR预估中使用却是个难题。我认为最大的困难时如何构建对一个样本构建如图像那样的矩阵,能够具有局部联系和结构。如果不能构造这样的矩阵,使用CNN是没有什么意思的。 文献[5]是发表在CIKM2015的一篇短文,文章提出对使用CNN来进行CTR预估进行了尝试。 一条广告展示(single ad impression)包括:element = (user; query; ad, impression time, site category, device type, etc) 用户是否点击一个广告与用户的历史ad impression有关。这样,一个样本将会是(s, label) ,s由多条l组成(数目不定) 
    这里写图片描述 
    作者提出CCPM模型处理这样的数据。每个样本有n个element,对每个element使用embeding 得到定长为d的向量ei∈Rdei∈Rd,再构造成一个矩阵s∈Rd∗ns∈Rd∗n,得到s矩阵之后就可以套用CNN,后面的其实没有太多创新点。 
    这里写图片描述

    6.RNN

    考虑搜索场景下的CTR预估,如果考虑历史信息,如可以将一个用户的历史ad impression构成一个时间序列。RNN非常适合时间序列的场景,如语言建模等。这篇 发表在AAAI2014将RNN模型引入CTR预估。作者首先在数据集上验证了用户的点击行为与之前的ad impression历史有关联:

    如果用户在之前的impression很快离开广告页面,那么将会在接下来一段时间内不会点击类似的广告 
    如果用户最近有过与广告相关的查询,那么接下来点击相关广告的可能性会大幅提升 
    前面的两种行为还可能随着间隔时间的增加而不是那么相关 
    当前关联不止这些,而且人工难以刻画,需要模型来自动提取。RNN模型对此类问题非常适用,作者的主要工作是将数据集构造成适合RNN的输入(即对用户的历史ad impression根据时间排序),对模型本身并没有改进。 
    这里写图片描述
    参考文献

    1.Deep Learning over Multi-field Categorical Data – A Case Study on User Response Prediction 
    2.Product-based Neural Networks for User Response Prediction 
    3.Wide & Deep Learning for Recommender Systems 
    4.Deep CTR Prediction in Display Advertising 
    5.A Convolutional Click Prediction Model 
    6.http://www.52cs.org/?p=1046 
    7.http://techshow.ctrip.com/archives/1149.html 
    8.http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html 
    9.Sequential Click Prediction for Sponsored Search with Recurrent Neural Networks 
    转自:https://yxzf.github.io/2017/03/dnn-for-ctr/

    展开全文
  • CTR预估

    2018-07-30 17:07:35
    CTR CTR又称广告点击率,英文名(click through rate) Ref CTR预估基本知识
  • 推荐系统中使用ctr预估模型的发展

    千次阅读 2018-08-20 21:52:54
    一. 什么是ctr? ctr即广告点击率,在推荐系统中,通常是按照ctr来对召回的内容子集进行排序,然后再结合策略进行内容的...LR(logistics regression),是ctr预估模型的最基本的模型,也是工业界最喜爱使用的方...
  • CTR点击率预估干货分享

    万次阅读 2020-09-21 22:03:25
    1.排序指标。排序指标是最基本的指标,它决定了我们有没有能力把最合适的广告找出来去呈现给最合适的用户。这个是变现的基础,从技术上,我们用AUC来...如果我们对CTR普遍低估,我们出价会相对保守,从而使得预算花不
  •  esmm模型是阿里妈妈基础算法团队发表在SIGIR 18上的一篇论文,用来做转化率预估。  整篇论文非常简单,创新点也很通俗易懂,转化率预估目前主要存在两个难点:1、sample selection bias, conversion CVR model ...
  • CTR预估模型浅谈

    千次阅读 2016-09-20 16:49:00
    导言:一般是从离线数据中学习得到,离线数据是保存在Hive中的,通过机器学习算法将Hive中的数据进行分析,得到一个pCtr模型; 对于在线工程而言,实现一个通过配置把离线模型加载进去的在线部分,的确没什么工作...
  • CTR预估算法小结

    万次阅读 2020-09-21 22:04:04
    1.常用的CTR方法常用的ctr预测的算法包括LR(Logistic Regression), FM(Factorization Machines), GBDT等等。像LR和GBDT, Spark Mllib都提供了相应的实现,另外台湾大学的Liblinear也有一个Spark版本的LR算法的...
  • ctr预估的负采样比率修正公式

    千次阅读 2018-02-26 16:33:11
    p=c1p′−1+cp=c1p′−1+c p = \frac {c}{\frac 1 {p'} -1 +c} c∼(0,1]c∼(0,1]c \sim (0,1]: 负样本采样比例。如果正负样本都采样,...p′p′p':使用有采样的样本预估ctr ppp:修正ctr(理论真实值) 特...
  • 该文是百度文库课程《计算广告学之内容匹配广告&展示广告原理、技术和实践》的课程笔记...第三章主要包括三小节:CTR预估背景,CTR预估特点,CTR预估模型 CTR即广告点击率 第一节:CTR预估背景 在点击计费时,
  • CTR常用算法

    千次阅读 2018-07-25 10:56:59
    广告点击率预估常用算法
  • 机器学习之CTR预估评价指标

    千次阅读 2018-01-12 17:56:23
    一 离线、在线评价指标 1.1 LogLoss对数损失 ...熵的主要作用是告诉我们最优编码信息方案的理论下界(存储空间),以及度量数据的信息量的一种方式。理解了熵,我们就知道有多少信息蕴含在数据之中,现在我们就...
  • Kaggle滑水 - CTR预估(LR)

    千次阅读 2018-07-09 16:41:08
    下面,我们结合Kaggle赛题:Avazu:Click-Through Rate Prediction,练习数据挖掘技术在CTR预估中的应用。本文内容包括赛题任务简析,以及基于LR(逻辑斯蒂回归)的初步实现。本文的源码托管于我的Github:PnYuan - ...
  • 源地址:https://github.com/mJackie/RecSys...持续更新…… 推荐系统 推荐系统理论及实战系列博文-石晓文 推荐系统实践-项亮 亿级用户个性化品类推荐实战 ...互联网广告系统综述系列博文 ...GBDT算法原理与系统设计简...
  • 面试关于CTR预测

    千次阅读 2017-03-06 10:06:30
    于是,第二个问题随之而来,如何在短时间内给新广告做一个靠谱的CTR预估?能不能直接用短时间内的点击数据除以曝光数据得到CTR的预估呢?答案是不行。通常根据广告和媒体的不同,点击率CTR一般在0.1%到1%之间浮动,...
  • ctr预估中的评估指标及校准

    千次阅读 2019-10-10 00:53:51
    ctr预估中的评估指标及校准 背景 最近在实际的工作中发现离线指标与线上指标并非线性吻合关系,因此对离线指标的评估产生了一些思索,因此这里复盘一下ctr预估中的常用评估指标,并附上自己的思考。 为什么要做ctr...
  • 深度学习在CTR预估任务中的应用

    千次阅读 2018-08-21 11:52:55
    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/  张俊林  (本文是2017年底Archsummit全球架构师峰会演讲内...
  • CTR预估特征工程

    千次阅读 2016-08-29 15:34:15
    CTR预估的流程 模型和特征的关系 数据预处理 数据特征 数据特征处理方法 One Hot Encoding 离散化 等值离散 等量离散 特征组合特征工程项目数据格式CTR预估的流程数据—>预处理—>特征提取—>模型训练—>后处理模型...
1 2 3 4 5 ... 20
收藏数 5,111
精华内容 2,044
关键字:

ctr预估