作者 | gongyouliu
编辑 | gongyouliu
我们在上一篇文章中介绍了5种最基础的、基于规则策略的排序算法,那些算法是在没有足够的用户行为数据的情况下不得已才采用的方法,一旦我们有了足够多的行为数据,那么我们就可以采用更加客观、科学的机器学习排序算法了。
本章我们就来讲解3个最常用、最基础的基于机器学习的排序算法,分别是logistics回归、FM(分解机)和GBDT(Gradient Boosting Decision Tree)。这些算法原理简单、易于工程实现,并且曾经在推荐系统、广告、搜索等业务系统的排序中得到了大规模采用,是经过实践验证的、有业务价值的方法。
虽然随着深度学习等更现代化的排序算法的出现,这些比较古老的算法没有像之前那么被大家津津乐道了,但是他们在某些场景下还是会被采用的,在当前(甚至未来)不会退出历史舞台。熟悉这些算法对大家更好地理解排序的原理及对后面更复杂的排序算法的理解是大有裨益的,其实它们的一些思路对启发更高阶的算法是非常有帮助的,甚至它们就是某些更高阶算法的组成部分。
下面我们就开始分别介绍这3类算法。在介绍算法原理的同时,我们会简单提一下它们的推广与拓展及这些推广与拓展在大厂的应用,不过我们不会深度讲解,我会给出相关的论文,感兴趣的读者可以查看论文进一步学习。
12.1 logistics回归排序算法
logistics回归模型是最简单的线性模型,原理简单、工程实现容易,因此是最基础的排序模型。下面我们从算法原理、特点、工程实现、业界应用等4个方面来展开说明。
12.1.1 logistics回归的算法原理
logistic回归模型(LR)(见下面公式1,其中 是特征,
是模型的参数)是简单的线性模型,原理简单,易于理解,并且非常容易训练,对于一般的分类及预测问题,可以提供简单的解决方案。
公式1:logistics回归模型
为什么说logistics回归是线性模型呢?其实logistics回归是将线性模型做了一个logistics变化获得的。下面的logistics函数就是logistics变换,对比公式1和公式2,大家应该可以看到logistics回归模型就是将线性模型通过logistics变换获得的。
公式2:logistics变换(函数)
logistics函数是一个S曲线,得到的结果在0和1之间,x的值越大,s(x)越接近1,x的值越小,s(x)越接近0,具体曲线如下面图1。
图1:logistics函数的图像
通过将线性函数做logistics变换的最大价值是将预测结果(公式1的左边)变换到0到1之间,因此logistics回归可以看成是预测变量的概率估计,所以对于预测点击率(或二分类问题)这类业务是非常直观实用的。
对于推荐系统来说,上面的特征就是各类特征(用户维度特征、物品维度特征、用户行为特征、上下文特征等),而预测值
就是该用户对物品的点击概率。那么最终的推荐排序就是先计算该用户对每个物品(这些物品是召回阶段的物品)的点击概率,然后基于点击概率降序排列,再取topN作为最终的推荐结果。下面图2就可以很好地说明logistics回归模型怎么用于推荐系统相关的预测中。
图2:logistics回归模型用于推荐系统排序
12.1.2 logistics回归的特点
从上面的介绍我们可以知道,logistics模型非常简单,基本有一点数学知识的人都能理解,这个模型也非常容易用到推荐系统排序中。但logistics回归模型的弱点也非常明显:怎么构建交叉特征这个任务是logistics回归不能帮助我们的(构建交叉特征的过程相当于对模型进行了非线性化,可以提升模型的预测能力)。
logistics回归模型的特征之间是彼此独立的,无法拟合特征之间的非线性关系,而现实生活中往往特征之间不是独立的而是存在一定的内在联系。以新闻推荐为例,一般男性用户看军事新闻多,而女性用户喜欢娱乐八卦新闻,那么可以看出性别与新闻的类别有一定的关联性,如果能找出这类相关的特征,是非常有意义的,可以显著提升模型预测的准确度。
当然,我们也可以利用人工去做特征的交叉获得特征之间的非线性关系,不过这需要建模人员对业务非常熟悉,知道哪些特征之间交叉对预测目标是有帮助的,有时还免不了进行大量的尝试。这可能也是logistics回归模型的缺点。实际上,LR模型最大的缺陷就是人工特征工程,耗时费力,浪费大量人力资源来筛选、组合非线性特征。
LR模型是CTR预估领域早期最成功的模型,也大量用于推荐算法排序阶段,大多工业推荐排序系统通过整合人工非线性特征,最终采用这种“线性模型+人工特征组合引入非线性”的模式来训练LR模型。因为LR模型具有简单、方便易用、解释强、易于分布式实现等诸多好处,所以目前工业上仍然有不少业务系统采取这种算法。
12.1.3 logistics回归的工程实现
logistics回归模型是简单的线性模型,利用梯度下降算法(如SGD)就可以简单训练。像scikit-learn就包含logistics回归模型(参考类:sklearn.linear_model.LogisticRegression)。如果数据量大,也可以利用Spark MLlib中的logistics回归(见参考文献1)实现,这里不赘述。
12.1.4 logistics回归在业界的应用
我们要讲的第一个应用是关于logistics回归模型怎么用于实时场景中。在这个方向上,Google在2013年提出了FTRL(Follow-The-Regularized-Leader)算法用于广告点击率预估,该方法可以高效地在线训练LR模型,在Google及国内公司得到了大规模的采用,广泛用于广告