电商用户行为分析与挖掘(MYSQL数据分析+SPSS构建RFM模型)

前言

毫不夸张的说在中国除了婴幼儿及七八十以上的老年人,都有过网购经历。电商公司就如雨后春笋般迅速发展。了解用户的网购行为,有助于商家定品类,定营销方案等。利用数据分析与挖掘,争取做到比顾客自己还了解TA自己。

文章目录

  • 前言
  • 一、背景
    • Ⅰ 数据来源
    • Ⅱ 数据背景
    • Ⅲ 分析目的
  • 二、探索性分析
    • Ⅰ 数据导入
    • Ⅱ 数据类型
    • Ⅲ 描述性统计
      • 1、缺失值处理
      • 2、异常值处理
      • 3、重复值处理
  • 三、数据分析
    • Ⅰ 商品销售规律
      • a、时间
      • b、日期
      • c、商品品类
      • d、国家
    • Ⅱ 用户行为习惯
      • a、购买排行
      • b、退货排行
    • Ⅲ 数据挖掘
      • RFM模型

一、背景

Ⅰ 数据来源

该数据集来自The UCI Machine Learning Repository,为了更贴合我的分析目的,我自己在这个基础进行了一些修改。对不需要的数据进行了删除,添加了一些需要的数据。

Ⅱ 数据背景

该数据集是英国某电商在2010-12-01到2011-12-09的全部在线销售数据,采用的是我进行整改后的数据,包含541904个样本和九个特征值,分别是发票编号,商品品类,购买日期,购买时间,数量,单价,总价,客户编号,国家。发票编号前面有c的订单为退货,数据为负的也代表退货。

Ⅲ 分析目的

1

二、探索性分析

Ⅰ 数据导入

一、创建数据表

CREATE TABLE `users` (`InvoiceNo` varchar(30) DEFAULT NULL,`GOODS` varchar(30) DEFAULT NULL,`Dates` date DEFAULT NULL,`Times` time DEFAULT NULL,`Quantity` int(11) DEFAULT NULL,`UnitPrice` float DEFAULT NULL,`Total` float DEFAULT NULL,`CustomerID` varchar(30) DEFAULT NULL,`Country` varchar(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

二、插入数据

LOAD DATA INFILE 'D:UsersBehavior.csv'  
INTO TABLE users  
CHARACTER SET  utf8  
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"'  
LINES TERMINATED BY '\n'
ignore 1 lines; 

Ⅱ 数据类型

DESCRIBE users;
-- 或者 DESC users;
-- 或者 SHOW COLUMNS FROM users;

1

Ⅲ 描述性统计

a.购买

SELECT MIN(DISTINCT Quantity)AS 最小值,MAX(DISTINCT Quantity)AS 最大值,AVG(Quantity)AS 平均值 FROM users WHERE Quantity>0 UNION
SELECT MIN(DISTINCT total),MAX(DISTINCT total),AVG(total)FROM users WHERE total>0 UNION
SELECT MIN(DISTINCT unitprice),MAX(DISTINCT unitprice),AVG(unitprice) FROM users;

1
b.退货

SELECT MIN(DISTINCT Quantity)AS 最大值,MAX(DISTINCT Quantity)AS 最小值,AVG(Quantity)AS 平均值 FROM users WHERE Quantity<0 UNION
SELECT MIN(DISTINCT total),MAX(DISTINCT total),AVG(total)FROM users WHERE total<0;

1## Ⅳ 数据预处理

1、缺失值处理

在这里插入图片描述
不存在缺失值,不需要进行额外处理

2、异常值处理

a、价格,看是否有负数

SELECT unitprice FROM users WHERE unitprice<0;

1
只有两个为负数的价格,直接删除。

DELETE FROM users WHERE unitprice<0;

b、时间,看有没有超过时间范围的

SELECT MIN(dates),MAX(dates) FROM users;

1
时间范围正确,数据较干净。

3、重复值处理

由于在这次数据中,一张发票编号可能对应多种商品,所以允许重复值的存在。没有设立“主键”。

三、数据分析

Ⅰ 商品销售规律

a、时间

1)哪个时间段购买最多,哪个最少。

SELECT times,COUNT(InvoiceNo)FROM users WHERE Quantity>0 GROUP BY times ORDER BY COUNT(invoiceno)DESC;

1
结果显示,在下午十二点到四点左右是订单最多的时候,早上六七点和晚上六七点是订单最少的时候,可根据这个时间规律合理安排客服人员,快速处理订单。
2)哪个时间段退货最多,哪个最少。

