◆ ◆ ◆

  序言

  最近因为PAC平台自动化的需求,开始探坑推荐系统。这个乍一听去乐趣无穷的课题,对于算法大神们来说是这样的:

  

  而对于刚接触这个领域的我来说,是这样的:

  

  在深坑外围徘徊了一周后,我整理了一些推荐系统的基本概念以及一些有代表性的简单的算法,作为初探总结,也希望能抛砖引玉,给同样想入坑的伙伴们提供一些思路。

  ◆ ◆ ◆

  什么是推荐系统

  1. 什么是推荐系统?

  推荐系统是啥?

  如果你是个多年电商(剁手)党,你会说是这个:

  

  如果你是名充满文艺细胞的音乐发烧友,你会答这个:

  

  如果你是位活跃在各大社交平台的点赞狂魔,你会答这个:

  

  没错,猜你喜欢、个性歌单、热点微博,这些都是推荐系统的输出内容。从这些我们就可以总结出,推荐系统到底是做什么的。

  目的1. 帮助用户找到想要的商品(新闻/音乐/……),发掘长尾

  帮用户找到想要的东西,谈何容易。商品茫茫多,甚至是我们自己,也经常点开淘宝,面对眼花缭乱的打折活动不知道要买啥。在经济学中,有一个著名理论叫长尾理论(The Long Tail)。

  

  套用在互联网领域中,指的就是最热的那一小部分资源将得到绝大部分的关注,而剩下的很大一部分资源却鲜少有人问津。这不仅造成了资源利用上的浪费,也让很多口味偏小众的用户无法找到自己感兴趣的内容。

  目的2. 降低信息过载

  互联网时代信息量已然处于爆炸状态,若是将所有内容都放在网站首页上用户是无从阅读的,信息的利用率将会十分低下。因此我们需要推荐系统来帮助用户过滤掉低价值的信息。

  目的3. 提高站点的点击率/转化率

  好的推荐系统能让用户更频繁地访问一个站点,并且总是能为用户找到他想要购买的商品或者阅读的内容。

  目的4. 加深对用户的了解,为用户提供定制化服务

  可以想见,每当系统成功推荐了一个用户感兴趣的内容后,我们对该用户的兴趣爱好等维度上的形象是越来越清晰的。当我们能够精确描绘出每个用户的形象之后,就可以为他们定制一系列服务,让拥有各种需求的用户都能在我们的平台上得到满足。

  ◆ ◆ ◆

  推荐算法

  算法是什么?我们可以把它简化为一个函数。函数接受若干个参数,输出一个返回值。

  

  算法如上图,输入参数是用户和item的各种属性和特征,包括年龄、性别、地域、商品的类别、发布时间等等。经过推荐算法处理后,返回一个按照用户喜好度排序的item列表。

  推荐算法大致可以分为以下几类[1]:

  • 基于流行度的算法

  • 协同过滤算法

  • 基于内容的算法

  • 基于模型的算法

  • 混合算法

  2.1 基于流行度的算法

  基于流行度的算法非常简单粗暴,类似于各大新闻、微博热榜等,根据PV、UV、日均PV或分享率等数据来按某种热度排序来推荐给用户。

  

  这种算法的优点是简单,适用于刚注册的新用户。缺点也很明显,它无法针对用户提供个性化的推荐。基于这种算法也可做一些优化,比如加入用户分群的流行度排序,例如把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。

  2.2 协同过滤算法

  协同过滤算法(Collaborative Filtering, CF)是很常用的一种算法,在很多电商网站上都有用到。CF算法包括基于用户的CF(User-based CF)和基于物品的CF(Item-based CF)。

  基于用户的CF原理如下:

  1. 分析各个用户对item的评价(通过浏览记录、购买记录等);

  2. 依据用户对item的评价计算得出所有用户之间的相似度;

  3. 选出与当前用户最相似的N个用户;

  4. 将这N个用户评价最高并且当前用户又没有浏览过的item推荐给当前用户。

  示意图如下:

  

  基于物品的CF原理大同小异,只是主体在于物品:

  1. 分析各个用户对item的浏览记录。

  2. 依据浏览记录分析得出所有item之间的相似度;

  3. 对于当前用户评价高的item,找出与之相似度最高的N个item;

  4. 将这N个item推荐给用户。

  示意图如下:

  

  举个栗子,基于用户的CF算法大致的计算流程如下:

  首先我们根据网站的记录计算出一个用户与item的关联矩阵,如下:

  

  

  图中,行是不同的用户,列是所有物品,(x, y)的值则是x用户对y物品的评分(喜好程度)。我们可以把每一行视为一个用户对物品偏好的向量,然后计算每两个用户之间的向量距离,这里我们用余弦相似度来算:

  

  然后得出用户向量之间相似度如下,其中值越接近1表示这两个用户越相似:

  最后,我们要为用户1推荐物品,则找出与用户1相似度最高的N名用户(设N=2)评价的物品,去掉用户1评价过的物品,则是推荐结果。

  基于物品的CF计算方式大致相同,只是关联矩阵变为了item和item之间的关系,若用户同时浏览过item1和item2,则(1,1)的值为1,最后计算出所有item之间的关联关系如下:  

  我们可以看到,CF算法确实简单,而且很多时候推荐也是很准确的。然而它也存在一些问题:

  1. 依赖于准确的用户评分;

  2. 在计算的过程中,那些大热的物品会有更大的几率被推荐给用户;

  3. 冷启动问题。当有一名新用户或者新物品进入系统时,推荐将无从依据;

  4. 在一些item生存周期短(如新闻、广告)的系统中,由于更新速度快,大量item不会有用户评分,造成评分矩阵稀疏,不利于这些内容的推荐。

  对于矩阵稀疏的问题,有很多方法来改进CF算法。比如通过矩阵因子分解(如LFM),我们可以把一个nm的矩阵分解为一个nk的矩阵乘以一个k*m的矩阵,如下图:

  

  这里的k可以是用户的特征、兴趣爱好与物品属性的一些联系,通过因子分解,可以找到用户和物品之间的一些潜在关联,从而填补之前矩阵中的缺失值。

  2.3 基于内容的算法

  CF算法看起来很好很强大,通过改进也能克服各种缺点。那么问题来了,假如我是个《指环王》的忠实读者,我买过一本《双塔奇兵》,这时库里新进了第三部:《王者归来》,那么显然我会很感兴趣。然而基于之前的算法,无论是用户评分还是书名的检索都不太好使,于是基于内容的推荐算法呼之欲出。

  举个栗子,现在系统里有一个用户和一条新闻。通过分析用户的行为以及新闻的文本内容,我们提取出数个关键字,如下图:

  

  将这些关键字作为属性,把用户和新闻分解成向量,如下图:

  

  之后再计算向量距离,便可以得出该用户和新闻的相似度了。这种方法很简单,如果在为一名热爱观看英超联赛的足球迷推荐新闻时,新闻里同时存在关键字体育、足球、英超,显然匹配前两个词都不如直接匹配英超来得准确,系统该如何体现出关键词的这种“重要性”呢?这时我们便可以引入词权的概念。在大量的语料库中通过计算(比如典型的TF-IDF算法),我们可以算出新闻中每一个关键词的权重,在计算相似度时引入这个权重的影响,就可以达到更精确的效果。

  sim(user, item) = 文本相似度(user, item) * 词权

  然而,经常接触体育新闻方面数据的同学就会要提出问题了:要是用户的兴趣是足球,而新闻的关键词是德甲、英超,按照上面的文本匹配方法显然无法将他们关联到一起。在此,我们可以引用话题聚类:

  

  利用word2vec一类工具,可以将文本的关键词聚类,然后根据topic将文本向量化。如可以将德甲、英超、西甲聚类到“足球”的topic下,将lv、Gucci聚类到“奢侈品”topic下,再根据topic为文本内容与用户作相似度计算。

  综上,基于内容的推荐算法能够很好地解决冷启动问题,并且也不会囿于热度的限制,因为它是直接基于内容匹配的,而与浏览记录无关。然而它也会存在一些弊端,比如过度专业化(over-specialisation)的问题。这种方法会一直推荐给用户内容密切关联的item,而失去了推荐内容的多样性。

  2.4 基于模型的算法

  基于模型的方法有很多,用到的诸如机器学习的方法也可以很深,这里只简单介绍下比较简单的方法——Logistics回归预测。我们通过分析系统中用户的行为和购买记录等数据,得到如下表:

  

  表中的行是一种物品,x1~xn是影响用户行为的各种特征属性,如用户年龄段、性别、地域、物品的价格、类别等等,y则是用户对于该物品的喜好程度,可以是购买记录、浏览、收藏等等。通过大量这类的数据,我们可以回归拟合出一个函数,计算出x1~xn对应的系数,这即是各特征属性对应的权重,权重值越大则表明该属性对于用户选择商品越重要。

  在拟合函数的时候我们会想到,单一的某种属性和另一种属性可能并不存在强关联。比如,年龄与购买护肤品这个行为并不呈强关联,性别与购买护肤品也不强关联,但当我们把年龄与性别综合在一起考虑时,它们便和购买行为产生了强关联。比如(我只是比如),20~30岁的女性用户更倾向于购买护肤品,这就叫交叉属性。通过反复测试和经验,我们可以调整特征属性的组合,拟合出最准确的回归函数。最后得出的属性权重如下:

  

  基于模型的算法由于快速、准确,适用于实时性比较高的业务如新闻、广告等,而若是需要这种算法达到更好的效果,则需要人工干预反复的进行属性的组合和筛选,也就是常说的Feature Engineering。而由于新闻的时效性,系统也需要反复更新线上的数学模型,以适应变化。

  2.5 混合算法

  现实应用中,其实很少有直接用某种算法来做推荐的系统。在一些大的网站如Netflix,就是融合了数十种算法的推荐系统。我们可以通过给不同算法的结果加权重来综合结果,或者是在不同的计算环节中运用不同的算法来混合,达到更贴合自己业务的目的。

  2.6 结果列表

  在算法最后得出推荐结果之后,我们往往还需要对结果进行处理。比如当推荐的内容里包含敏感词汇、涉及用户隐私的内容等等,就需要系统将其筛除;若数次推荐后用户依然对某个item毫无兴趣,我们就需要将这个item降低权重,调整排序;另外,有时系统还要考虑话题多样性的问题,同样要在不同话题中筛选内容。

  ◆ ◆ ◆

  推荐结果评估

  当推荐算法完成后,怎样来评估这个算法的效果?CTR(点击率)、CVR(转化率)、停留时间等都是很直观的数据。在完成算法后,可以通过线下计算算法的RMSE(均方根误差)或者线上进行ABTest来对比效果。

  ◆ ◆ ◆

  改进策略

  用户画像是最近经常被提及的一个名词,引入用户画像可以为推荐系统带来很多改进的余地,比如:

  1. 打通公司各大业务平台,通过获取其他平台的用户数据,彻底解决冷启动问题;

  2. 在不同设备上同步用户数据,包括QQID、设备号、手机号等;

  3. 丰富用户的人口属性,包括年龄、职业、地域等;

  4. 更完善的用户兴趣状态,方便生成用户标签和匹配内容。

  另外,公司的优势——社交平台也是一个很好利用的地方。利用用户的社交网络,可以很方便地通过用户的好友、兴趣群的成员等更快捷地找到相似用户以及用户可能感兴趣的内容,提高推荐的准确度。

  ◆ ◆ ◆

  总结

  随着大数据和机器学习的火热,推荐系统也将愈发成熟,需要学习的地方还有很多,坑还有很深,希望有志的同学共勉~

