作者:吴健
现在在京东、易迅、亚马逊等看到的主流推荐算法,一般都是基于物品自身相似性(不依赖于用户数据,没有冷启动问题)、基于用户浏览、喜欢、购买等数据的协同过滤推荐(用户纬度和商品纬度)。
其实这些推荐算法的核心思路,是很朴素的。
一、基于物品自身相似度:例如衣服A和衣服B,对于它们在分类、价格段、属性、风格、品牌定位等等其他属性纬度的表现,来计算它们之间的相似度,如果相似度高,那么在有用户浏览A的时候,就可以推荐B(实际当然没这么简单)。因为衣服的这些属性是不依赖于用户的,所以解决了系统的冷启动问题,正是不依赖与用户的行为数据,因此比较死板,完全没有个性化的推荐。这个算法的思路很多人都清楚,但是越是简单的算法,要达到好的效果就越是难,特别是推荐这种转化率非常低的算法。商品有几十个属性,对不同分类的商品,并不是所有的属性都是有必要纳入相似度计算的,已经纳入的属性但是重要性也是有区别的,这样一来,光光给不同类别商品筛选必要属性以及设置这些属性在相似度计算中的权重值,就是一项非常浩大的工程了。亚马逊的推荐系统在全球行业中也是最早的,相信他们在这个问题上肯定有自己一套迅速有效的方法。当然要我来说具体是怎么样的,我怎么可能知道呢^_^,知道了也不告诉你。
二、基于用户纬度的协同过滤:采集用户的购买(浏览、收藏都行)商品数据,把用户购买的商品列出来,当作用户的属性纬度。例如用户A购买了商品1、2、3、4、5,用户B购买了商品1、2、5、6,那么可以简单的将12345和1256分别作为A和B的属性特征字符串,计算A和B的相似度,经过简单的聚类将用户聚成几个类别(邻居)。假设A和B同属于一个聚类,那么可以称A和B有比较相似的偏好,继而可以将A买过而B没买过的其他商品推荐给B。在这一个流程里,可以发挥的地方有很多:1、用户的行为数据需要去噪音(买了多少商品以下的用户不考虑,有代购的不考虑,如何精准的判断代购,商品时效性的考虑,数据的时间跨度等等);2、计算相似度的时候跟第一点中提到的一样,并不是所有商品对用户的描述度都是一样的。可能价格低的重要程度就没有昂贵的商品重要。3、通过聚类计算邻居的时候,聚类算法又是另一门学科了,或者选择分类算法。然后聚类的门槛选择都是需要很长时间的测试、观察、修改的,需要时间的积累。4、浏览、购买、收藏等历史数据是不是可以协同过滤。现在很多网站给出的推荐,都不是单一推荐算法的,一个算法的输出可以作为另一个算法的输入,可以是多个算法的输出综合筛选,这也是一个需要长时间积累的地方。
三、基于物品纬度的协同过滤:其实我觉得是和第二点很相似,就是将用户作为商品的属性纬度来看。例如商品A被用户1,2,3,4,5,6购买过,商品B被用户1,3,4,5,7购买过,那么将123456作为商品A的特征属性数据,13457作为商品B的特征数据,然后计算商品A和B的相似度(这里的相似度却别于第一点提到的相似度,似乎叫“相似度”不是很合适)。因为我们有理由认为同一个人群买了A,又买了B,那么A和B一定有某种关联。在这个流程里面可以发挥的地方基本和第二点中提到的差不多。
四、强关联规则的应用:重点是同一次购买记录(当然也不是必然的,看自己的选择)。首先收集数据就需要把一单购买一种商品的过滤掉。然后一次对每一条记录中进行成对提取统计,简单的就是两两统计次数,这种提取出来的都是两个商品被同时购买的次数,适用于一对一推荐。还有一种是通过FPTree算法(似乎是这个名字吧,因为我们公司是一对一的需求,所以这个算法我没怎么研究,是我自己写的两两统计),不光是一对一推荐,可以一对二,二对一。在这个流程里面,关联规则(关联规则_百度百科)挖掘算法非常重要,其中置信度和支持度也是需要不断调整的地方。
五、所有推荐系统之间的数据共享、数据的定时自动更新、自动学习。
总的来说,推荐算法大部分都是很朴素的,但是需要运用的好,没有长时间的积累是做不到的。仅仅是聘请一些算法工程师,运用一些算法框架,想取得好的推荐效果,基本是不可能的。只有算法与具体业务相结合才能产生化学反应。