【大数据项目实训】电商推荐系统


前言

主要内容

  • 项目框架
  • 数据源解析
  • 统计推荐模块
  • 基于LFM的离线推荐模块
  • 基于自定义模型的实时推荐模块
  • 其他形式的离线相似推荐模块
    • 基于内容的模块推荐
    • 基于物品的协同过滤推荐模块

一、项目框架

大数据处理流程

  • 数据源:结构化数据(关系数据)、半结构化数据(日志数据)、非结构化数据(图片视频)
  • 数据采集:ETL工具、Scribe、Flume、Kafka、Sqoop
  • 数据存储:Oracle、GreenPlum、Cassandra、Hbase、HDFS
  • 数据计算:Mahout、Storm、Flink、Spark、MapReduce
  • 数据应用:业务应用、Tableau、BI分析、可视化ECharts D3

实时处理流程

  • 用户接口 (业务请求)
  • 后台服务器 (前端/后端埋点)
  • 日志文件 (Flume)
  • 日志采集 (kafka)
  • 数据总线 (Kafka消息队列)
  • 实时计算
  • 数据存储
  • 数据可视化

离线处理流程
用户接口 -> 后台服务器 -> 日志文件 -> 日志采集 -> 日志存储 -> 日志清洗 -> 数据加载 -> 数据仓库 -> 数据计算 -> 数据存储 -> 数据可视化


二、项目系统设计

系统模块设计

  • 实时推荐
  • 离线推荐
  • 热门推荐
  • 标签
  • 相似推荐

项目系统架构

业务系统构成

  • 用户可视化:NGULARJS

  • 推荐结果展示

  • 商品检索

  • 商品信息详情

  • 商品标签

  • 商品评分

    扫描二维码关注公众号,回复: 16557147 查看本文章
  • 综合业务服务:Spring

  • 推荐结果查询

  • 商品检索

  • 商品信息详情

  • 商品标签

  • 商品评分

  • 业务数据库:MongDB(流行、数据量大、文档型数据库=>Json串)

  • 离线统计服务:历史热门商品统计、近期热门商品统计、商品平均分统计

  • 离线推荐服务:

    • ALS - LFM – UserRecs – ProductRecs
    • TF-IDF –
  • 缓存数据库:Redis

推荐系统构成

离线推荐(离线):

  • 离线统计服务 Scala Spark SQL
  • 离线推荐服务 Scala Spark MLlib
    实时推荐(在线):
  • 日志采集服务 Flume-ng
  • 消息缓冲服务 kafka
  • 实施推荐服务 Spark Streaming

项目数据流图

数据源解析

  • 商品信息:products.csv
    • 商品ID(productId)
    • 商品名称(name)
    • 商品种类(categories)
    • 商品图片URL(imageUrl)
    • 商品标签(tags)
  • 用户评分数据:ratings.csv
    • 用户ID(uid)
    • 商品ID(productid)
    • 商品评分(score)
    • 评分时间(timestamp)

主要数据模型

  • 商品信息表

  • 用户评分信息表

  • 用户表

  • 历史热门商品统计表

  • 近期热门商品统计表

  • 商品平均评分统计表

  • 离线(基于LFM)用户推荐列表

  • 离线(基于LFM)商品相似度表(为后续实时推荐准备)

  • 离线(基于内容)商品相似度表

  • 离线(基于Item-CF)商品相似度表

  • 实时用户推荐列表

实现模块

统计推荐模块

历史热门商品统计

  • 统计所有历史数据中每个商品的平分数
  • select productId, count(productId) as count from rating group by productId order by count desc => RateMoreProducts
  • RateMoreProducts 数据结构:productId,count

近期热门商品统计

  • 统计每月的商品评分个数,代表商品近期的热门度
  • 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 => RateMoreRecentlyProducts
  • changeDate:UDF函数,使用SimpleDateFormat对Date进行格式转化,转化格式为’‘yyyyMM’’
  • RateMoreRecentlyProducts 数据结构:productId,count,yearmonth

商品平均评分统计

  • select productId, avg(sorce) as avg from ratings group by productId order by avg desc => AverageProducts
  • AverageProducts 数据结构:productId,avg
    在这里插入图片描述

基于LFM的离线推荐模块

  • 用ALS算法训练隐语义模型

    • val model = ALS.train(trainData, rank, iterations, lambda)
    • 要求数据结构:RDD / DataFrame
    • trainData:训练数据
    • rank:隐特征个数k
    • iterations:迭代次数
    • lambda:正则化次数
    • RMSE:均方根误差
    • 参数调整:通过均方根误差,多次调整参数值,选择RMSE最小的一组参数值
      在这里插入图片描述
  • 计算用户推荐矩阵
    在这里插入图片描述

  • 计算商品相似度矩阵
    在这里插入图片描述

基于模型的实时推荐模块

  • 计算速度快
  • 结果可以不是特别精确
  • 有预先设计好的推荐模型
    在这里插入图片描述

推荐优先级计算

  • 基本原理:用户最近一段时间的口味是相似的
  • 相似度 - 评分分值
  • 在这里插入图片描述

在这里插入图片描述

其他形式的离线相似推荐

在这里插入图片描述

基于内容的推荐

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

基于物品的协同过滤推荐

  • 基于物品的协同过滤(Item-CF),只需手机用户的常规行为数据(比如点击、收藏、购买)就可以得到商品间的相似度,在实际项目中引用广泛
  • “同现相似度”——利用行为数据计算不同商品间的相似度
    在这里插入图片描述

混合推荐——分区混合

  • 基于模型的推荐
  • 基于协同过滤的推荐
  • 基于内容的推荐
  • 基于统计的推荐

三、项目框架搭建

猜你喜欢

转载自blog.csdn.net/Lenhart001/article/details/131505843