乐趣区

关于数据挖掘:Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析附代码数据

全文下载链接:http://tecdat.cn/?p=17748

最近咱们被客户要求撰写对于销售量工夫序列的钻研报告,包含一些图形和统计输入。

在本文中,在数据迷信学习之旅中,我常常解决日常工作中的工夫序列数据集,并据此做出预测

我将通过以下步骤:

探索性数据分析(EDA)

  • 问题定义(咱们要解决什么)
  • 变量辨认(咱们领有什么数据)
  • 单变量剖析(理解数据集中的每个字段)
  • 多元分析(理解不同畛域和指标之间的相互作用)
  • 缺失值解决
  • 离群值解决
  • 变量转换

预测建模

  • LSTM
  • XGBoost

问题定义

咱们在两个不同的表中提供了商店的以下信息:

  • 商店:每个商店的 ID
  • 销售:特定日期的营业额(咱们的指标变量)
  • 客户:特定日期的客户数量
  • StateHoliday:假日
  • SchoolHoliday:学校假期
  • StoreType:4 个不同的商店:a,b,c,d
  • CompetitionDistance:到最近的竞争对手商店的间隔(以米为单位)
  • CompetitionOpenSince [月 / 年]:提供最近的竞争对手凋谢的大抵年份和月份
  • 促销:当天促销与否
  • Promo2:Promo2 是某些商店的间断和间断促销:0 = 商店不参加,1 = 商店正在参加
  • PromoInterval:形容促销启动的间断区间,并指定从新开始促销的月份。

利用所有这些信息,咱们预测将来 6 周的销售量。

# 让咱们导入 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]:

Store            False
DayOfWeek        False
Date             False
Sales            False
Customers        False
Open             False
Promo            False
StateHoliday     False
SchoolHoliday    False
dtype: bool

让咱们从第一个变量开始 ->  销售量

opened_sales = (train_df[(train_df.Open == 1) #如果商店停业
opened_sales.Sales.describe()
Out[6]:

count    422307.000000
mean       6951.782199
std        3101.768685
min         133.000000
25%        4853.000000
50%        6367.000000
75%        8355.000000
max       41551.000000
Name: Sales, dtype: float64


<matplotlib.axes._subplots.AxesSubplot at 0x7f7c38fa6588>

看一下顾客变量

In [9]:

train_df.Customers.describe()
Out[9]:

count    1.017209e+06
mean     6.331459e+02
std      4.644117e+02
min      0.000000e+00
25%      4.050000e+02
50%      6.090000e+02
75%      8.370000e+02
max      7.388000e+03
Name: Customers, dtype: float64

<matplotlib.axes._subplots.AxesSubplot at 0x7f7c3565d240>
train_df[(train_df.Customers > 6000)]

咱们看一下 ** 假期 ** 变量。

train_df.StateHoliday.value_counts()
0    855087
0    131072
a     20260
b      6690
c      4100
Name: StateHoliday, dtype: int64
train_df.StateHoliday_cat.count()
1017209
train_df.tail()
train_df.isnull().all() #查看缺失
Out[18]:

Store               False
DayOfWeek           False
Date                False
Sales               False
Customers           False
Open                False
Promo               False
SchoolHoliday       False
StateHoliday_cat    False
dtype: bool

让咱们持续进行商店剖析

store_df.head().append(store_df.tail())
# 缺失数据:Store                         0.000000
StoreType                     0.000000
Assortment                    0.000000
CompetitionDistance           0.269058
CompetitionOpenSinceMonth    31.748879
CompetitionOpenSinceYear     31.748879
Promo2                        0.000000
Promo2SinceWeek              48.789238
Promo2SinceYear              48.789238
PromoInterval                48.789238
dtype: float64
In [21]:

让咱们从缺失的数据开始。第一个是 CompetitionDistance

store_df.CompetitionDistance.plot.box()

让我看看异样值,因而咱们能够在均值和中位数之间进行抉择来填充 NaN


点击题目查阅往期内容

Python 中利用长短期记忆模型 LSTM 进行工夫序列预测剖析 – 预测电力负荷数据

左右滑动查看更多

01

02

03

04

短少数据,因为商店没有竞争。因而,我倡议用零填充缺失的值。
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 = train_store_df, 
# 咱们能够看到季节性,但看不到趋势。该销售额每年放弃不变


<seaborn.axisgrid.FacetGrid at 0x7f7c350e0c50>

咱们看一下相干图。

  "CompetitionOpenSinceMonth", "CompetitionOpenSinceYear", "Promo2

<matplotlib.axes._subplots.AxesSubplot at 0x7f7c33d79c18>

咱们能够失去相关性:

  • 客户与销售(0.82)
  • 促销与销售(0,82)
  • 均匀顾客销量 vs 促销(0,28)
  • 商店类别 vs 均匀顾客销量(0,44)

我的剖析论断:

  • 商店类别 A 领有最多的销售和顾客。
  • 商店类别 B 的每位客户均匀销售额最低。因而,我认为客户只为小商品而来。
  • 商店类别 D 的购物车数量最多。
  • 促销仅在工作日进行。
  • 客户偏向于在星期一(促销)和星期日(没有促销)购买更多商品。
  • 我看不到任何年度趋势。仅季节性模式。

点击文末 “浏览原文”

获取全文残缺代码数据资料。

本文选自《Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析》。

点击题目查阅往期内容

Matlab 用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
RNN 循环神经网络、LSTM 长短期记忆网络实现工夫序列长期利率预测
联合新冠疫情 COVID-19 股票价格预测:ARIMA,KNN 和神经网络工夫序列剖析
深度学习:Keras 应用神经网络进行简略文本分类剖析新闻组数据
用 PyTorch 机器学习神经网络分类预测银行客户散失模型
PYTHON 用 LSTM 长短期记忆神经网络的参数优化办法预测工夫序列洗发水销售数据
Python 用 Keras 神经网络序列模型回归拟合预测、准确度检查和后果可视化
Python 用 LSTM 长短期记忆神经网络对不稳固降雨量工夫序列进行预测剖析
R 语言中的神经网络预测工夫序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告
R 语言深度学习:用 keras 神经网络回归模型预测工夫序列数据
Matlab 用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
R 语言 KERAS 深度学习 CNN 卷积神经网络分类辨认手写数字图像数据(MNIST)
MATLAB 中用 BP 神经网络预测人体脂肪百分比数据
Python 中用 PyTorch 机器学习神经网络分类预测银行客户散失模型
R 语言实现 CNN(卷积神经网络)模型进行回归数据分析
SAS 应用鸢尾花 (iris) 数据集训练人工神经网络 (ANN) 模型
【视频】R 语言实现 CNN(卷积神经网络)模型进行回归数据分析
Python 应用神经网络进行简略文本分类
R 语言用神经网络改良 Nelson-Siegel 模型拟合收益率曲线剖析
R 语言基于递归神经网络 RNN 的温度工夫序列预测
R 语言神经网络模型预测车辆数量工夫序列
R 语言中的 BP 神经网络模型剖析学生问题
matlab 应用长短期记忆(LSTM)神经网络对序列数据进行分类
R 语言实现拟合神经网络预测和后果可视化
用 R 语言实现神经网络预测股票实例
应用 PYTHON 中 KERAS 的 LSTM 递归神经网络进行工夫序列预测
python 用于 NLP 的 seq2seq 模型实例: 用 Keras 实现神经网络机器翻译
用于 NLP 的 Python:应用 Keras 的多标签文本 LSTM 神经网络分类

退出移动版