推荐系统概述:

定义:将商品推送给用户的一个系统

推荐系统是利用网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买的过程。而个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。推荐系统产生的主要原因是由于随着电子商务的发展,商品数量和种类在快速的增长,客户需要花费大量的时间才能找到自己想购买的商品,而这种时间的消耗无疑会在信息过载问题中使得客户不断流失。为了解决这些问题,个性化推荐系统就应运而生。个性化推荐系统是建立在海量数据挖掘基础上的一种高级商务智能平台,以帮助电子商务网站为客户提供完全个性化的决策支持和信息服务

推荐系统的发展:

分类⽬录(1990s):覆盖少量热门⽹站。例如Hao123 Yahoo

搜索引擎(2000s):通过搜索词明确需求。例如Google Baidu

推荐系统(2010s):不需要⽤户提供明确的需求,通过分析⽤户的历史⾏为给⽤户的兴趣进⾏建模,从⽽主动给⽤户推荐能够满⾜他们兴趣和需求的信息。

搜索 vs 推荐:




java个性化推荐算法有哪些 个性化推荐的定义_java个性化推荐算法有哪些


推荐系统存在的前提:信息过载;⽤户需求不明确

推荐系统的⽬标:⾼效连接⽤户和物品,发现长尾商品;留住⽤户和内容⽣产者,实现商业⽬标

推荐系统(Recommender System, RS)是向用户建议有用物品的软件工具和一种技术。常用于多种决策过程,比如购买什么商品、听什么音乐、在网站上浏览什么新闻等等。“物品(item)”是用来表示系统向用户(user)推荐内容的总称,一个推荐系统通常专注于一个特定类型的物品(eg: CD、图书、电器等),设计的核心是为特定类型的物品提供有用和有效的建议而定制的。

推荐系统分为个性化推荐和非个性化推荐两大类;个性化推荐是指基于用户对商品的偏好信息来进行其它商品的推荐,至于非个性化推荐一般是指将热销商品进行推荐(eg: Top10的商品推荐);这两种不同的推荐方式在某些不同场景下都会存在着比较不错的效益(个性化推荐系统:基于用户的行为偏好数据,产生推荐列表;以保障推荐列表中的商品是用户所关注或者所喜好的。用户的行为偏好数据:用户在系统上的所有操作所产生的数据;非个性化推荐系统:推荐热门商品或者新商品给用户)

推荐系统的功能:增加物品销售的数量;出售更多种类的物品;增加用户满意度;更好的了解用户需求,增加用户忠诚度

机器学习、深度学习、推荐系统,系统一般分为两个部分:在线部分 + 离线部分

在线部分:只负责简单的数据获取、数据排序、数据展示等操作; 离线部分:模型的训练以及预测值的产生

推荐系统通用模型:


java个性化推荐算法有哪些 个性化推荐的定义_推荐系统_02

推荐系统通用模型流程图


java个性化推荐算法有哪些 个性化推荐的定义_推荐系统_03

推荐系统结构

java个性化推荐算法有哪些 个性化推荐的定义_个性化推荐_04

推荐系统结构

推荐系统推荐结果形式:

评分预测方式:

推荐的最终结果是根据用户对物品的打分或者物品与物品之间的关联性产生的,最终的推荐商品列表打分比较高或者关联性比较高的商品。

TopN预测方式:

最终的推荐商品就是一组商品序列,不会涉及到用户或者商品与推荐结果之间的关联关系的

推荐系统效果评估:


java个性化推荐算法有哪些 个性化推荐的定义_离线_05


常⽤评估指标:

准确性;满意度;覆盖率;多样性;新颖性;惊喜度;信任度;实时性;鲁棒性;可扩展性;商业⽬标;⽤户留存;

准确性(学术界):

评分预测:


java个性化推荐算法有哪些 个性化推荐的定义_个性化推荐_06


topN推荐


java个性化推荐算法有哪些 个性化推荐的定义_实现实时个性化推荐_07


覆盖度:

覆盖率


java个性化推荐算法有哪些 个性化推荐的定义_个性化推荐_08


信息熵


java个性化推荐算法有哪些 个性化推荐的定义_java个性化推荐算法有哪些_09


基尼系数


java个性化推荐算法有哪些 个性化推荐的定义_java个性化推荐算法有哪些_10


分层流量占⽐

多样性&新颖性&惊喜性:

多样性:推荐列表中两两物品的不相似性;新颖性:未曾关注的类别、作者;推荐结果的平均流⾏度;惊喜性:历史不相似(惊)但很满意(喜);

往往需要牺牲准确性(使⽤历史⾏为预测⽤户对某个物品的喜爱程度;系统过度强调实时性)

Exploitation:选择现在可能最佳的⽅案

Exploration:选择现在不确定的⼀些⽅案,但未来可能会有⾼收益的⽅案。

在做两类决策的过程中,不断更新对所有决策的不确定性的认知,优化长期的⽬标函数。

Bandit算法-原理:

Epsilon-Greedy:以1-epsilon的概率选取当前收益最⼤大的臂,以epsilon的概率随机选取⼀一个臂。

Upper Confidence Bound:均值越⼤大,标准差越⼩小,被选中的概率会越来越⼤大


java个性化推荐算法有哪些 个性化推荐的定义_java个性化推荐算法有哪些_11


Thompson Sampling:每个臂维护⼀一个beta(wins, lose)分布,每次⽤用现有的beta分布产⽣生⼀一个随机数,选择随机数最⼤大的臂

