1.项目体系架构设计(电商推荐系统)

文章目录

    • 一、项目系统架构
    • 二、项目数据流程
    • 三、数据源解析
      • 1.商品数据表 -- Product
      • 2.用户评分表 -- Rating
    • 四、数据模型(表结构)
    • 五、统计推荐模块
      • 1.历史热门商品统计
      • 2.近期热门商品统计
      • 3.商品平均评分统计
    • 六、基于LFM的离线推荐模块
      • 1.用ALS算法训练隐语义模型(LFM)
      • 2.计算用户推荐矩阵
      • 3.计算商品相似度矩阵
    • 七、基于自定义模型的实时推荐模块
      • 1.推荐优先级计算
    • 八、其他形式的离线推荐
      • 1.基于内容的推荐
      • 2.基于物品的协同过滤推荐


  • 课程地址:尚硅谷大数据项目教程(大数据实战电商推荐系统)
  • 尚硅谷电商推荐系统的配套资料及虚拟机
    链接:https://pan.baidu.com/s/1iSMqV2wPkEfIsO1FrkxRNQ?pwd=1996
    提取码:1996
  • 1.项目体系架构设计(电商推荐系统)
  • 2.工具环境搭建(电商推荐系统)
  • 3.创建项目并初始化业务数据(电商推荐系统)
  • 4.离线推荐服务建设(电商推荐系统)
  • 5.实时推荐服务建设(电商推荐系统)
  • 6.冷启动问题处理(电商推荐系统)
  • 7.基于内容的相似推荐与基于物品的协同过滤推荐
  • 8.尚硅谷电商推荐系统预览

一、项目系统架构

  项目以经过修改过的中文亚马逊电商数据集作为依托,以某电商网站真实业务数据架构为基础,来构建电商推荐系统,包含了离线推荐实时推荐体系,综合利用了协同过滤算法以及基于内容的推荐方法来提供混合推荐。提供了从前端应用、后台服务、算法设计实现、平台部署等多方位的闭环的业务实现。
  离线推荐处理流程:
1.项目体系架构设计(电商推荐系统)_第1张图片

  实时推荐处理流程:
1.项目体系架构设计(电商推荐系统)_第2张图片

  项目系统架构为:
1.项目体系架构设计(电商推荐系统)_第3张图片

  • 用户可视化:主要负责实现和用户的交互以及业务数据的展示,主体采用AngularJS2进行实现,部署在Apache服务上。
  • 综合业务服务:主要实现JavaEE层面整体的业务逻辑,通过Spring进行构建,对接业务需求。部署在Tomcat上。
  • 数据存储部分–业务数据库:项目采用广泛应用的文档数据库MongDB作为主数据库,主要负责平台业务逻辑数据的存储。
  • 数据存储部分–缓存数据库:项目采用Redis作为缓存数据库,主要用来支撑实时推荐系统部分对于数据的高速获取需求。
  • 离线推荐部分–离线统计服务:批处理统计性业务采用Spark Core + Spark SQL进行实现,实现对指标类数据的统计任务。
  • 离线推荐部分–离线推荐服务:离线推荐业务采用Spark Core + Spark MLlib进行实现,采用ALS算法进行实现。
  • 实时推荐部分–日志采集服务:通过利用Flume-ng对业务平台中用户对于商品的一次评分行为进行采集,实时发送到Kafka集群。
  • 实时推荐部分–消息缓冲服务:项目采用Kafka作为流式数据的缓存组件,接受来自Flume的数据采集请求。并将数据推送到项目的实时推荐系统部分。
  • 实时推荐部分–实时推荐服务:项目采用Spark Streaming作为实时推荐系统,通过接收Kafka中缓存的数据,通过设计的推荐算法实现对实时推荐的数据处理,并将结构合并更新到MongoDB数据库。

二、项目数据流程