SELECT times,COUNT(InvoiceNo)FROM users WHERE Quantity<0 GROUP BY times ORDER BY COUNT(invoiceno)DESC;

1
结果显示,在上午十二点到下午两点左右是退货订单最多的时候,早上六点到八点和晚上六七点是退货订单最少的时候,可根据这个时间规律合理安排客服人员,快速处理订单。
综合来说就是上午应该让处理退货能力强的客服值班,争取让退货订单少一点;下午则促成订单能力强客服值班,最大可能促成多的订单。

b、日期

1)购买

SELECT dates,SUM(Quantity)AS 日购买量,SUM(total)AS 日购买金额 FROM users WHERE Quantity>0 GROUP BY dates ORDER BY SUM(quantity)DESC;

1
观察结果发现,在第三第四季度销量遥遥领先,推测可能是在两个季度促销力度较大,也有可能是商品属性决定。
2)退货

SELECT dates,SUM(Quantity)AS 日购买量,SUM(total)AS 日购买金额 FROM users WHERE Quantity<0 GROUP BY dates ORDER BY SUM(quantity);

1
基本上退货与售出数量成正比关系,但是前面数据存在几个异常数据。重点观察这几个数据找出原因,看是偶然原因,还是必然。找到造成其异常的本质,从根源解决问题。

c、商品品类

1)购买订单

SELECT goods,SUM(Quantity)FROM users WHERE Quantity>0 GROUP BY goods ORDER BY SUM(Quantity)DESC;

1
A类卖出最多,在对库存进行管理的时候,A类产品可多进一些,根据售卖规律找到库存临界点,一到那个点就赶快进货。
2)退货订单

SELECT goods,SUM(Quantity)FROM users WHERE Quantity<0 GROUP BY goods ORDER BY SUM(Quantity);

1
B类产品退货最多,但是只从数据其他品类也相差不大,联系实际售出则会发现B、E的退货率较高,可进行订单跟踪为什么会有这么高的退货率。是商品质量不行,还是市场不受欢迎等原因。

d、国家

1)售出

SELECT country,SUM(Quantity),SUM(total)FROM users WHERE Quantity>0 GROUP BY Country ORDER BY SUM(total)DESC;

1
1
排名前十和后十,差距较明显,呈现一个两极趋势,可研究前十的剩余市场价值,及后十为什么销售只有这么一点,为什么只有这么一点销售额,比如广告营销不到位、本身市场已经饱和。

Ⅱ 用户行为习惯

a、购买排行

SELECT customerid,country,SUM(Quantity),SUM(total)FROM users WHERE Quantity>0 GROUP BY customerid ORDER BY SUM(total)DESC;

1
符合二八定律,即20%的客户贡献了80%的销售额。采用多项会员优惠措施维护好老客户,赠券等开发新客户。

b、退货排行

SELECT customerid,country,SUM(Quantity),SUM(total)FROM users WHERE Quantity<0 GROUP BY customerid ORDER BY SUM(total);

1
对比来看,购买多的客户也可能退货多,重点关注这些客户为什么退货,做好售后服务,增强黏性。

Ⅲ 数据挖掘

RFM模型

