学习GBDT+LR

来源:互联网 发布:chart.js柱状图的宽度 编辑:程序博客网 时间:2024/06/02 01:40

最近看了facebook的Practical Lessons from Predicting Clicks on Ads at Facebook的这篇文章

下面简单的介绍一下该算法:

1.GBDT+LR 模型

首先,该模型不算是新的模型了,在一些大公司的ctr的模型中已经使用了。


如图就是该论文中提出的组合模型GBDT+LR,可以将GBDT看做是对特征一种组合编码的过程,最后的LR才是最终的分类(回归)模型。

1)数据的灌入,一般特征会有连续的和离散的,树模型还是更适合处理一下连续的特征(网上可以查询)。

方案一:

将连续的数据和离散的数据分开输入到GBDT中,最终使用的叶子进行编码,然后约定离散值和连续值的位置。

这过程中可以考虑只对连续值使用GBDT进行编码,而离散的特征就使用原本的onehot编码,最终拼接起来。完成特征的编码


方案二:

可以对离散的特征也进行GBDT编码,之后组合起来(参考GBDT+FFM这个里面改进),对离散型的数据新进行统计,

对于出现频次高的特征进行保留,过滤掉稀疏的少的特征值,这样就可以使用GBDT学习编码。


GBDT+FFM中就是这样处理的,但是那些离散的非异常值,其实仍可以使用onehot的形式进行编码,在最后一层中使用。


使用GBDT的组合作用,但是树形的组合是重复的,其一个特征可以在树的不同层中出现参与构造组合,这个要比FM

和FFM的组合要更深一些。

其编码的结果含有上下文的一些属性。在进行数据的输入,不是固定的,可以使用不同的输入方式,上面只是列举了两种比较

常见的方法,使用树形来进行编码。


2. NE(Normalized Entropy)归一化熵

使用NE(归一化熵)进行评估,


其中 ,p是训练数据集的点击率,以此来消除不同训练集中的差异,这个公式就是在logloss损失

上添加了训练样本的影响,(在计算时应该注意y的范围是-1 和1 )

可以作为一种评价指标来使用,但是后来的论文中很少见有使用这种NE的。具体可以根据场景进行选使用。


3.Data freshness

使用新数据对模型进行更新,在实际的使用当中数据的分布是动态的,不是不变的,使用新数据来更新模型可以获得不错的

收益,文中指出GBDT树模型是每天更新,LR模型是实时更新的。以此来保持模型的准度。历史数据特征(统计型特征)对于

数据新鲜的变化不敏感,但是上下文特征就比较明显。这一点在很多机器学习模型中都会有实时或者近实时的更新模型,保证模型的能力。


4.Calibrate

这个校准不是所有都需要,一般我们在训练模型时,都会对样本进行采样,或是负采样等,这样会改变原来样本的数据分布,对于数据预测时的影响是很微弱的,但是对于像LR这种我们在得到预测的数据之后可能使用这个数据参与新的计算,就会出现偏差。为了解决这个偏差,就需要对模型的输出进行Calibrate(校准)。


其中p是模型预测出的正例的概率值,w是采样的比例w(是原始样本中正负的比例)一般是小数,来将模型的输出值校准到一个正常的数据。


小结:

GDBT+LR算是经典的CTR与预估模型,其使用了GBDT的非线性进行组合特征的学习,使用LR来学习特征的关联,最终预测出点击率。目前LR也仍是主流,只是输入的特征组合是使用其他的一些方式产出的,如FM,FFM,GBDT,DNN等。因此如何将原始的数据与这些模型结合得到最大的效果,仍需不断的去尝试,根据不同的场景去调节。

原创粉丝点击