协同推荐算法

  • 2017-02-15 10:56:31
  • 2072
  • 0

协同推荐算法有两种:1、基于用户的协同推荐  2、基于商品的协同推荐。

一、基于用户的协同推荐

​鉴于它只是一个算法、思想而非一门具体的技术或者编程语言, 所以可跳过定义部分,直接进入分析理解阶段。

​1、应用场景:通过分析大量的订单数据, 给每个用户推荐其最有可能购买的商品。

​2、基本原理:购买行为越相似的顾客购买对方已购买商品的可能性越高。

​3、分析理解:

​      基于用户:即通过研究用户的购买行为,可以得出用户之间的相似度(因为购买行为越接近的用户相似度越高);即基于用户相似度的意思。

​      协同推荐:即结合一个用户的所有相似用户共同推荐出最有可能购买的产品。 通过结合相似用户的相似度以及已购买的次数, 计算出用户购买相似用户已购买,但自身未购买的产品可能值,从中取购买可能值(简称购买值)排最前面的那些商品即可。

​4、实现方案:

​     1、计算用户相似度:  可利用python的内置模块:difflib。

     2、计算商品购买值,并按购买值排序:

          a、单个商品购买值的计算公式(在不考虑购买先后次序):相似度*被购买过的次数。

​          b、根据购买值排序:可利用python 内置模块sorted即可。

​5、核心功能代码:

计算用户相似度:
import difflib def calc_simirity_of_lists(a, b): """ 计算两个list的相似度 """ matcher = difflib.SequenceMatcher(None, a, b) simrity = round(matcher.ratio(), 3) return simrity 方法中:a,b为列表,分别为a、b用户的所有购买过的产品。
获取购买值最靠前的产品数据:
def get_tops_from_dlist(_list, topnum):
    """
    从字典列表中获取排在最前指定数量产品数据
    """
    return sorted(_list, key=lambda x: x['rec_value'],
                  reverse=True)[:topnum]
_list指一些列产品以及对应购买值(rec_value)

 

二、基于商品的协同推荐

​此推荐方式相对来说更好理解些。

1、应用场景:通过分析大量的订单数据, 给每个商品计算与之最有可能一起购买的商品。

​2、基本原理:经常存在同一个订单中的N(N>1)个商品,其商品之间的关联度也就更高,被一起购买的可能性也就更大。

3、分析理解:

      基于商品:即通过研究多商品的订单情况,可以得出商品之间的关联度;即基于商品关联度的意思。

​      协同推荐:即结合一个商品的所有关联商品共同推荐出最有可能一起购买的产品。 通过结合所有关联商品的关联度,计算出一个关联度综合值,从关联度综合值中取最前的那些产品即可。

​4、实现方案:

​     ​1、关联度的计算:这方面除了考虑关联商品同时存在同一张订单的次数,还应考虑特别流行产品的干扰,一些卖的好的产品几乎与每个商品的关联度值都很高,这样一样推荐就意义不大了。因此,关联度公司的计算须把流行度也考虑进去。公式(基于余弦相似定理):假设a、b存在同一订单的次数为n,a、b的流行度分别为p1, p2, 则a, b的关联度为:n/sqrt(p1*p2)

     2、排序:参考上面。

​注:考虑到用户或商品数量太多, 内存与时间的消耗是非常巨大的。建议边计算边存入数据库中,如mangodb, 既节省内存使用、方便后续进一步统计也可以保证插入效率,另外有有条件可以使用hadoop来提高计算效率。


发表评论

* *