项目说明
本数据集是生成式模拟数据,本项目通过可视化分析对数据进行初步探索,再通过时间序列针对店铺的销售额进行分析,对时序图进行分解,发现数据存在季节性,并且通过auto_arima自动选择参数建立了SARIMA模型,对未来7天的销售额进行预测,并利用聚类分析将消费者分为不同的群体,再建立RFM模型,将消费者进一步划分为不同价值的客户,对于不价值的消费者,采取不同的方案,通过这些模型,可以针对不同的消费群体采取不同的营销方案,尽可能的保留重要价值客户,对于一些低价值的客户,可以降低投入成本。
数据说明
字段名称 | 描述 |
---|---|
订单交易时间 | 交易时候的时间 |
订单编号 | 交易订单的编号 |
订单来源 | 订单的来源:直播下单,店铺下单 |
用户ID | 消费者的ID |
会员 | 判断该消费者是否为本店会员 |
首次下单用户 | 判断该消费者是否为首次下单的用户 |
性别 | 消费者的性别:男,女 |
品类 | 商品类型,共四类:A,B,C,D |
商品单价 | 商品的价格 |
购买数量 | 购买商品的数量 |
活动优惠 | 是否使用了活动优惠 |
换货 | 是否换货,0-否,1-是 |
退货 | 是否退货,0-否,1-是 |
已评价 | 是否已经评价,0-否,1-是 |
数据处理
Python库导入
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.statespace.sarimax import SARIMAX
from pmdarima import auto_arima # 自动选择参数
import statsmodels.api as sm
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
数据导入
data = pd.read_csv("./data/orders_data.csv")
数据预览
# 查看数据维度
data.shape
# 查看数据信息
data.info()
# 查看各列缺失值
data.isna().sum()
# 查看重复值
data.duplicated().sum()
数据逻辑性检查
# 检查用户会员状态是否一致
membership_inconsistency_count = sum(data.groupby('用户ID')['会员'].nunique() > 1)
print(f"会员状态不一致的用户数量: {
membership_inconsistency_count}")
# 检查用户性别是否一致
gender_inconsistency_count = sum(data.groupby('用户ID')['性别'].nunique() > 1)
print(f"性别不一致的用户数量: {
gender_inconsistency_count}")
first_order_flag = data.groupby('用户ID')['订单交易时间'].transform('min') == data['订单交易时间'] # 为了获取第一次交易的时间
# 计算那些在第一次订单之后仍标记为首次下单的情况数量
inconsistencies_count = sum((first_order_flag == False) & (data['首次下单用户'] == '是')) # 计算第一次交易后,判断后续交易中,是否还被定义为首次下单用户
print(f"首次下单状态不一致的用户数量: {
inconsistencies_count}")
可以看到,虚拟出来的数据逻辑上存在一些错误,有的用户在某个订单中被定义成会员或者男性,但是在后面的订单中又被定义成非会员或者女性,以及有的用户以及下过单了,结果后续订单还被定义为首次下单用户,所以逻辑存在错误,需要在之后进行处理,使得数据变得合理。
数据处理
# 对性别不一致的数据进行处理
# 找出性别不一致的用户
gender_inconsistencies = data.groupby('用户ID')['性别'].nunique()