转化率预估

[转化率预估-1]引言

最近几年,“计算广告学”的概念风生水起,让我们这些从事在线广告匹配技术的程序猿着实荣耀了一把。这在参加校园招聘时最有所体会,前几年学生经常问面试官的问题是“你们做网页搜索吗?”,这些年学生更经常问“你们做广告吗,你们做大数据挖掘吗?”。每当这个时候,我的心中就会油然而生满满的幸福感,还要装着没什么的样子回答“当然了”。

不过,这里我们不会聊“计算广告学”,因为这个概念已经被很多前辈讲的系统且详尽,如最早提出“Computational Advertising”的Andrei Broder和前Yahoo!高级科学家刘鹏。这里我们只会聊“计算广告学”中的一个子集——转化率预估(Conversion Modeling),我们选择它不是因为它简单而是因为它很难,这样才会聊的津津有味。

要理解转化率预估,先得理解互联网广告的商业模式,业内常见的商业模式有四种(图1):1) CPM,按展现付费;2)CPC,按点击付费;3)CPA,按转化付费;4)CPS,按销售分成。容易理解,广告主最欢迎CPA模式,因为这种模式的广告投放效率最高,广告主不必为无效的展现和点击买单。然而,业内做CPA的广告网络(Ad Network)并不多,主要原因是转化数据难以收集,腾讯的广告系统广点通有天然的优势:植根于电商平台和开放平台,我们可以获取到电商类广告和应用类广告的转化数据。以数据为基础,再结合大规模机器学习算法,我们就可以实现广告转化率的实时预估——这对于CPA模式的广告匹配是很重要的,因为它是广告排序和计费的基础。如图2所示,广告平台会按期望收益对广告进行排序,而广告的期望收益等于广告主出价(Bid)和广告预估转化率(pConversion,广告展现时发生转化行为的概率)的乘积:

图1

图1

图2

图2

也许读者要说了,计算pConversion很容易啊——统计每个广告的展现次数Impressions和转化次数Conversions,并令 pConversion=ConversionsImpressions 不就可以了?这种方法是把pConversion当做服从二项分布的变量,通过 ConversionsImpressions 计算pConversion的点估计。乍一看这种方法没什么问题,但仔细想想问题还真不少:

1)  不是每个广告都有展现的,比如对于新广告Impressions = 0;

2)  即便广告有展现,但当Impressions和Conversions不充分时,点估计就会有问题,比如Conversions = 1,Impressions = 1,我们显然不能轻易得到结论pConversion = 1。这就好比我们通过抽样去得到计算产品的废品率,不能因为只抽取了一个产品是废品,我们就说这批次产品的废品率是100%。从统计学上去理解,虽然 ConversionsImpressions 是pConversion的无偏估计,但当Impressions和Conversions不充分时,点估计的置信区间会很大,此时用 ConversionsImpressions 作为pConversion的估计值就有问题;

3)  引入一些平滑(Smoothing)技术能否解决2)中的问题呢?答案是肯定的,不过要知道,影响广告转化的因素很多,只考虑广告的展现和转化次数,而忽略其他特征的做法会影响预估的准确率。比如一个卖女装的广告,展现给男性和女性时的转化率是不同的,不能一概用 ConversionsImpressions 去做估计。

此时,就要祭出我们的法宝——大规模机器学习技术了。接下来的几章,我们会介绍:

第二章     逻辑回归技术

第三章     并行逻辑回归技术

第四章     特征选择

第五章     在线学习技术

第六章     深度学习


[转化率预估-2]逻辑回归技术

“我今年三十七岁。现在,我正坐在波音七四七的机舱里。这架硕大无比的飞机正穿过厚厚的乌云层往下俯冲,准备降落在汉堡机场。十一月冷冽的雨湮得大地一片雾蒙蒙的。”——这是村上春树小说《挪威的森林》的开篇。文艺青年坐飞机,看的想的都很文艺。作为屌丝码农,我有次坐飞机却在想:起飞降落的轨迹可以用什么数学方程来描述? 直观的感觉有点像逻辑回归(Logistic Regression,LR)(图1),Google了张图片(图2),两者还真挺神似的。虽然我知道这不是正解,但我猜正解肯定没有逻辑回归美丽。1                                                                          图1

2图2

据说逻辑回归和主题模型是Google内部用的最多的两个机器学习算法,只是它们都有另外一个鲜为人知的名字:SETI和Rephil。逻辑回归虽然简单但却好用,Google的很多产品中,如广告、反作弊、垃圾邮件识别都有它的影子。也许读者会质疑,逻辑回归只是一个线性分类器,会不会不够用。事实上,在很多场合下,逻辑回归的效果已经足够好了,尤其当在高维空间(Billion级特征)的分类问题中。

