Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
原文链接:http://tecdat.cn/?p=17748
原文出处:拓端数据部落公众号
在数据科学学习之旅中,我经常处理日常工作中的时间序列数据集,并据此做出预测。
相关视频:LSTM神经网络架构和工作原理及其在Python中的预测应用
文章图片
LSTM神经网络架构和原理及其在Python中的预测应用
我将通过以下步骤:
探索性数据分析(EDA)
- 问题定义(我们要解决什么)
- 变量识别(我们拥有什么数据)
- 单变量分析(了解数据集中的每个字段)
- 多元分析(了解不同领域和目标之间的相互作用)
- 缺失值处理
- 离群值处理
- 变量转换
- LSTM
- XGBoost
我们在两个不同的表中提供了商店的以下信息:
- 商店:每个商店的ID
- 销售:特定日期的营业额(我们的目标变量)
- 客户:特定日期的客户数量
- StateHoliday:假日
- SchoolHoliday:学校假期
- StoreType:4个不同的商店:a,b,c,d
- CompetitionDistance:到最近的竞争对手商店的距离(以米为单位)
- CompetitionOpenSince [月/年]:提供最近的竞争对手开放的大致年份和月份
- 促销:当天促销与否
- Promo2:Promo2是某些商店的连续和连续促销:0 =商店不参与,1 =商店正在参与
- PromoInterval:描述促销启动的连续区间,并指定重新开始促销的月份。
# 让我们导入EDA所需的库:import numpy as np # 线性代数
import pandas as pd # 数据处理,CSV文件I / O导入(例如pd.read_csv)
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
plt.style.use("ggplot") # 绘图#导入训练和测试文件:
train\_df = pd.read\_csv("../Data/train.csv")
test\_df = pd.read\_csv("../Data/test.csv")#文件中有多少数据:
print("在训练集中,我们有", train\_df.shape\[0\], "个观察值和", train\_df.shape\[1\], 列/变量。")
print("在测试集中,我们有", test\_df.shape\[0\], "个观察值和", test\_df.shape\[1\], "列/变量。")
print("在商店集中,我们有", store\_df.shape\[0\], "个观察值和", store\_df.shape\[1\], "列/变量。")
在训练集中,我们有1017209个观察值和9列/变量。
在测试集中,我们有41088个观测值和8列/变量。
在商店集中,我们有1115个观察值和10列/变量。
首先让我们清理训练数据集。
#查看数据
train\_df.head().append(train\_df.tail()) #显示前5行。
文章图片
train_df.isnull().all()
Out\[5\]:StoreFalse
DayOfWeekFalse
DateFalse
SalesFalse
CustomersFalse
OpenFalse
PromoFalse
StateHolidayFalse
SchoolHolidayFalse
dtype: bool
让我们从第一个变量开始->销售量
opened\_sales = (train\_df\[(train_df.Open == 1) #如果商店开业
opened_sales.Sales.describe()
Out\[6\]:count422307.000000
mean6951.782199
std3101.768685
min133.000000
25%4853.000000
50%6367.000000
75%8355.000000
max41551.000000
Name: Sales, dtype: float64
文章图片
看一下顾客变量
In \[9\]:train_df.Customers.describe()
Out\[9\]:count1.017209e+06
mean6.331459e+02
std4.644117e+02
min0.000000e+00
25%4.050000e+02
50%6.090000e+02
75%8.370000e+02
max7.388000e+03
Name: Customers, dtype: float64
文章图片
train\_df\[(train\_df.Customers > 6000)\]
文章图片
我们看一下**假期** 变量。
train\_df.StateHoliday.value\_counts()
0855087
0131072
a20260
b6690
c4100
Name: StateHoliday, dtype: int64
train\_df.StateHoliday\_cat.count()
1017209
train_df.tail()
文章图片
train_df.isnull().all() #检查缺失
Out\[18\]:StoreFalse
DayOfWeekFalse
DateFalse
SalesFalse
CustomersFalse
OpenFalse
PromoFalse
SchoolHolidayFalse
StateHoliday_catFalse
dtype: bool
让我们继续进行商店分析
store\_df.head().append(store\_df.tail())
文章图片
#缺失数据:Store0.000000
StoreType0.000000
Assortment0.000000
CompetitionDistance0.269058
CompetitionOpenSinceMonth31.748879
CompetitionOpenSinceYear31.748879
Promo20.000000
Promo2SinceWeek48.789238
Promo2SinceYear48.789238
PromoInterval48.789238
dtype: float64
In \[21\]:
让我们从缺失的数据开始。第一个是 CompetitionDistance
store_df.CompetitionDistance.plot.box()
让我看看异常值,因此我们可以在均值和中位数之间进行选择来填充NaN
文章图片
缺少数据,因为商店没有竞争。 因此,我建议用零填充缺失的值。
store_df\["CompetitionOpenSinceMonth"\].fillna(0, inplace = True)
让我们看一下促销活动。
store_df.groupby(by = "Promo2", axis = 0).count()
文章图片
如果未进行促销,则应将“促销”中的NaN替换为零
我们合并商店数据和训练集数据,然后继续进行分析。
第一,让我们按销售量、客户等比较商店。
f, ax = plt.subplots(2, 3, figsize = (20,10))plt.subplots_adjust(hspace = 0.3)
plt.show()
文章图片
从图中可以看出,StoreType A拥有最多的商店,销售和客户。但是,StoreType D的平均每位客户平均支出最高。只有17家商店的StoreType B拥有最多的平均顾客。
我们逐年查看趋势。
sns.factorplot(data = https://www.it610.com/article/train/_store/_df,
# 我们可以看到季节性,但看不到趋势。 该销售额每年保持不变
文章图片
文章图片
我们看一下相关图。
"CompetitionOpenSinceMonth", "CompetitionOpenSinceYear", "Promo2
文章图片
我们可以得到相关性:
- 客户与销售(0.82)
- 促销与销售(0,82)
- 平均顾客销量 vs促销(0,28)
- 商店类别 vs 平均顾客销量 (0,44)
- 商店类别 A拥有最多的销售和顾客。
- 商店类别 B的每位客户平均销售额最低。因此,我认为客户只为小商品而来。
- 商店类别 D的购物车数量最多。
- 促销仅在工作日进行。
- 客户倾向于在星期一(促销)和星期日(没有促销)购买更多商品。
- 我看不到任何年度趋势。仅季节性模式。
文章图片
最受欢迎的见解
1.在python中使用lstm和pytorch进行时间序列预测
2.python中利用长短期记忆模型lstm进行时间序列预测分析
3.使用r语言进行时间序列(arima,指数平滑)分析
【Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析】4.r语言多元copula-garch-模型时间序列预测
5.r语言copulas和金融时间序列案例
6.使用r语言随机波动模型sv处理时间序列中的随机波动
7.r语言时间序列tar阈值自回归模型
8.r语言k-shape时间序列聚类方法对股票价格时间序列聚类
9.python3用arima模型进行时间序列预测
推荐阅读
- 投稿|那些Facebook“看不见”的对手
- Win8系统开始屏幕Metro界面默认天气地点不对怎样办
- Python请求拉取网页上的内容
- 利用Python编写一个藏头诗在线生成器
- 基于Python实现智能停车场车牌识别计费系统
- vue如何使用js对图片进行点击标注圆点并记录它的坐标
- 电话被拉黑,发信息对方能收到吗
- 固态硬盘4k对齐,本文教您固态硬盘4k对齐的办法
- C|天天new对象的程序员,居然能找到女朋友(还能教你追女生?)
- 程序员|程序员找不到对象(谁说的,出来battle下)