Bandit算法-应⽤:兴趣探索;冷启动探索;

LinUCB:加⼊特征信息。⽤User和Item的特征预估回报及其置信区间,选择置信区间上界最⼤的Item推荐,观察回报后更新线性关系的参数,以此达到试验学习的⽬的;COFIBA:bandit结合协同过滤

基于⽤户聚类挑选最佳的Item(相似⽤户集体决策的Bandit);基于⽤户的反馈情况调整User和Item的聚类(协同过滤部分)

可以将推荐系统的运行过程看成一个回归问题或者分类问题,所以可以通过类似的分类/回归相关指标进行衡量,主要包括:

MSE(均方误差):Mean Squared Error;是指估计值与真实值之差平方的期望值


java个性化推荐算法有哪些 个性化推荐的定义_离线_12


RMSE(均方根误差):Root Mean Squared Error;是均方误差的算法平方根


java个性化推荐算法有哪些 个性化推荐的定义_推荐系统_13


MAE(平均绝对误差):Mean Absolute Error; 是指估计值与真实值之间绝对差值

的期望值。


java个性化推荐算法有哪些 个性化推荐的定义_个性化推荐_14


FCP(一致序列对比率评分):Fraction of Concordant Pairs。计算评分一致的

物品对在所有物品对中的占比。


java个性化推荐算法有哪些 个性化推荐的定义_推荐系统_15


准确率(Precision);召回率(Recall);ROC曲线(TPR/FPR);覆盖率、 多样性、 新颖性、惊喜度、实时性、商业目标等


java个性化推荐算法有哪些 个性化推荐的定义_离线_16


java个性化推荐算法有哪些 个性化推荐的定义_推荐系统_17


推荐系统框架:


java个性化推荐算法有哪些 个性化推荐的定义_java个性化推荐算法有哪些_18


除了常用的这十种推荐框架外,还有很多其它的框架,比如: Surprise(python)Recommendable(Ruby)、Oryx(Java)、Recommenderlab(R)等等,这些框架除了使用的编程语言不同以外,实现的算法大同小异,主要是:SVD、ALS、CF及其改进算法等等。

Surprise(Simple Python Recommendation System Engine)是scikit系列的一个库。支持多种推荐算法,是python语言使用实现推荐算法的首选方式。

Surprise支持基本的常用推荐算法:

基础算法/baseline algorithms;协同过滤算法(基于近邻算法)/neighborhood methods;矩阵分解算法/matrix factorization-based(SVD, SVD++, NMF)

Surprise支持的算法:


java个性化推荐算法有哪些 个性化推荐的定义_个性化推荐_19


Surprise支持的相似度度量指标:


java个性化推荐算法有哪些 个性化推荐的定义_推荐系统_20


Surprise支持的评估准则:


java个性化推荐算法有哪些 个性化推荐的定义_实现实时个性化推荐_21


EE实践:

兴趣扩展:相似话题,搭配推荐;⼈群算法:userCF、⽤户聚类;Bandit算法;graph walking;

平衡个性化推荐和热门推荐⽐例;随机丢弃⽤户⾏为历史;随机扰动模型参数

评估⽅法:

问卷调查:成本⾼;离线评估:只能在⽤户看到过的候选集上做评估,且跟线上真实效果存在偏差只能评估少数指标,速度快,不损害⽤户体验;在线评估:A/B testing

AB testing:

单层实验:以某种分流的⽅法(随机、uid%100),给每个实验组分配⼀定的流量。每个实验组配置不同的实验参数。


java个性化推荐算法有哪些 个性化推荐的定义_实现实时个性化推荐_22


只能⽀持少量实验,不利于迭代;实验之间不独⽴,策略之间可能相互影响;分流⽅式不灵活

多层重叠实验框架:

保留单层实验框架易⽤,快速的优点的同时,增加可扩展性,灵活性,健壮性。

核⼼思路:将参数划分到N个⼦集,每个⼦集都关联⼀个实验层,每个请求会被N个实验处理,同⼀个参数不能出现在多个层中。


java个性化推荐算法有哪些 个性化推荐的定义_java个性化推荐算法有哪些_23


推荐系统的冷启动问题:

⽤户冷启动:如何为新⽤户做个性化推荐

物品冷启动:如何将新物品推荐给⽤户(协同过滤)

系统冷启动:⽤户冷启动+物品冷启动

本质是推荐系统依赖历史数据,没有历史数据⽆法预测⽤户偏好

⽤户冷启动:

1.收集⽤户特征(⽤户注册信息:性别、年龄、地域;设备信息:定位、⼿机型号、app列表; 社交信息、推⼴素材、安装来源)

2.制造粗粒度选项,引导⽤户填写兴趣

3.transfer learning:使⽤其它站点的⾏为数据

4.新⽼⽤户推荐策略的差异

新⽤户在冷启动阶段更倾向于热门排⾏榜,⽼⽤户会更加需要长尾推荐;推荐候选的代表性&多样性;Explore Exploit⼒度;使⽤单独的特征和模型预估;保护⽤户体验(物品冷启动探索、⼴告、推送)

推荐系统发展阶段:

1.0:关联规则、热门推荐等统计⽅法;2.0:矩阵分解等ML⽅法,离线计算推荐列表;

3.0:召回 + learning to rank重排序;4.0:召回&排序实时化;

5.0:end2end深度学习,⼀切皆embedding; 6.0:智能化推荐系统


java个性化推荐算法有哪些 个性化推荐的定义_推荐系统_24