不错,我们转化率预估的方法也是逻辑回归。指导我们这样做的直接原因是,逻辑回归可以输出一个[0,1]之间的浮点数——这不正是概率的取值区间吗。而且,逻辑回归的输入自变量取值范围为实数域R——这给我们选择特征提供了很大的空间。还有,逻辑回归是连续可导的——这为最优化问题求解扫清了障碍。到了这个地步,想不用逻辑回归都难。

扫盲逻辑回归的最好办法是看看Andrew NG的机器学习公开课讲义:http://cs229.stanford.edu/notes/cs229-notes1.pdf。进阶的话,推荐Pattern Recognition and Machine Learning,不过它是本书。学术界也有很多的paper可以参考,这里推荐一篇:Scalable Training of L1-Regularized Log-linear Models,作者Galen Andrew和JianFeng Gao——倒不是因为这篇paper有多么的经典,而是因为我们的预估系统中也用到了它。

Paper中的方法简称Orthant-Wise Limited-memory Quasi-Newton(OWL-QN),创新在于用Orthant-Wise的方法解决了逻辑回归损失函数(Loss Function)在L1正则化非连续可导的问题。这个方法有以下优点:

  1. 这是一种Batch Learning的方法,可以收敛到全局最优解;
  2. 最优化方法为L-BFGS,收敛速度快;
  3. 损失函数中使用了L1正则化,避免过拟合的同时输出稀疏模型;

优点3,稀疏模型对于在线预估服务很重要,可以算一笔账:假设逻辑回归模型中有10亿个特征,每个特征的权重用4字节的float存储。L2正则化得到的模型可能会有4GB,而L1正则化得到的模型也许只有1GB,甚至400MB。这会省掉很多的存储开销。为什么L1正则化会得到稀疏模型呢,The Elements of Statistical Learning这本书的3.4.3中有很好的解释,这里我们给出一张示意图:

QQ截图20140820183759                                                                        图3

稀疏模型的另一个好处是特征选择,我们可以认为权重为0的特征是不相关的特征。我们曾经尝试用L1正则化选出的权重非0特征作为Deep Neural Network的输入,使得转化率预估的准确率显著提升,不过这些是后话。

遗憾的是,Scalable Training of L1-Regularized Log-linear Models附带的源码执行效率有些低,主要是计算训练数据的下降梯度时,有心的读者可以自己去看看。

有了模型,接下来需要有评估模型效果的方法——这其实是件很难的事。2012年,我们的团队承办了KDDCUP2012 Track2的题目(https://www.kddcup2012.org/c/kddcup2012-track2),让我们很纠结的一件事是如何评估参赛者递交的结果,最终我们选择了AUC(Area Under roc Curve,可参见paper “ROC graphs: Notes and practical considerations for researchers”)——其中很大程度上也是出于反作弊的考虑。事实上,评估模型效果的方法有很多,如:

1. AUC,从排序的角度评估模型预估效果;

2. MAE(Mean Absolute Error)/MSE(Mean Squared Error),从准确率的角度评估模型预估效果;

3. Loss,从拟合训练数据的角度评估模型预估效果;

在我们的工作中,除了上述的离线模型评估方法外,更看重的还是在线的A/B Test,即随机选取两部分线上同质流量,一部分用基准模型A预估转化率,一部分用实验模型B预估转化率。如果后者对在线业务指标(如转化率、点击率、千次展现收益等)有正向效果,我们就认为是好模型。这正所谓,是骡子是马拉出来溜溜。

使用OWL-QN思路解决计算广告中的转化率预估,这只是我们最初的选择。随着业务的发展,单机版的算法愈发无法满足我们的需求,于是我们开发了并行训练系统,数了数总计有5套,分别从不同的角度让训练的速度更快,让训练的效果更好,这些会在后续的章节中说到。现在我们的系统可以训练不计其数的Feature和不计其数的Instances,实际中前者的规模是亿级,后者的规模是千亿级。

读者也许会关心,说了半天逻辑回归模型,那它对转化率的提升到底有多大? 很抱歉由于涉及商业敏感数据,这里不方便公开,不过你可以加入我们,leostarzhou AT tencent Dot com :-)


[转化率预估-4]特征选择-简介

在机器学习中从原始信息中生成和选择特征被称为特征工程(Feature Egineering)或者特征抽取(Feature Extraction)。将事物分门别类一直是人类观察和认识世界的基本手段。机器学习作为帮助人类认知和预测事物的工具,分类和聚类也自然成为机器学习中最重要的方法。人对事物做分类主要依据事物之间共同的特点和差别,一样的,分类器要做出正确的分类也依赖能对事物做出联系和区分的描述信息,这些信息就是我们提供的特征。特征生成就是从各种角度和侧面来刻画事物,例如:通过用户搜索过的词和点击过的广告来描述一个用户,用跳转到一个页面之前的Referrer Query来表征这个网页等。互联网中海量的连接蕴含着信息和价值,尽可能利用各种连接发现信息构造特征也是互联网应用场景下数据挖掘的一大乐趣所在。

