写在正文之前
近期在做推荐系统,在项目组内做了一个分享。今天有些时间。就将逻辑梳理一遍,将ppt内容用文字沉淀下来,便于接下来对推荐系统的进一步研究。推荐系统确实是极度复杂,要走的路还非常长。
A First Glance
为什么须要推荐系统——信息过载
随着互联网行业的井喷式发展,获取信息的方式越来越多,人们从主动获取信息逐渐变成了被动接受信息,信息量也在以几何倍数式爆发增长。
举一个样例,PC时代用google reader,经常有上千条未读博客更新;现在的微信公众号,也有大量的红点未阅读。垃圾信息越来越多,导致用户获取有价值信息的成本大大添加。为了解决问题,我个人就採取了比較极端的做法:直接忽略全部推送消息的入口。但在非常多时候,有效信息的获取速度极其重要。
因为信息的爆炸式增长,对信息获取的有效性,针对性的需求也就自然出现了。
推荐系统应运而生。
亚马逊的推荐系统
最早的推荐系统应该是亚马逊为了提升长尾货物的用户抵达率而发明的。
已经有数据证明。长尾商品的销售额以及利润总和与热门商品是基本持平的。
亚马逊站点上在线销售的商品何止百万。但首页可以展示的商品数量又极其有限,给用户推荐他们可能喜欢的商品就成了一件很重要的事情。当然,商品搜索也是一块大蛋糕。亚马逊的商品搜索早已经開始侵蚀谷歌的核心业务了。
在亚马逊的商品展示页面,常常可以看见:浏览此商品的顾客也同一时候浏览。
这就是很典型的推荐系统。
八卦一下:”剁手族”的兴起。与推荐系统应该有一定关系吧,哈哈。
推荐系统与大数据
大数据与云计算,在当下很热门。
无论是业内同事还是其它行业的朋友,大数据都是一个常谈的话题。
就像青少年时期热门的话题:“性”。大家都不太懂,但大家都想说上几句。业内对于大数据的使用事实上还处于一个比較原始的探索阶段,前段时间听一家基因公司的CEO说,如今能够将人类的基因全然导出为数据,但这些数据毫无规律。能拿到这些数据,但根本不知道能够干什么。推荐系统也是利用用户数据来发现规律,相对来说開始得更早,运用上也比較成熟。
冷启动问题
推荐系统须要数据作为支撑。但亚马逊在刚刚開始做推荐的时候,是没有大量且有效的用户行为数据的。这时候就会面临着“冷启动”的问题。
没实用户行为数据,就利用商品本身的内容数据。这就是推荐系统早期的做法。
基于内容的推荐:
-
tag 给商品打上各种tag:运动商品类,高速消费品类,等等。
粒度划分越细。推荐结果就越精确
-
商品名称,描写叙述的keyword 通过从商品的文本描写叙述信息中提取keyword,从而利用keyword的相似来作推荐
-
同商家的不同商品 用户购买了商店的一件商品,就推荐这个商店的其它热销商品
-
利用经验,人为地做一些关联 一个经典的样例就是商店在啤酒架旁边摆上纸尿布。那么。在网上购买啤酒的人,也能够推荐纸尿布?
因为内容的极度复杂性。这一块儿的规则能够无限拓展。
基于内容的推荐与用户行为数据没有关系,在亚马逊早期是比較靠谱的策略。但正是因为内容的复杂性,也会出现非常多错误的推荐。比方:小明在网上搜索过保时捷汽车模型。
然后推荐系统依据keyword,给小明推荐了价值200万的保时捷911......
用户行为数据—究竟在记录什么
在游戏里面。我们的人物角色是一堆复杂的数据,这叫做数据存储;这些数据以一定的结构组合起来,这叫做数据结构。相同地。在亚马逊眼里。我们就是一张张表格中一大堆纷繁复杂的数字。举一个栗子:
小明早上9点打开了亚马逊,先是浏览了首页。点击了几个热销的西装链接,然后在搜索栏输入了nike篮球鞋,在浏览了8双球鞋后,看了一些购买者的评价,终于选定了air jordan的最新款。
这就是一条典型的用户行为数据。亚马逊会将这条行为拆分成设定好的数据块,再以一定的数据结构。存储到亚马逊的用户行为数据仓库中。每天都有大量的用户在产生这种行为数据,数据量越多,能够做的事情也就越强大。
user-item 用户偏好矩阵
收集数据是为了分析用户的偏好,形成用户偏好矩阵。比方在网购过程中。用户发生了查看,购买,分享商品的行为。这些行为是多样的。所以须要一定的加权算法来计算出用户对某一商品的偏好程度,形成user-item用户偏好矩阵。
数据清理
当我们開始有意识地记录用户行为数据后。得到的用户数据会逐渐地爆发式增长。
就像录音时存在的噪音一样,获取的用户数据相同存在着大量的垃圾信息。
因此。拿到数据的第一步。就是对数据做清理。
当中最核心的工作。就是减噪和归一化:
减噪:用户行为数据是在用户的使用过程中产生的,当中包括了大量的噪音和用户误操作。
比方由于网络中断,用户在短时间内产生了大量点击的操作。通过一些策略以及数据挖掘算法。来去除数据中的噪音。
归一化:清理数据的目的是为了通过对不同行为进行加权。形成合理的用户偏好矩阵。用户会产生多种行为,不同行为的取值范围差距可能会很大。比方:点击次数可能远远大于购买次数,直接套用加权算法,可能会使得点击次数对结果的影响程度过大。于是就须要归一算法来保证不同行为的取值范围大概一致。
最简单的归一算法就是将各类数据来除以此类数据中的最大值,以此来保证全部数据的取值范围都在[0,1]区间内。
降维算法——SVD神秘值分解
通过记录用户行为数据。我们得到了一个巨大的用户偏好矩阵。随着物品数量的增多,这个矩阵的列数在不断增长。但对单个用户来说。有过行为数据的物品数量是相当有限的,这就造成了这个巨大的用户偏好矩阵实际上相当稀疏,有效的数据事实上非常少。SVD算法就是为了解决问题发明的。
将大量的物品提取特征,抽象成了3大类:蔬菜,水果,休闲服。这样就将稀疏的矩阵缩小,极大的降低了计算量。但这个样例不过为了说明SVD神秘值分解的原理。
真正的计算实施中,不会有人为的提取特征的过程,而是全然通过数学方法进行抽象降维的。通过对矩阵相乘不断的拟合,參数调整,将原来巨大的稀疏的矩阵,分解为不同的矩阵。使其相乘能够得到原来的矩阵。这样既能够降低计算量,又能够填充上述矩阵中空值的部分。
协同过滤算法
我一直在强调用户行为数据。目的就是为介绍协同过滤算法做铺垫。协同过滤,Collaborative Filtering。简称CF,广泛应用于现在的推荐系统中。通过协同过滤算法,能够算出两个相似度:user-user相似度矩阵; item-item相似度矩阵。
为什么叫做协同过滤?是由于这两个相似度矩阵是通过对方来计算出来的。举个栗子:100个用户同一时候购买了两种物品A和B,得出在item-item相似度矩阵中A和B的相似度为0.8; 1000个物品同一时候被用户C和用户D购买,得出在user-user相似度矩阵中C和D的相似度是0.9. user-user, item-item的相似度都是通过用户行为数据来计算出来的。
计算相似度的详细算法,大概有几种:欧几里得距离,皮尔逊相关系数。Cosine相似度。Tanimoto系数。
详细的算法,有兴趣的同学能够google.
用户画像
提到大数据,不能不说用户画像。
常常看到有公司这样宣传:“掌握了千万用户的行为数据,描绘出了极其有价值的用户画像。能够为每一个app提供精准的用户数据,助力app推广。” 这种营销广告经不起半点推敲。用户对每一个种类的app的行为都不同,得到的行为数据彼此之间区别非常大,比方用户在电商站点上的行为数据,对音乐类app基本没有什么价值。
推荐系统的难点,当中非常大一部分就在于用户画像的积累过程极其艰难。简言之,就是用户画像与业务本身密切相关。
LR逻辑回归
基于用户偏好矩阵,发展出了非常多机器学习算法,在这里再介绍一下LR的思想。
详细的逻辑回归。又分为线性和非线性的。其它的机器学习算法还有:K均值聚类算法,Canopy聚类算法,等等。
有兴趣的同学能够看看July的文章。链接在最后的阅读原文。
LR逻辑回归分为三个步骤:
-
提取特征值
-
通过用户偏好矩阵。不断拟合计算。得到每一个特征值的权重
-
预測新用户对物品的喜好程度
举个栗子:
小明相亲了上千次,我们收集了大量的行为数据,下面数据不过冰山一角。
通过大量的拟合计算得出,特征值“个性开朗程度”的权重为30%。“颜值”的权重为70%。哎,对这个看脸的世界已经绝望了,写完这篇文章。就去订前往韩国的机票吧。
然后,通过拟合出的权重,来预測小明对第一千零一次相亲对象的喜爱程度。
这就是LR逻辑回归的原理。详细的数学算法。有兴趣的同学能够google之。
怎样利用推荐系统赚钱
还是以亚马逊为例。小明是个篮球迷,每一个月都会买好几双篮球鞋。
通过几个月的购买记录,亚马逊已经知道小明的偏好,准备给小明推荐篮球鞋。但篮球鞋品牌这么多,推荐哪一个呢?笑着说:哪个品牌给我钱多,就推荐哪个品牌。这就是最简单的流量生意了。这些都叫做:商业规则。
但在增加商业规则之前,须要让用户感知到推荐的准确率。
假设一開始就强推某些置顶的VIP资源,会极大地损害用户体验。让用户认为推荐全然没有准确性。
这种后果对于推荐系统的持续性发展是毁灭性的。
过滤规则
协同过滤仅仅是单纯地依赖用户行为数据,在真正的推荐系统中,还须要考虑到非常多业务方面的因素。以音乐类app为例。
周杰伦出了一张新专辑A,大部分年轻人都会去点击收听,这样会导致其它每一张专辑相似专辑中都会出现专辑A。
这个时候,再给用户推荐这种热门专辑就没有意义了。所以,过滤掉热门的物品,是推荐系统的常见做法之中的一个。
这种规则还有非常多,视不同的业务场景而定。
推荐的多样性
与推荐的准确性有些相悖的,是推荐的多样性。
比方说推荐音乐。假设全然依照用户行为数据进行推荐,就会使得推荐结果的候选集永远仅仅在一个比較小的范围内:听小清新音乐的人,永远也不会被推荐摇滚乐。
这是一个非常复杂的问题。在保证推荐结果准确的前提下。依照一定的策略。去逐渐拓宽推荐结果的范围,给予推荐结果一定的多样性。这样才不会腻嘛。
持续改进
推荐系统具有高度复杂性,须要持续地进行改进。
可能在同一时间内,须要上线不同的推荐算法,做A/B test。依据用户对推荐结果的行为数据。不断对算法进行优化,改进。要走的路还非常长:路漫漫其修远兮,吾将上下而求索。
本文章欢迎转载,转载请注明微信公众号和作者。微信公众号:互联网与作曲家. 作者:neil 版权全部,翻版必究!