再分享一个链接

https://blog.csdn.net/u011095110/article/details/84403564

推荐系统———你的模型确定需要在线infer

https://blog.csdn.net/qq_31405629/article/details/108162476

https://www.cnblogs.com/pinard/p/6349233.html
协同过滤推荐算法总结(刘建平)

5类系统推荐算法,非常好使,非常全相关推荐

  1. 推荐算法(一)--基本介绍

    1. 什么是推荐算法 推荐算法最早在1992年就提出来了,但是火起来实际上是最近这些年的事情,因为互联网的爆发,有了更大的数据量可以供我们使用,推荐算法才有了很大的用武之地. 最开始,所以我们在网上找 ...

  2. 推荐算法——基于用户的协同过滤算法(User-base CF)的java实现

    推荐算法--基于用户的协同过滤算法(User-base CF)的java实现 推荐系统 什么是推荐系统 为什么要有推荐系统 推荐算法 基于用户的协同过滤算法(User-base CF) 算法介绍 代码 ...

  3. 推荐算法工程师的成长之道

    作者 | gongyouliu 来源 | 大数据与人工智能(ID: ai-big-data) 本文,作者会基于自己的实践经验讲述推荐算法工程师的成长之道,这里的"道"有发展路径和道 ...

  4. (附源码)ssm+mysql+基于ssm协同过滤推荐算法的电影院购票系统 毕业设计131124

    基于ssm协同过滤推荐算法的电影院购票系统 摘 要 随着信息技术的飞速发展以及Internet的迅速普及,以Web2.0为代表的互联网技术使得网络数据呈爆炸式增长,越来越多的信息和服务充斥着网络.人们 ...

  5. 分享思路:Python+Spark招聘爬虫可视化系统 招聘数据分析 Hadoop职位可视化 大数据毕业设计 51job数据分析(可选加推荐算法)

    开发技术 Hadoop.HDFS.Spark.SpringBoot.echarts.PySpark.Python.MySQL 创新点 大数据架构.爬虫.数据可视化 啰里啰嗦 适合大数据毕业设计.数据分 ...

  6. 基于推荐算法的电影系统——具体实现(3)

    效果预览 本项目目的是从猫眼读取数据,搭建一个电影网站,向用户推荐可能感兴趣电影. Web管理员后端界面展示 电影推荐系统--用户界面展示 本章介绍具体实现过程. 普通用户 在普通用户网页实现中,重点 ...

  7. 史上最系统的算法与数据结构书籍推荐!!!!!吐血整理!!

    史上最系统的算法与数据结构书籍推荐!!!!!吐血整理!! 史上最系统的算法与数据结构书籍推荐!!!!!吐血整理!! 前言:技术书阅读方法论 一.速读一遍(最好在1~2天内完成) 人的大脑记忆力有限,在 ...

  8. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java基于推荐算法的餐厅点餐系统7czh9

    现在毕设刚开始.时间还有很多,可以从头开始学也可以.毕设其实不难,难的是我们懒散到这种时候再去静下心学.能自己独立完成尽量自己独立完成.相信你看过很多上面回答的,都不建议去某宝.毕竟这一行参差不齐哈. ...

  9. 个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 基于用户/项目的协同过滤推荐算法 混合协同过滤推荐算法 协同过滤混合推荐算法

    个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 一.项目开发技术及功能介绍 1.SSH开发框架(spring+struts+hibernate) 2.js.jquery.bootstrap ...