华盛顿大学教授Pedro Domingos在其文章《A Few Useful Things to Know about Machine Learning》中讲到使用什么特征是很多机器学习项目成败的关键因素,特征工程也是机器学习项目中最花时间的部分。俗话说巧妇难为无米之炊,有了一个不错的学习器后,为学习器提供好的样本和特征就变得至关重要。我们的团队在做广告转化率预估时,特征构造和选择也一直是我们提升线上效果的主要途径。下面将结合我们在广告系统效果优化上的经验谈下对特征选择的理解。

独立的讲特征选择是没有意义的,特征好与坏要看学习器是否能用得上,本文主要介绍的是服务于线性分类器的特征选择方法。本文记 X{x1,x2,,xn} 为特征向量, xiR Y={y1,y2,,yn} 为分类目标向量, yi{0,1}

一、为什么做特征选择

  1. 提升效果,让分类更准确和泛化效果更好。奥卡姆剃刀原理告诉我们“若无必要,勿增实体”。特征的增多会大大增加分类算法求解的搜索空间,大多数训练算法所需样本数量随着不相关特征数量的增加而显著增加。除了识别和去除出不相关的特征和冗余的特征外,一些特征添加后虽然能让模型更好的拟合训练数据,但因为复杂度的增加导致模型有更高的variance误差,过拟合的后果是在测试数据集上效果反而不好。
  2. 改善性能,节省存储和计算开销。在数据的处理和模型的训练过程中一般有很多参数(数据时间窗口长度,特征离散化方法,正则化系数等等)可以调节,让从数据产生到得到最终模型的时间更短,速度的提升意味着可以尝试更多的参数,更优的参数也会带来效果的改善。快速迭代是持续提升效果所需的关键能力之一。
  3. 更好的模型可解释性。在一些应用场景下,比起一个表现95分的黑盒模型我们可能更喜欢一个表现90分的白盒模型。可解释不仅让我们对模型效果的稳定性有更多的把握,一个可读懂的模型所提供的知识也能为我们的业务运营等工作提供指引和决策支持。以决策树为例,只有几个分支的一棵树肯定比一颗有几百个分支的树让人更容易分析和理解。

二、特征的处理

2.1 特征的分类

从特征的取值类型看可以分为下面几类:

  • 浮点数特征。像商品的价格。
  • 离散值特征。有些取值大小有比较意义,如用户的年龄,取值是正整数。另一些取值仅仅表示不同,如颜色,每个数字表示一种颜色。
  • 二值特征。例如,一个垃圾邮件过滤应用把邮件中是否有“领奖”这个词作为特征,出现则特征取值为1,没有则取值为0。

二值特征是我们使用最多的一类特征。离散值特征和浮点数特征都可以转化成二值特征,这种转化可以看成是对空间的变换和升维,让原本不是线性可分的空间通过变换后更容易找到超平面把不同类的点分开。

2.2 特征的预处理

  • 缺失值的处理。因为某些原因样本中的一些特征会缺失,例如我们不一定能判断出所有用户的性别和年龄等信息。针对缺失值常用的处理方法有:设置为均值、设置为众数、设置为Unknown等,或者这个样本不学习缺失特征的权重。
  • 异常值检测和处理。通过特征取值的分布情况可以比较容易识别出异常的取值,取分位点做上下限截断以及对特征值做分桶后做值平滑是简单易操作的异常值处理方法。
  • 比例缩放(Scaling)。直接使用浮点数特征,如果不同特征取值范围差异很大可能会造成严重的过拟合,所以需要把不同特征的取值都映射到相同的范围内。最常用的两种方法:1、min-max: xxminxmaxxmin xmin 是这个特征中的最小值, xmax 是这个特征中的最大值。2、z-score:  xμσ μ 是这个特征的均值, σ 是这个特征的方差。可以看出上面两种标准化方法都容易受极大或者极小的特征值影响。此外对特征属于power law分布的也可以取自然对数做比例缩放。
  • 离散化(Discretization)。有时对浮点数特征做离散化后能获得更好的效果,例如将用户的年龄映射到“少年,青年,中年,老年”几个区间。对于取值分布稳定的特征,我们可以画出特征的分布图通过人工尝试多种区间划分方式。在常见的离散化方法中,因为互联网数据中的特征(如商品价格)的取值分布很多符合Power Law,所以一般通过Equal-Frequency分桶的到的特征比用Equal-Interval分桶得到的特征有更好的区分性。此外还有基于信息熵和假设检验等方法。
  • 截断。一个网页可能属于多个分类(Category)或者多个主题(Topic),如果取值太多放入模型可能达不到预期的效果需要做截断。一般首先会对根据取值的权重(如属于某个分类的概率)排序,截断的方法有:1、简单的取权重最大的前N个;2、从权重最大的开始往下取,当累积的权重达到一定阀值停止;3、当前后两个取值的权重比值超过一定阀值时终止;4、前面三种方法组合使用;
  • 二值化(Binarization)。通过one hot encoding可以把有 N 个取值的离散特征变成 N 个二值特征。