1)利用SPSS中针对营销行为的直销模块完成RFM分析,将数据库中的users表导入到SPSS中。
1
2)选择【直销】【选择方法】,在【直销】对话框中,单击【帮助标识我的最佳联系人(RFM分析)】,然后单击【继续】按钮。【RFM分析:数据格式】对话框中选择【交易数据】。在【交易数据RFM分析】的【变量】选项卡中,将变量移动到对应的位置,如图所示。
1
3)在【输出】选项卡中,勾选全部选项。然后点击【确认】。随后生成了如下的数据文件。
1
输出结果中“RFM分箱计数”图,显示了分箱分布。每个条形都表示被赋予每个组合RFM得分的客户数。希望获得相当均匀的分布,即所有(或大多数)条形的高度大致相同,但其实也会产生一定程度的偏差。从分箱结果来看,分箱的频数分布相对均匀。
1
观察值处理摘要。对2305个客户进行分析,没有缺失值。
1
RFM交叉表。是将“RFM分箱计数”图,以表格的形式展示出来。
1
RFM热图,用颜色深浅表示交易金额的大小。可以发现,随着最后一次交易间隔的得分和交易总次数的得分的分值越大,颜色越深,即右侧的颜色比左侧深,上方的颜色比下方深,说明客户最近一次交易时间间隔越近,交易次数越多,其平均交易金额越多。
1
“RFM分布直方图”。显示了最近一次交易时间、交易总次数和交易金额的频率分布,以此来判断各自的客户人群分布的情况,横轴的排列顺序较小的值在左边,较大的在右边,频率和货币两项的横坐标是对数刻度。
1
“RFM散点图”,是最近一次交易时间、交易总次数和交易金额之间的散点图。通过散点图可以清晰、直观地看到三个分析指标两两之间的关系。可以看出,交易总次数和交易金额存在一定程度上的正相关性,而最近一次交易时间和另外两个分析指标之间的存在较为明显的正相关性,但相关性较弱。
1
对评分进行描述统计。结果如下表所示。更多关注的是均值。
1
将每个客户的R_S,F_S,M_S与均值比较,如果低于均值就定义为“低”,如果高于均值就定义为“高”。
1
在【转换】菜单中的【重新编码为不同变量】,分别将最后一次交易间隔的得分,交易总次数的得分,交易总金额的得分的值按“高”与“低”确定新的变量,“高”用2表示,“低”用1表示。
【转换】菜单中的【计算变量】:
(1)单击“转换”菜单,选择“计算变量”,弹出“计算变量”对话框,在“目标变量”下的方框中输入“客户分类”,在右侧的“数字表达式”下的方框中输入“1”,先生成“客户分类=1”的数据。
(2)单击左下方的“如果”,弹出“计算变量:if个案”对话框,选择“在个案满足条件时包括”项。
(3)在右侧的表达式中输入“R_S分类=2&F_S分类=2&M_S分类=2”,就是上面表格的三个分类定义,输入完成之后,单击继续按钮,返回,单击“确定”按钮,这样满足条件的个案,它的“客户分类”就是1了,然后重复上面的步骤,知道8个分类全部完成。
1
在【数据】菜单中的【定义变量属性】中,将1-8分别定义为8种客户类型。
1
1
图形图表构造器
1
1
1
重点挽留客户及潜在客户、一般保持客户、一般价值客户占比达到70%。说明与客户之间黏性不足,可开发的客户价值还很高,需要加大运营力度提高销售额。
1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode MySQL 1113. 报告的记录

文章目录1. 题目2. 解题1. 题目 动作表&#xff1a;Actions ------------------------ | Column Name | Type | ------------------------ | user_id | int | | post_id | int | | action_date | date | | action | enum | | extra…

淘宝用户行为分析

前言 现在越来越多的线下转型到了线上经营&#xff0c;线下体验店线上购物将成为日后消费的大趋势。分析用户行为&#xff0c;走好转型之路&#xff0c;掌握先机快人一步。 文章目录前言一、背景Ⅰ 数据来源Ⅱ 数据背景Ⅲ 分析目的二、探索性分析Ⅰ 导入数据Ⅱ 数据处理1、缺失…

LeetCode 第 198 场周赛(434/5778,前7.51%)

文章目录1. 比赛结果2. 题目1. LeetCode 5464. 换酒问题 easy2. LeetCode 5465. 子树中标签相同的节点数 medium3. LeetCode 5466. 最多的不重叠子字符串 medium4. LeetCode 5467. 找到最接近目标值的函数值 hard1. 比赛结果 第二题图的边给的不一定按顺序的&#xff0c;我按有…

LeetCode MySQL 619. 只出现一次的最大数字

文章目录1. 题目2. 解题1. 题目 表 my_numbers 的 num 字段包含很多数字&#xff0c;其中包括很多重复的数字。 你能写一个 SQL 查询语句&#xff0c;找到只出现过一次的数字中&#xff0c;最大的一个数字吗&#xff1f; --- |num| --- | 8 | | 8 | | 3 | | 3 | | 1 | | 4 |…

幸福感数据分析与预测

文章目录分析目的一、数据采集1、 数据来源2、 数据说明二、数据传输三、数据处理1、查看数据2、缺失值处理3、合并数据集4、时间数据处理5、分组及One-hot编码处理四、数据分析1、描述性统计2、探索性分析1 是否与所在地是城市or农村有关2 是否与性别有关3 是否与年龄有关4 是…

LeetCode MySQL 1142. 过去30天的用户活动 II

文章目录1. 题目2. 解题1. 题目 Table: Activity ------------------------ | Column Name | Type | ------------------------ | user_id | int | | session_id | int | | activity_date | date | | activity_type | enum | ------------------…

