推荐算法 - 初步分析(新人心得)

起因:

小编近期看了 58沈剑 的架构师之路,在里边,小编看到了一篇关于商城里边的推荐算法,深有感触,但里边没有详细讲解,所以小编就自己琢磨,最近有点研究成果,所以拿来和大家分享,共同学习,一起进步~

什么是推荐算法:

小编觉得,这个算法就是让用户进入商城的时候,能推荐出用户心仪的商品给用户,增加用户的购买率,如一些商城首页里边的猜你喜欢模块,用户购买成功之后的一些推荐商品等等。为什么我们需要推荐这些呢?因为身为客户的我们都知道,以下原因的商品,我们是不会去考虑的:

1、超出自己经济范围

2、不是自己喜欢的

所以,如果出现的是这些用户不需要的商品信息,会浪费用户的时间,甚至与丧失一批用户,所以,我们就需要推荐算法,推出用户比较有意向的商品,增加用户的购买率。

如何实现推荐算法呢?

1、我们需要实现推荐算法,那我们就需要去分析用户的行为,这里我建立了三张表,来收集用户的行为:

// 用户购买商品记录表
CREATE TABLE `user_purchase` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` int(11) NOT NULL COMMENT '用户ID',
  `gtype_id` int(11) NOT NULL COMMENT '商品类型ID',
  `goods_id` int(11) NOT NULL COMMENT '商品ID',
  `goods_spec_id` int(11) NOT NULL COMMENT '商品规格ID',
  `price` decimal(11,0) NOT NULL COMMENT '购买单价',
  `num` int(11) NOT NULL COMMENT '购买数量',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户购买商品记录表';

// 用户商品评价记录表
CREATE TABLE `user_evaluate` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` int(11) NOT NULL COMMENT '用户ID',
  `gtype_id` int(11) NOT NULL COMMENT '商品类型ID',
  `goods_id` int(11) NOT NULL COMMENT '商品ID',
  `goods_spec_id` int(11) NOT NULL COMMENT '商品规格ID',
  `score` tinyint(2) NOT NULL DEFAULT '1' COMMENT '分数,默认1差评,2中评,3好评',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户商品评价记录表';

// 用户收藏记录表
CREATE TABLE `user_coll` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` int(11) NOT NULL COMMENT '用户ID',
  `gtype_id` int(11) NOT NULL COMMENT '商品类型ID',
  `goods_id` int(11) NOT NULL COMMENT '商品ID',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户收藏记录表';

2、有了上面的三个表之后,我们还需要两个表来保存我们的分析记录:

// 用户商品类型购买分值表
CREATE TABLE `user_buy_analysis` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` int(11) NOT NULL COMMENT '用户ID',
  `gtype_id` int(11) NOT NULL COMMENT '商品类型ID',
  `score` int(11) NOT NULL COMMENT '当前分数值(用于排序)',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户商品类型购买分值表';

// 用户消费水平表
CREATE TABLE `user_consumption_analysis` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` int(11) NOT NULL COMMENT '用户ID',
  `min_money` decimal(11,2) NOT NULL COMMENT '消费最低金额',
  `average_money` decimal(11,2) NOT NULL COMMENT '平均消费金额',
  `max_money` decimal(11,2) NOT NULL COMMENT '消费最高金额',
`money` decimal(11,2) NOT NULL COMMENT '消费总金额', `price_range`
varchar(2000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户消费的价格区间(排序完成)', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户消费水平表';

现在,我们已经拥有了两个统计表,来统计用户商品购买分值(user_buy_analysis)表,用户消费水平表(user_consumption_analysis)

3、接下来,我们需要做的事情就是如何给用户购买的商品类型打分,还有,我们需要如何记录用户的消费水平:

3.1、给用户购买的商品类型打分:

需要给商品类型打分,我们就需要有一个加减分算法,这里我举个示例:收藏+2,购买+5,好评+10,中评+2,差评-20,看到这里有人会问为什么购买+好评都比不上差评的分数,小编觉得这样可以防止商户的刷单行为,差评可以让商铺保证商品的发货、售后等服务质量。这些都是根据个人的业务需求来设计。

3.2、记录用户的消费水平:

我们根据用户每次的消费记录,来计算用户的消费水平,这里边,我们需要注意的是:平均消费水平、消费价格区间两个字段。

平均消费水平:是每次购买商品单价的平均数,因为我们购买一件商品,我们根据单价来决定是否购买,是比较多的。

价格消费区间:则是根据最高消费,和最低消费,生成一定间隔的区间,如:0-50,50-100,100-150,我们需要对我们这些区间进行统计,我们采用的格式:{健值:数量},并倒序排序,最后的格式为:

1 {
2 
3   '100-150': 10,
4 
5   '0-50': 5,
6 
7   '50-100': 3
8 
9 }

由步骤3,我们便可以得到用户购买商品类型的打分和用户的平均消费水平,和前三名的消费区间。这样我们就可以根据这些条件,对于商品进行筛选,得出的是比较符合客户心意的商品数据了。

// 示例:

/* 场景一:用户A(user_id:234)花了53元购买了一件男衣类型(gtype_id:1)的长袖衣服(goods_id:1),并收藏了,收到衣服之后,A非常满意,于是就给了好评。

场景二:A又花了24元买了一件男衣类型的短袖(goods_id:2),但是A收到衣服之后,发觉衣服质量存在问题,客服那边有一直拖延,所以A很愤怒,给了一个差评。

场景三:A花了65元买了一件女衣类型(gtype_id:2)的长裙(goods_id:3)给了自己女朋友,A的女朋友收到货之后,穿的好看,质量也好,于是A很开心的给了好评。*/

// 根据上面的三个场景,于是我们就有了以下的数据:

user_purchase:

id:1user_id234,gtype_id:1,goods_id:1,price:53

id:2user_id234,gtype_id:1,goods_id:2,price:24

id:3user_id234,gtype_id:2,goods_id:3,price:65

 
user_coll:

id:1user_id234,gtype_id:1,goods_id:1

user_evaluate: id:
1user_id234,gtype_id:1,goods_id:1,score:3 id:2user_id234,gtype_id:1,goods_id:2,score:1 id:3user_id234,gtype_id:1,goods_id:3,score:3 // 根据上面的数据,我们可以分析出以下的数据 user_buy_analysis(用户商品类型购买分值表): id:1user_id234,gtype_id:1,score:5+2+10+5-20 = 2 id:2user_id234,gtype_id:2,score:5+10 = 15 user_consumption_analysis(用户消费水平表): id:1user_id234,min_money:24,average_money:(24+65+53/ 3 = 47.33,max_money:65,price_range:{ ‘50-100’:2,‘0-50’:1}

由上面的分析数据,我们就可以取到用户最高分值的商品类型和用户最常的消费区间、平均消费水平,然后根据这些条件进行筛选商品,就是比较符合用户意向的商品数据了。

结语:

1、此文章是小编自己的心得,由于小编是新手,所以此文章有许多不足之处,请见谅。

2、此文章是初步文章,涉及知识还不深,真正的推荐算法,还需要加上商品规格,并需要对商品进行打分等因素。

3、希望此文章能带给大家一些帮助,帮助大家进步。

猜你喜欢

转载自www.cnblogs.com/kafeixiaoluo/p/9073822.html