1.项目体系架构设计(电商推荐系统)_第4张图片

  • 【系统初始化部分】
    0. 通过Spark SQL将系统初始化数据加载到MongoDB中。
  • 【离线推荐部分】
    1. 可以通过Azkaban实现对于离线统计服务以及离线推荐服务的调度,通过设定的运行时间完成对任务的触发执行。
    2. 离线统计服务从MongoDB中加载数据,将【商品平均评分统计】、【商品评分个数统计】、【最近商品评分个数统计】三个统计算法进行运行实现,并将计算结果回写到 MongoDB中;离线推荐服务从MongoDB中加载数据,通过ALS算法分别将【用户推荐结果矩阵】、【影片相似度矩阵】回写到MongoDB中。
  • 【实时推荐部分】
    3. Flume从综合业务服务的运行日志中读取日志更新,并将更新的日志实时推送到Kafka中;Kafka在收到这些日志之后,通过kafkaStream程序对获取的日志信息进行过滤处理,获取用户评分数据流【UID|MID|SCORE|TIMESTAMP】,并发送到另外一个Kafka队列;Spark Streaming监听Kafka队列,实时获取Kafka过滤出来的用户评分数据流,融合存储在Redis中的用户最近评分队列数据,提交给实时推荐算法,完成对用户新的推荐结果计算;计算完成之后,将新的推荐结构和MongDB数据库中的推荐结果进行合并。
  • 【业务系统部分】
    4. 推荐结果展示部分,从MongoDB中将离线推荐结果、实时推荐结果、内容推荐结果进行混合,综合给出相对应的数据。
    5. 商品信息查询服务通过对接MongoDB实现对商品信息的查询操作。
    6. 商品评分部分,获取用户通过UI给出的评分动作,后台服务进行数据库记录后,一方面将数据推动到Redis群中,另一方面,通过预设的日志框架输出到Tomcat中的日志中。
    7. 商品标签部分,项目提供用户对商品打标签服务。

三、数据源解析

1.商品数据表 – Product

字段名 字段类型 字段描述 字段备注
productId Int 商品的ID
name String 商品的名称
categories String 商品所属类别 每一项用“|”分割
imageUrl String 商品图片的URL
tags String 商品的UGC标签 每一项用“|”分割

1.项目体系架构设计(电商推荐系统)_第5张图片
基于商品数据信息构建基于内容推荐的模型。

2.用户评分表 – Rating

字段名 字段类型 字段描述 字段备注
userId Int 用户的ID
productId Int 商品的ID
score Double 商品的分值
timestamp Long 评分的时间

1.项目体系架构设计(电商推荐系统)_第6张图片
基于用户评分构建LFM、item-CF模型。

四、数据模型(表结构)

  将推荐结果写入到表结构,
统计推荐结果如下:

  • 近期热门统计表RateMoreProductsRecently
字段名 字段类型 字段描述 字段备注
productId Int 商品的ID
count Int 商品的评分数
yearmonth String 评分的时段 yyyymm
  • 历史热门商品统计表RateMoreProducts
字段名 字段类型 字段描述 字段备注
productId Int 商品的ID
count Int 商品的评分数
  • 商品平均评分统计表AverageProductsScore
字段名 字段类型 字段描述 字段备注
productId Int 商品的ID
avg Double 商品的平均评分

离线推荐结果如下:

  • 用户商品推荐矩阵UserRecs
字段名 字段类型 字段描述 字段备注
userId Int 用户的ID
recs Array[(productId:Int,score:Double)] 推荐给该用户的商品集合
  • 商品相似性矩阵ProductRecs
字段名 字段类型 字段描述 字段备注
productId Int 商品的ID
recs Array[(productId:Int,score:Double)] 该商品最相似的商品集合

实时推荐结果如下:

  • 用户实时商品推荐矩阵StreamRecs
字段名 字段类型 字段描述 字段备注
userId Int 用户的ID
recs Array[(productId:Int,score:Double)] 实时推荐给该用户的商品集合

五、统计推荐模块

1.项目体系架构设计(电商推荐系统)_第7张图片