2.3 特征和特征间的运算

  • 补集
  • 笛卡尔积
  • 交集
  • 减运算

通过上面的运算可以在单元子特征基础上得到更多的含义丰富特征。

更为复杂的可以使用多层sigmoid函数网络来加工原始特征。

三、特征选择的常用方法

3. 1 Filter

Filter这类方法是选定一个指标来评估特征,根据指标值来对特征排序,去掉达不到足够分数的特征。这类方法只考虑特征 X 和目标 Y 之间的关联,相对另两类特征选择方法Wrapper和Embedded计算开销最少。指标的选择对Filter方法至关重要,下面我们就看几种被大家通常使用的指标。

统计的视角:

  • 相关系数(Correlation)。统计课本里都讲过的皮尔森相关系数是最常用的方法。需要注意的是当样本数很少或者特征的取值范围更广时,更容易得出绝对值更大的皮尔森系数,所以样本量不同或者取值范围不同的特征的之间相关系数不一定可以做比较。另外皮尔森相关系数只能衡量线性相关性,随机变量 X Y 不相关并不意味二者独立。当相关系数为0时我们知道的是线性分类器不能单利用这个特征的目前的形态做到将不同的类分开,但通过特征本身的变换、和其它特征组合使用或者与其它特征结合出新的特征却可能让它焕发出生机发挥出价值。
  • 假设检验(Hypothesis Testing)。将特征 X 和目标 Y 之间独立作为H0假设,选择检验方法计算统计量,然后根据统计量确定 P 值做出统计推断。

信息论的视角:

  • 互信息(Mutual Information): MI(X,Y)=H(Y)+H(X)H(Y,X)=i,jP(yj,xi)log2P(yj,xi)P(yj)P(xi) ,函数 H() 表示信息(负熵),函数  P() 表示概率。
  • 信息增益(Information Gain): IG(Y,X)=H(Y)H(Y|X)
  • 最小描述长度(Minimum Description Length)。

3.2 Wrapper

Wrapper方法和Filter不同,它不单看特征 X 和目标 Y 直接的关联性,而是从添加这个特征后模型最终的表现来评估特征的好坏。Wrapper方法需要选定一种评估模型效果的指标,如Area Under the Curve (AUC)、Mean Absolute Error (MAE)、Mean Squared Error(MSE)。假设我们有 N 个特征,除去空集外这 N 个特征可以组成 2N1 个集合,最暴力的方法是分别用 2N1 个特征集合训练得到模型做评估,最后选择模型效果最好的集合。显而易见当 N 很大时穷举法计算开销惊人。所以前向特征选择(Forward Feature Selection)和后向特征选择(Backward Feature Selection)这样的贪心策略更为大家平常所用。前向特征选择从空集开始,每次在现有特征集合的基础上添加一个让模型效果最好的特征。相反,后向特征选择一开始包括所有的候选特征,每次去掉一个让模型指标提升最多的特征。

离线评估结果是重要的参考指标,但在实际应用中,往往最终还是通过线上A/B Test实验来判断一个特征的效果。在实际应用中离线评估不错的特征在线上表现不一定就好,线上线下评估的一致性和影响因素是另一个可以值得研究的问题。

3.3 Embedded

Filter方法和Wrapper方法都是和分类算法本身的实现无关,可以与各种算法结合使用。而Embedded特征选择方法与算法本身紧密结合,在模型训练过程中完成特征的选择。例如:决策树算法每次都优先选择分类能力最强的特征;逻辑回归算法的优化目标函数在log likelihood的基础上加上对权重的L1或者L2等罚项后也会让信号弱的特征权重很小甚至为0。

一些优化算法天然就适合在每步判断一个维度特征的好坏,所以可以在学习器在设计时就同时融合了特征选择功能,在训练过程中自动尝试构造特征和选择特征。

四、小结

Filter、Wrapper、Embedded三种方法各有不同,但没有孰好孰坏之分,在我们的实际工作中会结合使用。Filter作为简单快速的特征检验方法,可以指导特征的预处理和特征的初选。Embedded特征选择是我们学习器本身所具备的能力。通过Wrapper来离线和在线评估是否增加一个特征。

本文只对特征选择做了整体的概略介绍,后面将针对一些具体的点做展开讨论。

 

本文链接:[转化率预估-4]特征选择-简介
本站文章若无特别说明,皆为原创,转载请注明来源:火光摇曳,谢谢!^^


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值