真|真 · 推荐系统入门

本人有幸在秋招的节骨眼上,在大厂实习,又恰好需要做推荐这一块。故写下零星,抛砖引玉。
简述
推荐出现的意义:在日常生活中,很多时候,信息太多,无法自己甄别;这时候又需要了解新姿势,那不如让代码替你实现。这就是推荐,推荐和搜索的最大区别就是是否有明确的目的性。
譬如:听歌,看电影,逛淘宝 很多时候都是APP默默为你实现推送
了解了推荐的目的,再来看看传统的推荐过程——算法
1. 基于邻域的推荐
这类算法完全就只是分析统计信息,连loss函数都木有
场景 有场景更好理解:有 A B C D 4个user;同时有a b c d e 5个item

A a b d
B a c
C b e
D c d e
购买行为如上文所示。
1.1 UserCF UserCF就是基于用户的协同过滤。一句话概括就是给你推荐和你兴趣相符的User(下面统称为U)喜欢的Item(统称为 I I I),并且你没有接触过。
首先:
直观感受是 购买行为越相似的用户越有参考价值。如此构建用户相似度矩阵 W W W
A B C D
A 0 1 1 1
B 1 0 0 1
C 1 0 0 1
D 1 1 1 0
其中 W i j W_{ij} Wij?表示U i U_i Ui?和U j U_j Uj? 买过的相同的 item多少次
这样得到了每个 U U U的表示
计算相似度
一般来说余弦相似度是最好的衡量标准。假定两两间的相似度已经算好了为 S S S (similarity)
推荐
那没有买过的东西理论上都可以推荐,实际操作是通过与当前User的top K个最相似的User来计算推荐得分(不同item取的Top K个User不一样 那些没有购买的User尽管和当前User很像也不计算在内)。
对于上面场景的A来说,对c d没有购买行为,对c有购买行为是B D,当 K = 3 K=3 K=3时,B D都会被算上来,推荐得分为:
p ( A , c ) = ∑ S A ( ? ) = S A B + S A D p(A, c) = \sum S_{A(?)}=S_{AB}+S_{AD} p(A,c)=∑SA(?)?=SAB?+SAD?
以此类推,得到每一个没有购买记录的商品的推荐得分。并设定阈值,决定是否推送~
自此UserCF的框架就讲完了,是不是很easy呢~~
1.2 ItemCF ItemCF就是基于物品的协同过滤。一句话概括就是根据你以往有兴趣的Item 给你推荐类似的,你没有接触过的Item(统称为 I I I)
首先:
每个item的怎么表示呢?最简单的想法就是根据user的购买行为来确定。如此构建物品相似度矩阵 W W W
a b c d e
a 0 1 0 2 0
b 1 0 2 2 1
c 0 2 0 2 1
d 2 2 2 0 1
e 0 1 1 0 0
其中 W i j W_{ij} Wij?表示I i I_i Ii?和I j I_j Ij? 两个 item同时出现在同一个user中的次数
这样得到了每个 I I I的表示
计算相似度
一般来说余弦相似度是最好的衡量标准。假定两两间的相似度已经算好了为 S S S (similarity)
推荐
那没有买过的东西理论上都可以推荐,对于I i I_i Ii?的推荐得分是通过与当前 I i I_i Ii?最相似的并且有过购买的top K个item来计算(不同item取的Top K个item也不一样)。
对于上面场景的A来说,对c d没有购买行为,当 K = 3 K=3 K=3时,a b d 都会被算上来,推荐得分为:
p ( A , c ) = ∑ S ( ? ) c = S a c + S b c + S d c p(A, c) = \sum S_{(?)c}=S_{ac}+S_{bc}+S_{dc} p(A,c)=∑S(?)c?=Sac?+Sbc?+Sdc?
以此类推,得到每一个没有购买记录的商品的推荐得分。并设定阈值,决定是否推送~
如图:
user A对a b d有购买行为(可以有购买意向权重 本文都是1),基于Item的相似度,计算出c d的推荐得分。
真|真 · 推荐系统入门
文章图片

自此ItemCF的框架就讲完了,可以发现ItemCF的可解释性强多了,可以告诉你是因为哪个Item系统才会推荐给你
User v.s. Item 我们来总结下这两个经典算法吧!
UserCF ItemCF
适用场景 因为算法需要维护一个User相似度矩阵,适合item于太多,而user远小于item,节约计算资源 比如新闻领域,每天产生的新闻增量太大,浏览很快,而user不会;并且他的本质是推荐和你兴趣相似user喜欢的item,而大多数user肯定都会喜欢热门商品,对于长尾部分发掘不利,但也是因为它更追热点,所以相对来说推荐得更有时效性。 因为算法需要维护一个Item相似度矩阵,适合于user太多,而item远小于user,节约计算资源;它的本质是挖掘你之前的喜好,进而推荐,可以说更具个性化,而个性化和挖掘长尾正是电商所需要的~ 并且相对来说电商行业item不会增长得过于迅速,相对稳定
实时性 当user自己有新喜欢的东西时,因为本质是根据别的user来推荐,所以对自己的推荐列表并不会有即时的改变,相当于“隔山打牛”hhh 当用户有新喜欢的东西时,因为本质是对历史兴趣进行推荐,所以TOP K个item里就有刚刚点?的那个~ 推荐列表在下次更新时立马发生变化
冷启动 结合实时性进行分析,当user只对少数item点?时,分两块:1. 对于自己来说选取的TOP K个user很难和之前的user有明显差异,自己是处于冷启动的;但是对于TOP K列表出现自己的user,改变是即时的(可以不更新user相似度矩阵);2. 对于新上线的物品,只要有用户对它表示喜欢,立马就有可能被推荐(可以不更新user相似度矩阵) 结合实时性进行分析,当user只对一个item点?时,分两块:1. 对于这个user本身推荐列表改变都是即时的,对于已有item,推荐列表的更新可以不更新user相似度矩阵,对于别的user不更新物品相似度表毫无影响(冷启动);2. 对于新上线的物品,那么冷启动在于一定需要更新一遍物品相似度表才可以,很容易理解了
可解释性 根据以往user的行为
【真|真 · 推荐系统入门】以上就是最传统的两种推荐方法…后续会有更多的解读,长期更新~
同时本博文的思路和部分内容均来自《推荐系统实战》

    推荐阅读