继上篇《个性化推荐101》之后,同学们反馈还不够详细,可能对没有做过推荐的同学初上手还是不知所措,或者会踩不少坑,故根据自己的经验分三篇出一个系列更加详细的指导文档(主要针对有监督二分类问题),一步步带大家入门,做推荐并不难,但是要做好也确实不易,欢迎大家一起学习一起进步。
从自身接触较多的推荐场景,我把推荐分为两类吧,
1、出号码包:这类场景一帮是针对某一具体事件,通过算法模型预测给出一批高潜的号码包,用于精细化运营。比如CLM中的拉新、拉活、拉回流和流失预警,针对某个或某类活动的高潜参与号码等等。这里我姑且把它也算做推荐的一类,因为严格说来它是推荐的一个特殊场景,因为推荐一般是1对多的情况,而号码包这类场景更多的是1对1。
2、个性化推荐:真正意义上的推荐,1对多的场景,在复数的物品中找出最可能符合用户喜好的推荐给他,所以看得出个性化推荐的效果和落地是最直接的,因为我能直接把用户喜欢的物品推给他而得到数据层面的落地,但是号码包一般还需要配合具体的运营策略进行再加工,所以落地较后者是不够直接,不够高效的,当然也能通过个性化推荐的方式去出号码包,这个后面也会讲到。
1、 第一步:充分了解清楚推荐场景。这是很关键但是很容易被忽视的一步,很多同学接到一个推荐项目就马上开始搭特征训练模型了,其实在这之前你应该充分和需求方反复沟通清楚她们的诉求,比如标的群体是什么、事件或推荐的物品是什么、最终能以什么样的形式落地以及她们需求的目标和期望的效果是怎样的等等。只有都搞清楚了每个细节,才能对你要做的推荐有个大概的把握,才好规划下面应该要怎么去做好。
2、第二步:提取训练样本。作为模型搭建的第二步,着实关键,一个不精确的训练样本,会严重影响最终预测或推荐效果的可用性,而这里样本的正确选择,直接取决于对推荐场景的理解是否到位。下面讲讲具体方法:
(a)我们用的推荐算法更多是有监督的学习,就拿LR(逻辑回归)这类二分类算法为例,有监督的意思是我们是从已知去预测未知。首先针对一批用户群体,我们已经知道了他们针对这个推荐场景下的行为结果(标签),对于二分类问题也就是1或0(正样本或负样本),如参与了活动或没有参与,点击了游戏或没有点击等等,一般情况下有行为的用户作为正样本,当然也并不绝对,如流失预警中,流失用户是作为正样本的,因为我们的目标是预测可能会流失的用户。所以正负样本的选择取决于你的目标是什么。
(b)好,搞清楚了你的正负样本分别是什么后,再来看看应该分别选多少正负样本(正负样本比例),这里可能有两种不同的情况:
(c)解决了正负样本的比例问题之后,就需要去框定你的群体范围,这个其实就是根据第一步的推荐场景来定的。这里存在两个点:
(d)最终提取完毕的样本库表字段是这样子的:
日期分区 | 用户标识 | 标签(1或0) |
---|---|---|
ftime | uin | label |
日期分区 | 用户标识 | 物品标识 | 标签(1或0) |
---|---|---|---|
ftime | uin | item | label |
如果最终训练的时候,你的样本表和特征表可以分开输入模型来训练,在样本表时间分区上就有个需要注意的点:处于对例行化的支持,我们加入的日期分区,但对于一次训练来说,这里的日期分区一般只表示为一个日期分区,因此如果样本选取的周期为多天的情况,就需要保留多一个样本表存储保留每天日期分区的样本便于后续关联对应的特征表(因为为了保证不同天样本在特征周期上的一致性,一般会采取每天的样本关联前一天的特征,再合并关联后多天的数据用于模型训练,后面会详细讲到)。
3、第三步:搭建特征。样本准备好了,模型的训练就还剩下特征的搭建和算法的选择了。如果说样本的好坏决定了你的方向正不正,那特征的好坏就决定了你的效果大致高低水平,是整个过程最难最繁琐的一步。所以这里又划分出了大概两种不同倾向的做法:
(a)如果使用的是LR这类线性模型,想要刻画好非线性问题(绝大多数现实中的问题都是非线性的),就需要把特征做的足够复杂和准确,从而引入足够的非线性性来弥补算法本身的局限,使其能够拟合复杂的问题,可以说在这类算法下特征的好坏直接决定了模型的好坏,所以对开发同学在业务和数据上的熟悉和敏感程度要求很高,会花不少时间在特征的选取、组合等操作上。
(b)但如果你对现在的业务不够熟悉对数据不够敏感,是不是就不能搭建一个高效的模型来呢?也并不是,可以使用一些非线性的算法,比如FM、GBDT、XGBoost乃至NN,这些算法本身对特征提取的要求就没有那么高了,甚至能自动筛选出对模型有价值的特征,自动去做组合特征,一定程度上减少人工提取组合特征的工作。
(c)如果在缺乏特征数据的情况下,还可以通过CF(协同过滤)算法,只用用户对物品的1对1的行为数据矩阵来做基于相似度上的推荐,这里又可以大致分为基于用户的CF(user-based)和基于物品的CF(item-based);当然还可以通过word2vec这类文本算法把用户有行为的物品或其他少量特征扩展为高维空间向量,用向量间的相似度去做推荐,以弥补特征不足的现状。这些方法后续会慢慢介绍。
那到底选哪种做法比较好呢?我想更多的人肯定选择 b,能简单的输出效果不就好了!嗯同意,但是b方式并不是说不需要搭特征了,只是对特征的复杂度和精确性要求没有那么高,但是好的特征不是更能事半功倍,所以如果特征搭的好,一个简单的算法可能就会达到很好的效果,毕竟复杂的算法虽然对特征要求不高,但是相应要求的计算量也可能会较大。所以经常听到这样的事实,你用复杂的模型训练了好久出来的效果,可能还没有一个不懂模型的人用经验规则简单排序出来的效果好,说明对业务和数据的敏感在效果提升上的重要性。套用一句话呵呵,算法是死的,特征是活的。所以一开始还是建议同学们从特征入手,了解清楚如何搭建高效的特征,后续配合上合适的算法才能如虎添翼。下篇会着重讲下特征搭建的方式方法。
手把手带你做推荐(二):特征搭建
手把手带你做推荐(三):算法选择
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。