MYSQL练习题

MYSQL练习题 数据表建立代码及题目解答 提取码&#xff1a;e6lk

LeetCode MySQL 1280. 学生们参加各科测试的次数

文章目录1. 题目2. 解题1. 题目 学生表: Students ------------------------ | Column Name | Type | ------------------------ | student_id | int | | student_name | varchar | ------------------------主键为 student_id&#xff08;学生ID&#xff09;&a…

LeetCode MySQL 597. 好友申请 I :总体通过率

文章目录1. 题目2. 解题1. 题目 在 Facebook 或者 Twitter 这样的社交应用中&#xff0c;人们经常会发好友申请也会收到其他人的好友申请。现在给如下两个表&#xff1a; 表&#xff1a; friend_request | sender_id | send_to_id |request_date| |-----------|------------…

贷款利润最大化——利用随机森林和逻辑回归

文章目录分析目的一、数据采集1、数据来源2、数据说明二、数据传输三、数据处理1、查看数据2、清理无用特征值3、标签列分析4、清理只单一值的列5、空值处理6、数据类型转换四、数据挖掘1、构建模型2、导入算法五、总结分析目的 本文针对某信贷网站提供的2007-2011年贷款申请人…

LeetCode MySQL 512. 游戏玩法分析 II

文章目录1. 题目2. 解题1. 题目 Table: Activity ----------------------- | Column Name | Type | ----------------------- | player_id | int | | device_id | int | | event_date | date | | games_played | int | ----------------------- (…

机器学习算法优缺点对比及选择

文章目录偏差&方差常见算法优缺点朴素贝叶斯Logistic Regression&#xff08;逻辑回归&#xff09;线性回归最近邻算法——KNN决策树ID3、C4.5算法CART分类与回归树AdaboostingSVM支持向量机人工神经网络K-Means聚类EM最大期望算法集成算法&#xff08;AdaBoost算法&#x…

LeetCode MySQL 1076. 项目员工II

文章目录1. 题目2. 解题1. 题目 Table: Project ---------------------- | Column Name | Type | ---------------------- | project_id | int | | employee_id | int | ---------------------- 主键为 (project_id, employee_id)。 employee_id 是员工表 Employ…

Sklearn.metrics评估方法

文章目录混淆矩阵分类准确率 accuracy精确率Precision召回率 recallF1值Roc曲线、AUC混淆矩阵 混淆矩阵又称误差矩阵&#xff0c;针对预测值和真实值之间的关系&#xff0c;我们可以将样本分为四个部分&#xff0c;分别是&#xff1a; 真正例&#xff08;True Positive&#x…

LeetCode MySQL 1083. 销售分析 II

文章目录1. 题目2. 解题1. 题目 Table: Product ----------------------- | Column Name | Type | ----------------------- | product_id | int | | product_name | varchar | | unit_price | int | ----------------------- product_id 是这张表的主键Tabl…

Jupyter Notebook安装 nbextensions 插件

安装 nbextensions 插件 一、打开Anaconda Prompt窗口&#xff0c;执行第一个命令&#xff0c;用于安装nbextensions&#xff1a; pip install jupyter_contrib_nbextensions 二、再执行第二个命令&#xff0c;用于安装 javascript and css files jupyter contrib nbextens…

LeetCode MySQL 1084. 销售分析III

文章目录1. 题目2. 解题1. 题目 Table: Product ----------------------- | Column Name | Type | ----------------------- | product_id | int | | product_name | varchar | | unit_price | int | ----------------------- product_id 是这个表的主键Tabl…

LeetCode MySQL 1322. 广告效果

文章目录1. 题目2. 解题1. 题目 表: Ads ------------------------ | Column Name | Type | ------------------------ | ad_id | int | | user_id | int | | action | enum | ------------------------ (ad_id, user_id) 是该表的主键…

linux下练习 c++ 容器set、multimset的特性

print.h //print.h#include <iostream>using namespace std;#ifndef print_fun#define print_funtemplate<typename T>///显示序列数据void print(T b,T e,char c ){bool isExitfalse;while (b!e){cout<<*b<<c;isExittrue;}if(isExit) cout<<end…

LeetCode MySQL 1179. 重新格式化部门表

文章目录1. 题目2. 解题1. 题目 部门表 Department&#xff1a; ------------------------ | Column Name | Type | ------------------------ | id | int | | revenue | int | | month | varchar | ------------------------ (id, mo…