1.历史热门商品统计

  统计所有历史数据中每个商品的评分数。

select productId, 
	count(productId) as count 
from ratings 
group by productId 
order by count desc

返回历史热门商品统计表RateMoreProducts

字段名 字段类型 字段描述 字段备注
productId Int 商品的ID
count Int 商品的评分数

2.近期热门商品统计

  统计每月的商品评分个数,就代表了商品近期的热门度。

select 
	productId, 
	score, 
	changeDate(timestamp) as yearmonth 
from ratings

将上述结果作为临时表ratingOfMonth

select 
	productId, 
	count(productId) as count ,
	yearmonth 
from ratingOfMonth 
group by yearmonth, productId 
order by yearmonth desc,count desc

返回近期热门统计表RateMoreProductsRecently

字段名 字段类型 字段描述 字段备注
productId Int 商品的ID
count Int 商品的评分数
yearmonth String 评分的时段 yyyymm

3.商品平均评分统计

select 
	productId, 
	avg(score) as avg 
from ratings 
group by productId 
order by avg desc

返回商品平均评分统计表AverageProductsScore

字段名 字段类型 字段描述 字段备注
productId Int 商品的ID
avg Double 商品的平均评分

六、基于LFM的离线推荐模块

1.用ALS算法训练隐语义模型(LFM)

val model = ALS.train(trainData,rank,iterations,lambda)

参数调整:可以通过均方根误差,来多次调整参数值,选择RMSE最小的一组参数值

2.计算用户推荐矩阵

1.项目体系架构设计(电商推荐系统)_第8张图片

3.计算商品相似度矩阵

1.项目体系架构设计(电商推荐系统)_第9张图片

七、基于自定义模型的实时推荐模块

  实时推荐模块的需求:

  • 计算速度要快
  • 结果可以不是特别精确
  • 有预先设计好的推荐模型

1.项目体系架构设计(电商推荐系统)_第10张图片

1.推荐优先级计算

  基本原理:用户最近一段时间的口味是相似的。综合考虑相似度与评分的分值。
备选商品推荐优先级的计算思路如下:
1.项目体系架构设计(电商推荐系统)_第11张图片
  具体计算过程:需要用到两个数据:从当前的相似度矩阵中得到候选商品与从redis中得到用户最近K次评分。利用最新一次评分的商品对应的商品相似度矩阵中的商品作为候选商品,候选商品与用户最近K次评分的商品计算一个推荐优先级分数,和前面的实时结果合并并更新,得到实时用户推荐列表。
1.项目体系架构设计(电商推荐系统)_第12张图片

八、其他形式的离线推荐

  怎样找到商品 A 的相似商品?与A有相同标签的商品,喜欢A的人同样喜欢的商品。

  • 根据 UGC 的特征提取:利用TF-IDF算法从商品内容标签中提取特征
  • 根据行为数据的相似度计算:Item-CF:根据行为数据,找到喜欢了商品A的用户,同时喜欢了哪些商品,喜欢的人重合度越高相似度就越大

1.基于内容的推荐

  • 基于商品的用户标签信息,用TF-IDF算法提取特征向量
    在这里插入图片描述
  • 计算特征向量的余弦相似度,从而得到商品的相似列表
    在这里插入图片描述
  • 在实际应用中,一般会在商品详情页、或商品购买页将相似商品推荐出来

2.基于物品的协同过滤推荐

  基于物品的协同过滤(Item-CF),只需收集用户的常规行为数据(比如点击、收藏、购买)就可以得到商品间的相似度,在实际项目中应用很广。

  • 同现相似度 – 利用行为数据计算不同商品间的相似度
    在这里插入图片描述
    其中, N i N_i Ni 是购买商品 i i i (或对商品 i i i 评分)的用户列表, N j N_j Nj 是购买商品 j j j 的用户列表

你可能感兴趣的:(#,尚硅谷电商推荐系统,电商推荐系统,项目架构)