03 August 2013
2013-08-13-浏览到购买思想

浏览到购买,购买还浏览,浏览还浏览,购买还购买 在一个算法中实现

author: xiajun

常规实现:

1.浏览到浏览常规做法是将浏览的商品使用itemBase 进行矩阵计算得出商品到商品的相似度
2.购买还购买的得常规做法是将购买商品进行itembase 矩阵计算

想法:

1.将用户购买的商品和浏览的商品放在一起计算矩阵

user c_item c_item c_item b_item item
张三 c_1001 c_1007 c_1008 b_1005 ...
李四 c_1006 c_1008 c_1001 b_1007 ...

实现:

1.将用户的点击行为和购买行为进行区分
2.将点击和购买数据进行糅合并使用mahout itembase进行矩阵计算
(示例数据非计算所得)

c_1001 c_1005 c_1006 c_1007 c_1008 b_1005 b_1007
c_1001 NAN 0.1 0 0.3 0 0.2 0.1
c_1005 0.03 NAN 0.2 0.12 0.004 0 0
c_1006 0.2 0.3 NAN 0 0.4 0.1 0.23
c_1007 0.4 0 0.11 NAN 0.02 0.32 0.01
c_1008 0.14 0.31 0 0.3 NAN 0.2 0.15
b_1005 0 0.13 0 0.23 0.2 NAN 0.01
b_1007 0.21 0.1 0.4 0.3 0 0.2 NAN

3.根据以上结果可以看出

c1001和 c1005,c1007,b1005,b1007有相似度
分解结果:
[c
1001:{c1005:0.1},{c1007:0.3}] 就是浏览到浏览的结果
[c_1001:{b1005:0.2},{b1007:0.1}] 就是浏览的购买的结果

b1005和 c1005,c1007,c1008,b1007有相似度
分解结果:
[b
1005:{c1005:0.13},{c1007:0.23},{c_1008:0.2}] 购买到浏览的结果
[b1005:{b1007:0.01}] 购买还购买结果

根据以上分析就可以得到四种结果

优化:

上面方法其实有很多不足的地方:
1.当浏览数据过大并且很稀疏时会严重影响矩阵结果
2.当很多用户只浏览不购买这时浏览到购买的结果就不好
3.由于浏览数据比购买数据大很多所以购买到购买严重受影响

当浏览数据比较稀疏时可以用SVD降维处理或者限制每个用户最大使用多少个浏览记录
用户只浏览不购买可以将这部分用户剔除不过这样做会影响浏览到浏览的结果需要权衡
购买到购买受到影响的主要原因在于mahout itembase 在计算矩阵后需要输出指定个数的结果 比如 为一个
商品返回20个相似商品 很可能这20个都是购买到浏览的结果 购买到购买被远远排在了后面所以这时只能调大输出
结果数但这样无形中加大了矩阵的大小所以还的根据具体业务去权衡



blog comments powered by Disqus