社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

推荐领域方向,深度学习真的比不过GBDT模型吗?

kaggle竞赛宝典 • 4 年前 • 805 次点击  


↑↑↑关注后"星标"kaggle竞赛宝典
  kaggle竞赛宝典技巧 
作者:砍手豪,文章摘自OTTO

推荐领域方向中,深度学习真的比不过GBDT模型吗?


问题

在与推荐相关的机器学习竞赛中(如与年度ACM RecSys大会一起举行的挑战赛)没有观察到基于DL的模型的这种几乎一致的成功。取而代之的是,成功的解决方案主要包括大量的特征工程和使用梯度提升的技术,基于此,是否能够认为深度学习在此领域是真的比不过GBDT模型。本文整理于知乎大佬砍手豪相应回答,略有润色,不过也已征得其同意。


回答

在推荐领域方向,工业界和比赛的方案完全不同,他们之间存在着巨大的gap。最近一年我也跟着大v们粗略的读了大概五六十篇左右的推荐方向经典论文,搜集了几十个推荐方向比赛的winner solution。基于此我的个人观点是,推荐比赛的数据普遍和工业界真实的数据存在gap,数据决定方案,这就导致比赛中的top方案和工业界的南辕北辙。


由于我论文读的不多,所以这里只谈推荐最主流最成熟的两个方向。一个是FM、FFM、NFFM以及其他各种深度学习的变种,通过user和item的各种特征组合+深度学习网络来建模;另一个是YOUTUBE-DNN(2016)、DIN、DIEN这一系列序列化建模,通过user过去与item的交互行为结合rnn/lstm+attention/transformer提取信息来预测给定用户在当前item的会发生的交互情况。这两个方向能够在工业界获得成功应用是毋庸置疑的。那么接下来就是分析这两个方向为什么在最近几年的推荐竞赛经常难以取得较好的效果。


目前ctr比赛里最常见的数据组织形式和最经典的比赛数据集criteo、avazu一致,即用train里前n天的数据去预测test里第n+1的数据。那么这类数据就会带来一个问题,虽然没有告知test的label,但是我们提前获知了test里第n+1天里user和item的完整的交互,如果测试集有多天的话,就会导致这样的问题会被更加地放大,越多的交互行为就可以提取到更多的有价值信息,而真实场景是无法获取到的。距离下一次点击的时间差这种初级的穿越特征这里就不谈了,像criteo、avazu分别把时间信息删除或者加粗粒度来避免这类leak。但经常会让人忽视的地方是比赛的时候,选手会通常合并train和test,通过一系列特征工程,如tfidf-svd、w2v、图网络、聚类的无监督学习方法等,我们就可以获得test里冷启动的user和item的画像。最简单的,我们可以通过count特征获取test里的user活跃度和item热度。这类leak是导致paper里的方法表现不佳的主要原因。


首先说FM+深度学习特征组合这条路,因为冷启动user和item没有历史行为,利用user 和item的side information进行交叉,原本是很好处理冷启动用户的方法。但如上文所说,由于目前的数据能够看到完整的test,等于提前透露了冷启动的user和item的交互信息。通常来说,交互信息要比side information更有价值,这就削弱甚至覆盖了特征组合这类深度学习结构在比赛的发挥,即便是在当年ffm获胜的avazu,第一名的4 Idiots和第二名的owen zhang,也一样对test提取了count特征用于模型融合。


再说序列化建模这条路,序列化建模的强点在于能够抓取user的短时兴趣,结果这种n天预测n+1天这种数据形式,意味着模型只能得到前一天的label,而序列化建模的输入是距离当前n次的label。我记得哪里看到过din的作者吐槽criteo、avazu这两个数据集不好。另一方面,虽然缺乏前n次的label,却又额外得到了未来n次的交互(无label),这相对于真实场景的一少一多,导致序列化建模方法的深度学习模型在ctr比赛里难以直接套用。


所以我认为由于比赛离线数据的划分可以获取未来完整的test信息,和真实业务场景只能提供历史信息产生了gap,这也是导致工业paper上的深度学习方法表现不佳的主要原因。如果比赛完完全全采用工业那一套真实线上测试集的话,深度学习是否可以打败GBDT呢?特征组合和序列化建模这两条深度学习建模路线也在一些比赛中取得了胜利,而在这里去回顾和分析其原因,会发现其实也是由数据决定的,下面会举例阐述


