应邀做一个推荐算法,推荐工程师入门指南,一方面是相当于对自己过往工作的一个总结,另一方面希望对想入门的同学有所帮助。主要分为以下四个部分,都只做入门级别简单介绍,另外尽可能的附上源码和原理介绍。
一、综述
1、何为推荐系统
推荐系统本质上就是一个信息过滤系统,通常分为:召回、排序、重排序这3个环节,每个环节逐层过滤,最终从海量的物料库中筛选出几十个用户可能感兴趣的物品(商品,新闻,短视频等)推荐给用户。
(企业级别的完整的推荐系统)
召回:相当于一个粗排,一般从召回策略(如推荐热门文章、命中某类标签的文章等等)、双塔模型(学习用户及物品的embedding,内积表示预测意向概率)、FM及CF等模型做召回、知识图谱(知识图谱表示学习,知识推理用户对物品的兴趣程度)、用户(多兴趣)行为序列预测做召回等等。
排序:一般分为粗排和精排。
粗排层:利用规则或者简单模型对召回的物品进行排序,并根据配额进行截断,截取出 Top N (一般以千为单位)条数据输出给精排层,配额一般分业务场景。
精排层:利用大量特征的复杂模型,对物品进行更精准的排序,然后输出给重排层,整个精排环节的输出量往往以百为单位。粗排、精排的环节是推荐系统最关键,也是最具有技术含量的部分。
重排层:主要以产品策略为导向进行重排(及融合),常见策略如去除已曝光、去重、打散、多样性、新鲜度、效益优先等策略,最后生成用户可见的推荐列表,整个融合和重排环节的输出量往往以几十为单位。
高校学生课题一般数据量级不是很大,直接精排模型就能搞定,也容易更有技术含量。
二、常用精排算法
1、决策树模型
决策树作为推荐系统早期经典的模型,常用的一般有XGBoost,lightGBM。决策树的优点:
1)上手快:相比于深度学习模型,无论是从模型原理还是从代码应用上都比较简单
2)效果佳:相比于传统的协同过滤和逻辑回归,决策树对于数据的拟合能力更强,效果较好,一般常作为base模型,然后在此基础上再迭代深度学习模型。
3)可解释性较好:相比于深度学习模型这种黑盒,决策树具有更好的可解释性,可以给出特征重要度,进行特征选择或者是模型打分的分析。(论文当中可以多贴图,做一些可视化的分析)
决策树特征选择和TreeShap归因参考:如何获得XGBoost模型的可解释性_特征
决策树原理介绍和代码参考:【精选】XGBoost与Light-GBM算法_xgboost lightgbm_星幻夜极的博客-优快云博客
2、深度学习模型
1)Wide&Deep
与其说广深(Wide&Deep)模型是一种模型,倒不如说是一套通用的范式框架。Wide&Deep 模型由 LR+MLP 两部分并联组成,综合了传统机器学习和深度学习的长处。
- Wide 部分根据历史行为数据推荐与用户已有行为直接相关的物品;一个LR模型,通过拟合数据,偏记忆功能。
- Deep 部分负责捕捉新的特征组合,从而提高推荐的多样性。NN模型,通过高阶的学习,提升模型的泛化能力。
2)DeepFM
深度因子分解机(Deep Factorization Machine,DeepFM)模型是从广深(Wide&Deep)框架中演化出来的一种模型。它使用 FM 模型替换掉了 LR 部分,从而形成了 FM&Deep 结构。
引入FM可以得到二阶交叉特征,代替人工做特征组合。
FM原理参考:特征交叉 | FM:embedding化特征交叉鼻祖 - 知乎
github上封装好的deepFM代码:https://github.com/shenweichen/DeepCTR/blob/master/deepctr/models/deepfm.py
也可以自己基于tensorflow实现:https://www.cnblogs.com/zmxc/p/16968696.html
三、特征工程
1、数据清洗
删除异常数据,避免噪声的引入;缺失值填充等。
2、数据标准化
一般与距离无关的概率模型不需要做标准化,比如决策树模型,深度学习模型需要归一化。
为什么需要标准化以及常用的标准化方法参考:深度学习炼丹-数据标准化 - 知乎
3、数据分桶
具体参考:一文带你了解数据分箱技术:让数据更有价值 - 知乎
四、衡量指标
1、离线
常用的离线指标有auc(整体样本间的排序能力),gauc(每个用户auc然后加权平均),MAPE等
具体实现可参考:
动手实现推荐系统评价指标AUC,GAUC,NDCG,HitRate,MRR,Recall,LogLoss - 知乎
回归预测模型的常见评估指标(MAE,MSE,MAPE等) - 知乎
2、在线
在线评估参考具体业务场景,电商推荐一般是CTR,CTCVR等;
内容和短视频推荐一般是停留时长,下滑步长,CTR等;
参考:
一窥推荐系统的原理 一窥推荐系统的原理 - 简书