推荐系统类型包括:
1、 人类手工生成的推荐系统。
比如早期的门户网站,里面的内容都是有网站编辑手工选择的,这就是一种原始的推荐系统。
2、 简单的聚合推荐系统。
a.例如KTV里面的歌曲点播排行榜、畅销书排行榜、电影票房排行榜
b.按照物品的事件性质推荐,例如最近上架的新品推荐。
3、真正的个性化,千人千面的推荐系统。
例如Amazon、淘宝的商品推荐,Netflix、土豆、爱奇艺、腾讯视频的电影推荐。
推荐系统模型
U:所有的用户集合
S:所有的物品集合
那么推荐系统的模型就是:U * S – R
这里边需要建立好我们推荐系统中推荐值矩阵,把用户属性和物品属性具体化、数字化。
推荐系统的关键问题:
1、 收集数据,建立推荐值矩阵。
数据具有时效性,一个用户的喜好会随着时间的变化而变化,一个人童年喜欢看的书籍和电影在成年以后可能不再喜欢了;
用户喜好还会随着身份的改变而发生改变,如一个刚刚有小孩出生的用户喜欢的商品会出现更多的婴儿用品,例如尿不湿、婴儿奶粉等。
2、 从推荐值矩阵中已知数据预测未知数据。
这就是需要搭建推荐系统的核心功能,通过已知的推荐值矩阵,用户属性和商品属性,推测用户对未购买过(或者未点击过)商品的喜好程度。
3、 建立一个评价体系,用于检验推荐系统的推荐效果。
如何知道我们的推荐系统是不是一个好的系统,需要建立我们自己的指标,通过不停地优化微调完善推荐系统。
我们收集数据的手段主要包括以下两种:
1、 显示收集。
请用户为物品打分、点赞和评价。
这部分的挑战在于数据经常不完整,许多用户可能从来不(或者很少)通过主动打分。点赞或者留言的方式表达自己的喜好。
2、 隐性收集。
为了我们收集数据的完整性,弥补显形收集的不足,就要用到隐性收集,有的用户对某个物品的喜爱可能是隐性的,可以通过用户行为来推断用户的喜爱度。
如视频网站可以收集用户观看电影的历史,是否有快进、重播等行为,以此判断用户喜好;
购物网站用户,购买行为表达用户的喜爱,退货行为表达不喜爱。
在从推荐值矩阵中已知数据预测未知的数据时,我们遇到的最关键的挑战是:
1、当用户和物品数量都比较大的情况下,推荐值矩阵通常是一个稀疏矩阵,矩阵中大多数值是未知的,大多数用户和可能没有为大多数物品表达喜好;
2、冷启动问题:新的物品还没有任何用户为它打过分或者新的用户没有任何的打分行为。
常用的推荐算法包括:
1、 基于内容
2、 协同过滤
3、 矩阵分解
4、 因子分解机(Factorization Machine)
5、 深度学习
6、 机器学习排序(Learning to Rank)
7、 探索与利用(Explore and exploit):Contextual bandit
8、 集成学习(Ensemble/Hybrid method)
A、 投票(Voting)
众数、平均值、加权平均
B、 堆叠(Stacking)
一种堆叠算法的输出作为另一种算法的输入(或者输入的一部分)
C、 提升(Boosting)
算法输出值与真实值的偏差,再次作为输入数据进行训练
如何评估推荐系统
1、 离线评估,用历史数据对推荐系统进行训练并预测未来一段时间的数据,然后与自己系统中的真实数据对比,以此来评估推荐系统的准确性。
2、 问卷调查,同一个问题用两种或多种形式表达,从而了解用户的真实需求。
3、 用户学习(User Study)
不只是算法,针对整个系统,包括用户界面;几十人用户的小范围测试能够发现90%左右的大问题。
4、 在线测试(A/B测试)
“No free lunch theorem”:世界上没有一种算法在解决任何问题的情况下都优于另外一种算法。