criteo、avazu、腾讯广告比赛2018分别就是ffm和nffm取得胜利的最有影响力的比赛,这些比赛有一个共同点,首先就是取消或削弱了时间特征,避免了距离下一次点击的时间这种初级穿越特征的使用。另一方面criteo、avazu是没有显式的user id和item id,而腾讯广告大赛2018里test的新user的交互很少,只有1个或几个,这样就避免了前文里从test里获取冷启动画像的问题,只能利用特征进行交互。所以这几个比赛的数据集就特别适合特征交互类模型。


在序列化建模方面,Instacart Market Basket Analysis (2017)、 快手日活用用户预测 (2018)、 Data Science Bowl 2019、Riiid! Answer Correctness Prediction (2021)这几个比赛序列化建模的深度学习模型就取得了和树模型相当或超过树模型的成绩,因为这类比赛数据形式不是前n天预测n+1天,而是n 次预测n+1次,看不到未来n+2次的信息了,这符合真实业务场景的情况,同时也是相关序列化建模paper都使用的数据划分形式,所以就回到了序列化建模的主场了,当数据量够大的时候,深度学习无论是效率还是精度都要优于树模型。特别是riiid的获胜方案,就是lstm和transformer的组合,同时考虑长序列建模,和前几年的序列化建模论文热点不谋而合。


无论树模型还是深度学习,都高度依赖数据的组织形式。no free lunch,搜广推方向注定不会有像cv,nlp这样统治单一任务的模型。所以以后不要吐槽某某推荐论文对比的时候挑数据,或者某某论文的方法到自己手上不work。真的没有哪个模型能处理每一个数据。有这吐槽和埋怨的功夫,不如仔细研究数据,看看数据到底适合哪一类模型。


到这里,可能有人会说,当数据划分导致的test信息leak影响比较大的时候,树模型必定会好于深度学习吗?这里拿出两个比赛来举例,你会发现深度学习有时候在挖掘leak上其实也比树模型强。


首先是图灵联邦视频点击预测大赛的TOP1方案,在这个比赛里,数据形式也是前n天预测n+1天,意味着我们可以知道test里某一次交互后接下来的行为,按照一般的方法那就是特征工程提取未来信息建模,但是第一名放弃了传统的特征工程,从序列建模的角度将过去12次和未来12次的交互序列作为lstm的输入,利用lstm自动提取信息,取得了比特征工程更好的效果,最终击败了其他队伍的树模型。


第二个是微信大数据挑战赛2021,这个比赛数据是前n天预测n+1天,为了避免leak,删除了时间信息,打乱了test的顺序。但即便如此,依然可以通过特征工程,利用tfidf-svd、w2v、图网络、聚类等方式来获取test里新item的画像,也即输出多个高维的向量特征,对于这种多列数值特征,显然深度学习更好,所以这次比赛,深度学习网络将树模型远远的甩在身后。根据第一名的分享,如果上文所提到向量若仅在train上提取,无法得到冷启动item的信息,效果是远远不如train+test合并提取的。


这里非常佩服这两个比赛的冠军,一方面是对其高超的深度学习技术,另一方面是他们实实在在地分享了leak的使用及影响。正如前文所说,no free lunch,每个数据的强信息都不同,比赛里的leak也只不过是强信息的一种罢了,具备有效利用深度学习挖掘leak的能力,也一定能挖掘真实业务里有意义的强信息,所以尽管他们使用了leak,但他们的solution在我心中含金量十足。


随着比赛圈深度学习水平的整体提升,过去用树模型+特征工程提取leak 的方式,估计要逐渐被深度学习给取代,相信未来比较内卷的ctr比赛里,深度学习分量会越来越重。回到问题的本身,深度学习真的比不过GBDT模型吗?相信上述的内容已经回答了这个问题。同时也寄希望各位看官不要局限于狭隘的认知,一个数据给你了,可以去尝试不同的方向,博采众长,谢谢。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/124466