(全文共计3667字,阅读全文预计需要10分钟)
为什么我们需要推荐系统?
随着科技的进步、时代的发展,人类面临的主要问题已经从信息资源匮乏转变成信息资源泛滥。信息从未像现在这般触手可及。但伴随而生的问题是,我们很容易就被淹没在信息的汪洋大海里。因此,我们需要某种工具来帮助过滤冗余信息。
一位研究互联网对社会和经济影响的美国作家Clay Shirky (克莱·舍基)曾说过一句话:“人类面临的问题并非信息泛滥,而是信息过滤失效。”推荐系统正是通过创建信息过滤器,为人类提供帮助。推荐系统的作用不可估量,Netflix甚至举办了一场名为Netflix Prize的活动。该公司事先公布了一个包含部分用户信息及用户对某些电影评分信息的数据集,要求参赛者根据该数据集搭建一个推荐系统,预测其他用户对这些电影的评分,比赛获胜者能拿到100万美元的奖金。最终结果公布后,获胜者的算法要比Netflix自家的算法精准10%。
那么推荐算法的魅力究竟是什么呢?于用户而言,推荐系统犹如“智能”过滤器,帮助他们快速找到心仪之物。于企业而言,推荐系统以内容为驱动,为企业创收。
亚马逊、Spotify(目前全球最大的流行音乐服务商)、Instagram(在线图片及视频分享的社交软件)和Netflix等公司都利用推荐系统帮助用户了解自家网站上的种种产品——书籍、电影、电子产品等。推荐系统通过分析个体用户的行为,向用户推荐对他们可能有用的产品,从而创造用户价值。这篇文章以Klipfolio公司(加拿大一家软件生产公司)Hack Day(专属于程序员和软件开发者等互联网工作者的比赛)当天的工作为例,教你如何通过简单五步,就能快速上手搭建推荐系统。
当前的主流推荐系统有哪些?
目前有两种主流的推荐算法能帮助用户有效过滤信息。
第一种是基于物品的协同过滤算法。这种算法首先分析物品的内容属性,然后向用户推荐与他们之前购买的商品相似的物品。如果用户标记电影A为“喜欢”,推荐系统还会向他推荐具有相同属性的其他电影。这些属性可能包含:电影制片人、主演、电影类型、时长、公映日期等。
第二种是基于用户的协同过滤算法,这同第一种算法的推荐原理不同。这种算法首先筛选出具有相同兴趣爱好的用户集,然后向目标用户推荐该用户集喜欢的、且他没有使用过的商品。这种算法的推荐原理基于如下假设:具有相似用户行为的用户一般也有相似的兴趣爱好。
如何快速入门搭建推荐系统?
Klipfolio公司在向用户推荐商品时,使用的是基于用户的协同过滤系统。新手小白在初学搭建推荐系统时,只需要照着这五步走:
一、 收集整理用户和产品的信息
这一步至关重要。我们要了解我们的目标用户以及目标用户正在使用的产品。本文我们将讨论Klipfolio 公司的产品Klip(一款计算机数据管理插件)。这款产品实现了数据可视化,将用户连接到产品上的数据作为驱动。
首先我们需要了解Klip和 Klip的用户属性之间的联系。生产数据库中存放着能够连接用户与用户所使用的产品的数据表。通过基础查询,我们可以抽取这些信息,将其转换为标准(规范)形式并加载到内存表中。与生产数据库相比,通过内存表查询信息更加迅速、便捷。
这一过程通常被简称为ETL(数据仓库技术,即抽取-转换-加载)。
信息收集至关重要,将信息整理成标准表单同样重要。有了标准表单,我们很容易就能对客户及其使用的产品与其他客户及其他产品进行比较。
在该场景下,我们用数据表中的N维行向量来表示每位用户。N 维列向量则与每一个可能出现的插件对应。如果某一用户使用了所在列的插件, 那么会被标记为“已使用”,反之则是“未使用”。这两种结果分别用数值1和0来标记。上述样本数据表示为如下形式:
数据经转换后,下一步便是讨论如何向目标用户推荐Klip插件了。在此我们假设目标用户为用户A。
二、 比较目标用户和其他用户
有了上述标准表单,我们要做的下一步就是添加新功能,比较用户A 和其他用户。该功能能够筛选出与用户A高度相似的用户集以及这些用户使用过的Klip插件。
我们可以利用常规的机器学习库(如Python的scikit-learn)以及邻近算法,分析转换后的数据并计算出用户集。该算法使用了线性代数中最常见的距离度量(如欧几里得),计算一组向量(如上述图表)与单个查询向量(如代表用户A 使用过的Klip的向量)之间的相似性。
有了上述模型,只要我们输入一个具有相同N维属性的查询向量,便能从原始数据集中得到一个与用户A高度相似的用户集。假设用户A 分别使用过“谷歌分析-受众指标”插件与“谷歌分析-竞选漏斗”插件。
上述标准表单中的查询向量与下图类似,可以用作输入以接收用户列表(以其在表中的行号表示)。数值0,1,2分别对应原始数据库中的三位用户Lianne, Luke 和 Alex。
三、 添加新功能,筛选与用户A历史使用产品类似但未被该用户使用的产品
我们已经识别出Lianne, Luke和 Alex三位用户与目标用户的相似度最高,下一步便是计算这三位用户的向量,从而筛选与其他用户历史使用商品类似而用户A未使用的Klip。
运用基础集合论,我们可以得到目标用户A曾使用的Klip集和其他相似用户曾使用的Klip集。如:
在示例数据库中显示如下:这些产品便是算法向目标用户推荐的产品。这种推荐逻辑源于这一事实:目标用户A曾使用过其他相似用户使用过的某一产品, 那么他可能会对他们曾使用的其他产品也有兴趣。
四、 排序与推荐
如果想让目标用户A对新产品感兴趣,那么便要把与用户A相似的用户集曾使用过的产品排在前列,从而提高推荐的准确度。
我们可以将推荐给目标用户A的产品进行排序,从而扩充推荐系统。使用同一产品的相似用户越多,该产品的排序越靠前。背后的推荐逻辑源于:如果与目标用户A相似的众多用户使用该产品,那么目标用户A也有可能使用该产品。
到了这一步,系统便向用户A 推荐在推荐列表中排序靠前的产品。
五、 评估与测试
不要期望推荐系统一次就能生成正确的产品推荐结果。我们要从上述第一步开始,对用户及用户使用的产品不断进行测试,从而提高推荐系统的准确度。
具体来说,我们需要从目标用户中选出一小部分用户作为测试用户,与其余目标用户进行比较。在测试的过程中,首先剔除测试用户曾经使用的一些产品数据,然后重复上述步骤2-5,最后检验系统推荐的产品与之前剔除的产品是否一致。如果推荐系统再次向测试用户推荐了之前被剔除的产品,那么可以说该推荐系统的准确性较高。
示例数据库中一个典型的场景如下图所示:
在这个场景中,我们将在包含用户Lianne, Alex 和Jeremy的数据集的基础上,为用户Luke 和Ali查询推荐结果。如果该推荐系统向测试用户Luke和Ali重新推荐的产品与之前被剔除的产品对应,那么该推荐系统的有效性较高。
小结
概括来说,搭建基于用户的协同过滤推荐系统分五步走:
1. 收集整理系统中每一位用户的产品使用情况,并以标准形式存储收集到的数据,便于后续对不同用户的产品使用情况进行比较。
2. 对比目标用户与与其他用户目前的产品使用情况。运用最近邻算法,计算代表每一用户产品使用情况的向量,从而得出与目标用户相似度最高的推荐模型。
3. 收集与目标用户相似度最高的用户集使用的所有产品,建立产品集;剔除该产品集中用户A正在使用的产品,将该产品集中剩余产品作为推荐产品候选集。
4. 计算推荐产品候选集中不同候选产品出现的频次,并据此排序。产品出现频次越高,排序越靠前。
5. 交叉验证推荐系统。将原始数据随机分为两组,一组做为训练集,一组做为测试集,利用训练集训练分类器,然后利用测试集验证模型,记录最后的分类准确率。
知道了这五步,就找到了快速上手搭建推荐系统的门路。我们要做的下一步便是改进推荐系统,优化网页信息过滤的用户体验,提高该产品的用户留存。
不过,如果觉得上边的方法还是有难度的话,还有一个好办法——找先荐!
先荐是AI明星公司第四范式出品的、 基于“第四范式先知”机器学习平台和其他自主专利研发的、 集内容上传、内容管理、内容分发、推荐干预、前端渲染于一体的一站式推荐服务可视化平台。先荐支持PC、WAP、 APP全平台接入,帮助客户从0到1搭建推荐系统,显著提升用户活跃、留存、观看时长等重要业务指标。当前主要提供以下三种推荐服务:
1、个性化推荐:千人千场千面的推荐,先荐基于机器学习强大的意图识别能力,为每个用户在不同时间不同地点推荐最适合当前场景的内容,常见于网站首页的“推荐”、“猜你喜欢”等模块。
2、关联推荐:基于当前内容的语义分析,推荐与当前内容相似的内容,以提高站内停留时长和人均阅读篇数,常见于内容详情页底部或侧边栏的“相关推荐”模块。
3、热门推荐:基于全站内容的阅读量统计,进行全局、分频道或分地域排行,常见于首页或内容详情页的“热门文章”、“排行榜”等模块。
同时,先荐后台也提供了丰富的推荐配置和数据统计功能,支持客户随时了解推荐状态,精确控制自己的推荐服务。
目前,先荐已服务过近千家客户,已与新华社、人民日报、环球网、钛媒体、虎嗅、亿欧、CSDN等三百余家媒体开展了深入合作,成功地帮客户突破了在内容推荐上的瓶颈。
如有兴趣了解先荐更多内容,欢迎访问www.tuijianxitong.cn