HackWeek–薅羊毛神器后台设计

by June 2022-01-30

PPT演示文稿

后台设计

  1. 数据集导入到mysql,stage 30+
  2. 从mysql将数据导入到Hive
  3. spark清洗Hive中数据
  4. JL 分析商品数据集 打标签 存储到mysql

此处每个作业可以创建单个或者多个标签

  1. JL spark程序分析用户答卷信息,给用户打标签

题目的主要目的现在仅仅用来分析用户的消费层级,以及用户短期对类目的喜好。

问卷内容:

a)、每个品类出两道题,每个题给四个选项,对应该品类的层级关系,两道题用来做题目有效性验证。

b)、两道题目用来测试用户对类目的喜好程度。

c)、用户姓名,我们会内部会根据平时对用户的了解来增加用户个性化标签,用来对问卷内容结果的补充。

  1. 盲盒推荐,根据用户的姓名,推荐其最想要的盲盒。

根据每个用户的标签,进行商品盲盒推荐,此处有几种算法:

a)、协同过滤算法,相同标签的用户选择了啥,就推荐啥,此处结合盲盒结果来进行推荐。

b)、根据调查问卷,进行相应的商品推荐。

商品打标签程序过程

1、类目消费层级标签

根据category计算每个类目下价格区间分布,分成4份。低/中/高/贵。(最高价格-最低价格)/ 4

2、商品性别标签

根据类目信息或者商品名称来打标签,男/女/男女等关键字

3、折扣大小标签

根据每个商品折扣的大小进行标签。(最小折扣-最大折扣)/ 4

4、权重标签

每个商品在该类目里面,有一个权重标签,此标签结果比较复杂,主要是根据商品的销量行为,再加人为加权行为,销量大,爆款的权重就高,销量少的权重就低,或者搜索量大的,权重就高,季节符合的,权重就高。

用户打标签过程

正常用户的行为是从埋点数据中,根据用户的点击,搜索,加购物车,购买等行为来给用户添加标签,我们这里主要是针对新客,相当于冷启动的场景,在该用户进入到App时,我们会提供一个问卷,根据该问卷结果,来给用户添加标签。

问卷结果表结构:

题目答案 string //商品id

用户名 string //填写问卷用户的名称

推荐过程:

根据用户填写结果,取每个类型的标签里面最多的来得到他在这个类型标签里面的标签结果,比如消费层级标签,如果用户选择的24个商品最多的消费层级是高,那么我们就给该用户打标签 高消费层级用户。如果用户选择的24个商品里面大多都是打折最大的商品,那么我们就给该用户打标签 折扣敏感用户。

当所有用户打标签完毕时,我们有两种推荐算法,协同过滤推荐和默认喜好推荐。

我们根据相似用户的对盲盒喜欢行为来推荐盲盒,比如A用户和B用户标签完全一样,我们任务他们是最相似的用户,A用户喜欢盲盒X,那么我们就给B用户推荐盲盒X。当找不到相似的用户时候,我们直接根据标签推荐各个类目里面最符合的商品(权重最高)

数据准备:

  1. 问卷答案表,包含商品id和用户名信息。
  2. 商品标签关系表,包含所有商品id和商品的标签id
  3. 标签信息表,包含标签id,标签内容和标签类目信息。

对外接口

1、生成问卷接口实现逻辑

a)、读取商品标签表结果,根据标签类目和商品类目,每个商品类目下的每个标签类目下选择1-2个商品,发送给前端。

2、问卷答案存储接口逻辑

a)、存储用户名,商品id,喜欢/不喜欢结果三个字段到问卷结果表。

3、盲盒获取接口逻辑

a)、直接读取盲盒信息表,返回给前端。该表存储用户名和商品id

所有的数据表:

  1. 问卷答案表,包含商品id和用户名,like/not like信息。
CREATE TABLE `investigation_result` (
  `id` bigint(20) primary key not null auto_increment,
  `user_name` VARCHAR(1000),
  `goods_id` int,
  `hit` BOOLEAN,
  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 商品标签关系表,包含所有商品id和商品的标签id。
CREATE TABLE `goods_label` (
  `id` bigint(20) primary key not null auto_increment,
  `goods_id` int,
  `label_id` int,
  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 标签信息表,包含标签id,标签内容和标签类目信息。
CREATE TABLE `label` (
  `id` bigint(20) primary key not null auto_increment,
  `name` VARCHAR(1000),
  `category_id` int,
  `category` VARCHAR(320),
  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 商品信息表,包括商品id,价格等商品具体信息。//该表从hive导入
CREATE TABLE `goods` (
  `index` bigint(20) DEFAULT NULL,
  `goods` text,
  `goods_url` text,
  `picture_url` text,
  `brand_url` text,
  `price` bigint(20) DEFAULT NULL,
  `market_price` double DEFAULT NULL,
  `discount` text,
  `category` text,
  `label` text,
  `label1` text,
  KEY `ix_goods_index` (`index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
  1. 盲盒结果表,包含商品id,用户名和like/not like信息。
CREATE TABLE `investigation_result` (
  `id` bigint(20) primary key not null auto_increment,
  `user_name` VARCHAR(1000),
  `goods_id` int,
  `hit` BOOLEAN,
  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 盲盒信息表,包含商品id,用户名。
CREATE TABLE `recommend` (
  `id` bigint(20) primary key not null auto_increment,
  `user_name` VARCHAR(1000),
  `goods_id` int,
  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 问卷信息表,包含商品id和用户名明细。
CREATE TABLE `investigation` (
  `id` bigint(20) primary key not null auto_increment,
  `user_name` VARCHAR(1000),
  `goods_id` int,
  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

留言

评论

${{item['author_name']}} 回复 ${{idToContentMap[item.parent] !== undefined ? idToContentMap[item.parent]['author_name'] : ''}} · ${{item.date.slice(0, 10)}} 回复

暂时还没有一条评论.