推荐系统(3)---推荐可能遇到的问题

实践中可能遇到的问题

https://www.zhihu.com/question/28247353

作者:吴海波
链接:https://www.zhihu.com/question/28247353/answer/363741506
  • i2i/simirank等相似计算算法中的哈利波特问题,相似性计算在推荐系统的召回起到非常重要的作用,而热门物品和用户天然有优势。因此,处理方法基本上都是凭经验,会出现各种magic number的参数。
  • svd/svd++等算法,在各种比赛中大放异彩,但是据我所知,各大互联网公司中基本没有用它的。
  • i2i及它的各种变种真是太好用了,大部分公司的业务量,从ROI来看,其实没有必要再做什么优化了。
  • 推荐的召回策略多优于少,但系统的计算rt是个问题,没有好的系统架构,也没有什么优化空间。
  • i2i等类似计算算法,实际业务中容易跑挂,比如用spark就容易oom,很容易发生倾斜,处理起来又有很多trick和dirty job。
  • 推荐系统不只有召回,召回后的ranking起到非常大的作用,这个和广告的点击率预估有点像。
  • 非常多的业务没有办法向头条/facebook之类的有稳定的用户留存指标,而留存是推荐系统非常重要目标,因此需要找各种折中的指标去知道abtest。
  • 训练样本穿越/泄露问题,即在训练的特征中包含了测试集的样本的信息,这个是初期非常容易犯的错误,在后期有时也会隐秘的发生。
  • 大部分推荐系统的训练数据需要在离线条件下去拼接,其中用户的行为状态和时间有关,拼接非常容易出问题,因为系统当时的状态会有各种状况(延时、数据不一致)等,导致训练和实际在线的数据不一致,建议把训练需要的日志在实际请求中直接拼接好打印落盘。
  • 最后,算法的作用有点像前辈们讲的:短期被人高估,长期被人低估。按目前国内业务方对算法有了解的特别少,算法对生态的长短期影响,只能靠算法负责人去判断,因此,就算你只是个打工的,请有一颗做老板的心。
作者:清华阿罗
链接:https://www.zhihu.com/question/28247353/answer/678232505

学习率不宜过小,mini_batch_size不宜过大

我们刚开始做的时候,广告推荐系统模型的网络结构直接从新闻推荐系统拷贝过来,只是将特征换掉,网络层级关系和一些参数不变,比如学习率和mini_batch_size都跟新闻推荐系统一致,然而用广告数据训练的ctr模型做预测时输出的值是有问题的,开始以为是特征线上线下一致性的问题,仔细对比线上线下抽取的特征,发现是没有问题的,后来跟新闻推荐的小伙伴交流才开始怀疑是模型网络参数的设置有问题,因为新闻的数据都非常大,一分钟的请求量是广告的数倍,刚开始的时候,我们接的直客广告很少,能够用的数据也少,模型在学习率较小和mini_batch_size太大的时候都无法学充分,这就导致模型误差可能只在某个局部取得极小值。最终我们修改了这两个参数后模型预测就正常了。

广告预估ctr最高的结果不一定会被用户看到

新闻推荐系统中,推荐引擎会对召回的新闻(大概是300篇候选集)给个ctr预估值,然后将这些新闻按照ctr从高到低排序,ctr值排在最前面的新闻一般都会进入用户的手机屏幕被用户刷到。但是在广告推荐系统中,ctr预估结果高的被用户看到的概率明显比新闻推荐系统低,因为广告系统是个三方博弈的过程,也就是广告主、平台、用户之间的一个平衡,广告主希望自己的广告有更多的曝光机会并且出价还低,平台希望选出ctr和ecpm都高的广告,这样广告主满意,自己挣的钱也多,用户至少是不希望出现自己讨厌的广告,有多大兴趣点击就不一定了。这样对比就知道,往往广告平台推荐系统给出的ctr很高、离线和实时的auc很高,但是收入可能没怎么增长,所以广告的ctr优化比新闻推荐系统ctr优化要更难。

喜欢新闻的人不一定对类似的广告也感兴趣

这个比较好理解,经常刷新闻看某个频道的人不一定就对类似的广告感兴趣。刚开始的时候我们把用户看新闻得到的用户画像直接用在广告ctr预估模型里面,通过计算模型特征的sensitivity,结果发现很多用户新闻特征对广告ctr预估模型的贡献并不大。所以在广告算法里面,做look like很重要,也就是通过一类人找到另一类相似的人,比如通过分析一批种子用户的财富水平得到其他所有用户的财富水平,这对于贷款类、珠宝类广告主就非常有用,因为一般穷人更愿意贷款,有钱人才消费的起珠宝。

cvr模型预估的数据延迟上报问题

广告推荐系统里面有很多不同类型的广告,比如cpc、cpm、cpi、cps等等。除了需要预估ctr模型,我们通常还会预估cvr模型,cvr模型可以简单理解为点击到安装的预估,主要是cpi类型的广告,这类广告通常需要给出一个install/click的预估值。然后问题就来了,很多时候用户click信息上报的比较快,但是install信息由于存在广告收入归因的问题,往往可能在一天甚至几天后才收到这个数据,这对我们模型训练有很大的干扰,因为线上的cvr预估往往都是近实时的,如果一个正例来的很晚,模型准确率自然就低。

 推荐系统的难点

https://www.jianshu.com/p/6a5e796499e8

传统的推荐系统使用显式/隐式信息作为输入来进行预测,存在两个主要的问题:
稀疏性问题:实际场景中,用户和物品的交互信息往往是非常稀疏的。如电影推荐中,电影往往成千上万部,但是用户打过分的电影往往只有几十部。使用如此少的观测数据来预测大量的未知信息,会极大增加过拟合的风险。
冷启动问题:对于新加入的用户或者物品,其没有对应的历史信息,因此难以准确的进行建模和推荐。
 
解决稀疏性和冷启动问题的一个常见思路是在推荐算法中额外引入一些辅助信息(side information)作为输入。辅助信息可以丰富对用户和物品的描述、增强推荐算法的挖掘能力,从而有效地弥补交互信息的稀疏或缺失。常见的辅助信息包括:
社交网络:一个用户对某个物品感兴趣,他的朋友可能也会对该物品感兴趣
用户/物品属性:拥有同种属性的用户可能会对同一类物品感兴趣
图像/视频/音频/文本等多媒体信息:例如商品图片、电影预告片、音乐、新闻标题等
上下文信息:用户-物品交互的时间、地点、当前会话信息等。


原文地址:https://www.cnblogs.com/Lee-yl/p/11252334.html