最新文章

  1. mysql源码安装都能装什么模块_源码安装后,添加其他模块
  2. Android之选项菜单和上下文菜单解析
  3. 使用axios post 提交数据,后台获取不到提交的数据解决方案
  4. [HOW TO]-github/gitee私有项目用户名密码免输入
  5. Tomcat无法shutdown进程问题解决办法
  6. DUMP文件分析4:栈溢出
  7. html加载swf 进度条,教你用FLASH如何制作完整的loading
  8. skia 源码分析_【脚下有根】之Skia库的matrix代码解读
  9. ASP.NET AJAX入门系列(6):UpdateProgress控件简单介绍
  10. 小白都能了解的聚类算法之四(谱聚类)
  11. 国家代码查询(Country codes)
  12. 在线怎么把pdf文件转换成word文件转换器使用
  13. Content has been consumed
  14. 网易游戏AI Lab 招聘CV日常实习生
  15. 计算机操作系统学习(七)作业管理
  16. HomeKit生态设备少?不如来看看Aqara和智汀跨平台互联
  17. 长城会十周年:文厨用故事讲述它的“前世今生”
  18. 模拟摄像头CCD板机揭秘
  19. 香港科大汪校长轻松访谈(2)|与第一代中国基金经理刘央笑看人生(精编版)
  20. 自媒体领域选择大全,自媒体新手参考资料

热门文章

  1. 双系统如何设置一个优先启动系统如开机默认启动win7系统
  2. 微信使用习惯调查简单解读
  3. 线下体验营销为何会成为“新零售”的营销新趋势?
  4. 以太坊源码之--Pow挖矿源码剖析
  5. 【Vue】报错解决方法
  6. BZOJ2713 [Violet 2]愚蠢的副官BZOJ1183 [Croatian2008]Umnozak
  7. (转)不要自称是程序员,我十多年的 IT 职场总结
  8. Python3 编程实例(6 - 10)
  9. 推荐优秀专业的Matlab论坛
  10. DNS区域传输 DNS爆破