1.用户行为分类
根据用户操作的复杂度,将用户的操作分为四类;
- 一类:查看、停留、投票、评论、收藏、关注;
- 二类:转发;
- 三类:加入购物车:
- 四类:购买;
2.类别权重
- 一类:10%
- 二类:20%
- 三类:30%
- 四类:40%
3.创建原始数据表
/*Table structure for table `user_product_base` */
DROP TABLE IF EXISTS `user_product_base`;
CREATE TABLE `user_product_base` (
`user_id` varchar(50) DEFAULT NULL COMMENT '用户编号',
`pid` varchar(50) DEFAULT NULL COMMENT '商品编号',
`op_type` int(11) DEFAULT NULL COMMENT '操作类型(0 评分,1投票,2转发,3收藏,4关注,5评论,6查看,7加购物车,8购买,9停留)',
`op_num` int(11) DEFAULT NULL COMMENT '操作次数'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*Data for the table `user_product_base` */
- 数据表
user_id(用户编号) | pid(商品编号) | op_type(操作类型) | op_num(操作次数) |
---|---|---|---|
‘1’ | ‘10010’ | 1 | 3 |
‘1’ | ‘10010’ | 2 | 1 |
… | … | … | … |
- 操作类型对应表,这个在下面计算评分时会用到
op_type(行为类型) | 行为名称 | 行为权重 |
---|---|---|
0 | 评分 | 0.1 |
1 | 投票 | 0.1 |
2 | 转发 | 0.2 |
3 | 收藏 | 0.1 |
4 | 关注 | 0.1 |
5 | 评论 | 0.1 |
6 | 浏览 | 0.1 |
7 | 加购物车 | 0.3 |
8 | 购买 | 0.4 |
9 | 停留 | 0.1 |
4.计算评分
SELECT user_id,pid,SUM(CASE
WHEN op_type = 0 THEN op_num * 0.1 #0评分 op_num 取值范围【1-5】 五颗星 属于一类
WHEN op_type = 1 THEN op_num * 0.1 #0投票 op_num 取值范围【0-1】 是否投票 属于一类
WHEN op_type = 2 THEN op_num * 0.2 #0转发 op_num 取值范围【0-1】 是否转发 属于二类
WHEN op_type = 3 THEN op_num * 0.1 #0收藏 op_num 取值范围【0-1】 是否收藏 属于一类
WHEN op_type = 4 THEN op_num * 0.1 #0关注 op_num 取值范围【0-1】 是否关注 属于一类
WHEN op_type = 5 THEN op_num * 0.2 #0评论 op_num 取值范围【0-1】 好评1差评0 属于二类
WHEN op_type = 6 THEN op_num * 0.1 #0查看 op_num 取值范围【0-n】 次数 属于一类
WHEN op_type = 7 THEN op_num * 0.3 #0加购车 op_num 取值范围【0-1】 是否加入 属于三类
WHEN op_type = 8 THEN op_num * 0.4 #0购买 op_num 取值范围【0-1】 是否购买 属于四类
WHEN op_type = 9 THEN op_num * 0.1 #0停留 op_num 取值范围【0-n】 停留秒 属于一类
ELSE 0 END) AS score
FROM user_product_base GROUP BY user_id,pid
5.初召回
有了user_id
,pid
,score
就可愉快的用协同过滤算法召回了。