一、概述
本篇的数据集及程序代码上传在个人github上
本文针对所给的酒类商品销售数据集进行了以下两大类分析:
(1) 统计分析类
- 酒种的销售统计
- 地区的销售统计
(2) 建模分析类
- 相似用户反馈
- 相似商品反馈
- 协同过滤推荐
- 感兴趣用户推荐
- 地域优先推荐
- 用户流失度分析
- 高价值用户分析
其中用户流失度分析及高价值用户分析依赖更加完整的数据集(订单的时间序列及单次订单消费金额等信息),本篇暂时不讨论
二、总体分析
2.1 逻辑架构
其中主要的技术选型如下:
- HBase:数据存储
主要存储预处理之后的商品及用户基本信息以及用户购买行为信息。 - Spark:离线数据分析
从HBase中读取用户行为数据,构建基于Machine Learning的数据模型 - HDFS:模型及特征矩阵存储
导出Spark学习出的稳定数据模型及特征矩阵到HDFS中 - Zepplin:数据可视化
支持多种数据展示效果:列表、柱状图、饼图等。在intepreter支持下可方便对接HBase和Spark - Zookeeper:分布式集群管理
分布式HBase、Spark等组件使用Zookeeper来管理集群
注:其实数据样本记录不多,所以没有使用Flume(数据采集)、Kafka(数据传输)及Storm(实时数据分析)等组件
2.2 物理部署
建议三台以上机器搭建大数据分析及应用平台,软件部署情况可参考如下:
机器别名 | 安装软件 |
---|---|
Machine01 | Hadoop-2.6.4, spark-1.6.5, HBase-1.2.2, ZK-3.4.8, zeppelin-0.6.2 |
Machine02 | Hadoop-2.6.4, spark-1.6.5, HBase-1.2.2, ZK-3.4.8 |
Machine03 | Hadoop-2.6.4, spark-1.6.5, HBase-1.2.2, ZK-3.4.8 |
三、详细分析
3.1 运行时架构
3.2 数据预处理
针对原始的xsl数据,这里进行了预处理,处理后的结果存在HBase中:
- brand-info表:酒品牌基本信息,包含品牌名称,所属分类以及编号信息
主键(row key) | 列簇(Family) | 列(Column) | 含义(Description) |
ID (酒品牌编号) | brandinfo | brand | 品牌名称 |
category | 所属分类 |
- user-info表:包含两个列簇,userinfo列簇包含用户名称,地址等基本信息,orderinfo列簇存储用户购买的酒品牌的编号列表
主键(row key) | 列簇(Family) | 列(Column) | 含义(Description) |
ID (用户Id) | userinfo | name | 用户名称 |
邮箱 | |||
phone | 手机号码 | ||
province | 省 | ||
city | 市 | ||
zone | 区 | ||
min | 最小购买能力 | ||
max | 最大购买能力 | ||
ordernum | 订单数 | ||
orderinfo | orderindexs | 用户购买的品牌id列表 |
3.3 统计分析
主要是利用基于spark的mapreduce能力按照品种和地域对酒的销售情况进行了统计,统计结果存储在HBase中
- cate-sale表:存储品牌,销售记录
主键(row key) | 列簇(Family) | 列(Column) | 含义(Description) |
brand (品牌) | catesale | salenum | 某品牌的销售数量 |
- zone-sale表:存储地区及销售记录,其中主键的组成方式为”省市区_品牌”
主键(row key) | 列簇(Family) | 列(Column) | 含义(Description) |
key (组合主键) | zonesale | salenum | 某地区某品牌的销售数量 |
3.4 建模分析
3.4.1 ALS 矩阵分解模型
该模型的原理直观的表示为上图,交替最小二乘算法(ALS)将可将高维的用户-评分矩阵 R R 分解为两个低维的用户特征矩阵 和商品特征矩阵 V V 。使得 满足: R≈UTV R ≈ U T V 。其中维数 k k 作为算法的参数输入,即隐藏因子。该模型一方 main可以解决原始用户评分矩阵可能存在的数据稀疏问题,另一方面 分解后的用户特征矩阵和商品特征矩阵可用于后续的协同过滤推荐及相似用户挖掘等。
我们在数据预处理部分已经对用户和酒品牌进行了编号,这里将所有用户的购买记录转化为用户评分矩阵(例如:编号为3的用户购买了编号为5的酒,则有用户评分矩阵