代码详解:创建一个百分百懂你的产品推荐系统


640?wx_fmt=jpeg


全文共10848字,预计学习时长21分钟或更长


640?wx_fmt=png
图片来源:Unsplash/Susan Yin


你也许每天都会逛一逛电子商务网站,或者从博客、新闻和媒体出版物上阅读大量文章。


浏览这些东西的时候,最令读者或者用户烦恼的事情是什么呢?


——有太多的东西可以看,反而会经常看不到自己正在搜索的东西。


是的,网上有太多的信息和文章,用户需要一种方式来简化他们的发现之旅。


如果你在经营一家电子商务网站或博客,你也许会问:有这个必要吗?


嗯……你听过漏斗吗?


用户所用的漏斗越小,产品的转换就越大。这是用户体验的基本原则。所以,如果减少步骤的数量可以增加网站页面的浏览量甚至是收入,为什么不这么做呢?


640?wx_fmt=jpeg

推荐系统如何提供帮助?


简单来说,推荐系统就是一个发现系统,该系统可通过分析数据向用户提供推荐。不需要用户去专门搜索,系统自动带来推荐商品。


这听起来像是魔法。


亚马逊和Netflix几十年前就开始使用这种魔法了。


一打开Spotify,它就已经为用户提供了一个推荐歌单(这种深度个性化推荐服务叫作Discover Weekly)。


640?wx_fmt=png
图片来源:Unsplash/Samuel Zeller


640?wx_fmt=jpeg

深入了解推荐系统


一般来说,我们所知的推荐系统有两种——当然并不是所有的人都知道。


1. 基于内容的推荐系统


这类推荐系统很容易被我们的大脑消化,而且不会出现短路或爆炸的迹象。


例如,你是一个狂热的小说迷,喜欢阿加莎·克里斯蒂的《无人生还》,并从网上书店买了这本书。


那么,当你下次再打开网站时,网上书店就会给你推荐《ABC谋杀案》。


为什么呢?


因为它们都是阿加莎·克里斯蒂的作品。


因此,基于内容的推荐模型会向你推荐这本书。


就是这么简单!那就来用一用吧!


等等……


虽然这种基于内容的推荐很容易被我们的大脑消化,看起来也很简单,但它无法预测用户的真实行为。


例如,你不喜欢侦探赫丘里·波罗,但喜欢阿加莎·克里斯蒂小说中的其他侦探。在这种情况下,网站就不应该向你推荐《ABC谋杀案》。


2. 协同过滤推荐系统


这种类型的推荐系统克服了上面的问题。本质上,该系统记录了用户在网站上的所有交互,并基于这些记录提出建议。


它是什么原理呢?


请看下面的场景:


这里有两个用户,用户A和用户B。


用户A购买了商品1


用户A购买了商品2


用户A购买了商品3


用户B购买了商品1


用户B购买了商品3


那么协同过滤系统将会向用户B推荐商品2,因为有另外一个用户也购买了商品1和商品3,同时还购买了商品2。


你也许会说,得了吧,他们可能是偶然才一起买了那些巧合的商品。


但是,如果有100个用户都与用户A有相同的购买行为呢?


这就是所谓的群众的力量。


那么,你还在等什么呢?让我们开始在你的生产环境中创建协同过滤推荐系统吧!

等等,先别着急!


虽然这个系统性能极佳,但在尝试创建可用于生产的系统时,它还存在几个严重问题。


640?wx_fmt=jpeg

协同过滤推荐系统的不足


1. 它不知道用户的购物习惯。基于内容的推荐系统会根据用户的购物记录推荐相似商品,与此相反,协同过滤推荐系统的推荐并不是基于相似性。如果你关心这一问题的话,解决方案就是将两种方法混合起来,结合使用。


2. 因为需要存储用户项矩阵,所以系统需要大量的硬件资源。假设你的电子商务网站有10万用户;与此同时,你的网站提供1万种产品。在这种情况下,你将需要10000 x 100000的矩阵,每个元素包含4个字节的整数。是的,光是存储矩阵,不做其他事,你就需要4GB的内存。


3. “冷启动”(冰冷的开始),该系统并不会为新用户带来好处,因为系统并不了解新用户。


4. 不变性。如果用户没有在网站上进行搜索或购物,系统的推荐将一成不变。于是用户就会认为网站上没有什么新鲜东西,从而退出网站。


通过混合使用两种推荐系统可以轻易解决第1个问题,然而,其他问题仍然令人头痛。


本文的目的就是解决第2、第3和第4个问题。


让我们开始吧!


640?wx_fmt=jpeg

使推荐系统可用于生产的终极指南


如何解决这些问题?机器本身存在限制,而且就算是根据常识,也不可能仅为小小的需求就部署一个巨大的服务器。


推荐下面这本书:


640?wx_fmt=png
Ted Dunning 和Ellen Friedman的《实用性机器学习》


这本书告诉我们,对于一个可用于生产的系统,你不需要指望它在任何方面都具备最高精度。


在实际的用例中,一个有些不准确但又可以接受的方法,通常是最有效的。


关于如何做到这一点,最有趣的部分是:


1. 对通用推荐指标进行批量计算。


2. 实时查询,不使用用户-商品矩阵,而是获取用户的最新交互并向系统查询。

下面我们边构建系统边解释。


640?wx_fmt=jpeg

Python的推荐系统


为什么选择python? 因为python的语言简单易学,只需要几个小时就能理解它的语法。


 
   
for item in the_bag:
    print(item)


通过上面代码,你可以打印包里的所有项。


请访问Python官网(https://www.python.org/downloads/),根据操作系统下载并安装相应安装包。


本教程需要用到以下几个安装包。


pip install numpy

pip install scipy

pip install pandas

pip install jupyter

pip install requests


Numpy和Scipy是处理数学计算的python包,建构矩阵时需要用到它们。Pandas 用于数据处理。Requests用于http调用。Jupyter是一个可以交互运行python代码的网络应用程序。


输入Jupyter Notebook,你会看到如下界面


640?wx_fmt=png


在提供的单元格上编写代码,代码将以交互方式运行。


开始之前需要几个工具。


1. Elasticsearch(弹性搜索)。这是一个开源搜索引擎,可以帮助快速搜索到文档。这个工具可用于保存计算指标,以便实时查询。


2. Postman。这是一个API开发工具,可用来模拟弹性搜索中的查询,因为弹性搜索可以通过http访问。


下载并安装这两个工具,接着就可以开始了。


数据


先来看看Kaggle中的数据集:电子商务网站行为数据集(http://www.baidu.com/link?url=-uZgHHgYJmRlBX5WL_ufkLSb0S5eXU0j43iPMLh3XNtXbLq5uNoqe3Oje7AUt0PK)。下载并提取Jupyter 笔记本目录中的数据。


640?wx_fmt=png


在这些文件中,本教程只需要用到events.csv。


该文件由用户对电子商务网站上

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值