首页 > 编程语言 >Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据

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

时间:2023-04-18 18:00:40浏览次数:43  
标签:促销 False 变量 商店 Python xgboost df train lstm

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

最近我们被客户要求撰写关于销售量时间序列建模预测的研究报告,包括一些图形和统计输出。

在本文中,在数据科学学习之旅中,我经常处理日常工作中的时间序列数据集,并据此做出预测 。

LSTM神经网络架构和原理及其在Python中的预测应用

我将通过以下步骤:

探索性数据分析(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行。

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_时间序列

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>

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_数据_02

看一下顾客变量

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>

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_神经网络_03

train_df[(train_df.Customers > 6000)]

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_数据_04

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

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()

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_时间序列_05

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())

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_神经网络_06

#缺失数据:


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和xgboost销售量时间序列建模预测分析|附代码数据_时间序列_07


点击标题查阅往期内容

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_神经网络_08

Python中利用长短期记忆模型LSTM进行时间序列预测分析 - 预测电力负荷数据

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_数据_09

左右滑动查看更多

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_数据_10

01

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_时间序列_11

02

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_数据_12

03

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_神经网络_13

04

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_神经网络_14

缺少数据,因为商店没有竞争。 因此,我建议用零填充缺失的值。
store_df["CompetitionOpenSinceMonth"].fillna(0, inplace = True)

让我们看一下促销活动。

store_df.groupby(by = "Promo2", axis = 0).count()

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_神经网络_15

如果未进行促销,则应将“促销”中的NaN替换为零 

我们合并商店数据和训练集数据,然后继续进行分析。

第一,让我们按销售量、客户等比较商店。

f, ax = plt.subplots(2, 3, figsize = (20,10))

plt.subplots_adjust(hspace = 0.3)
plt.show()

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_神经网络_16

从图中可以看出,StoreType A拥有最多的商店,销售和客户。但是,StoreType D的平均每位客户平均支出最高。只有17家商店的StoreType B拥有最多的平均顾客。

我们逐年查看趋势。

sns.factorplot(data = train_store_df, 
# 我们可以看到季节性,但看不到趋势。 该销售额每年保持不变


<seaborn.axisgrid.FacetGrid at 0x7f7c350e0c50>

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_神经网络_17


Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_数据_18

我们看一下相关图。

"CompetitionOpenSinceMonth", "CompetitionOpenSinceYear", "Promo2

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

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_神经网络_19

我们可以得到相关性:

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

我的分析结论:

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

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据_时间序列_20

 

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

 

 

标签:促销,False,变量,商店,Python,xgboost,df,train,lstm
From: https://blog.51cto.com/u_14293657/6203880

相关文章

  • Python ArcPy批量计算多时相遥感影像的各项元平均值
      本文介绍基于Python中ArcPy模块,对大量长时间序列栅格遥感影像文件的每一个像元进行多时序平均值的求取。  在遥感应用中,我们经常需要对某一景遥感影像中的全部像元的像素值进行平均值求取——这一操作很好实现,基于ArcMap软件或者简单的Python代码就可以实现;但有时候,我们会......
  • 小白用chatgpt编写python 爬虫程序代码 抓取网页数据(js动态生成网页元素)
    jS动态生成,由于呈现在网页上的内容是由JS生成而来,我们能够在浏览器上看得到,但是在HTML源码中却发现不了一、注意:代码加入了常规的防爬技术    如果不加,如果网站有防爬技术,比如频繁访问,后面你会发现什么数据都取不到1.1 模拟请求头: 这里入进入一步加强,随机,主要是User-Agen......
  • Python + Shell 巡检服务器
    1.背景团队维护多套业务系统,有支付系统、金融系统、数据系统、核验系统等二十多套业务系统,每套业务系统有10-50台服务器不等,当前团队中存在一套自动化巡检系统,每十分钟巡检一次,有异常可实时告警。但每天还需要人工登录服务器巡检两次,因人工巡检耗时长、漏巡风险大,需要一个运维巡......
  • python如何对.csv文件里面的信息进行数据可视化
    相关步骤1、首先打开.csv文件2、然后获取任意指定列的所有数据3、绘制出折线图4、然后由于国家数量过多,就成了这副样子但是数据是没有错误的尝试更改后,其实也是没有啥效果;然后就把他放在世界地图了:......
  • Python实现搭建-简单服务器教程
    Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下:1.等待客户端的链接,服务器会收到一个http协议的请求数据报2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文件的环境)3.提取出文件的环境之后,利用截断取片的方法将文件名转化为模块名称4.使用m=__import__(......
  • 什么是全栈工程师,为什么全栈开发用Python,Python web全栈开发到底有多高薪?
    我们经常听到全栈工程师这个词语。那么很多小伙伴还是不明所以,什么是全栈工程师?为什么全栈开发用Python?Pythonweb全栈开发到底有多高薪?一、什么是Pythonweb全栈工程师?全栈工程师是指掌握多种技能,并能利用多种技能独立完成产品的人。也叫全端工程师(同时具备前端和后台能力),英文F......
  • python注意
    变量不用声明类型函数:用def定义Flask新建安装flask新建创建一个python文件..在页面输出一个hellowork赋值一个变量,实例化导入Flask定义路由,然后返回默认匹配到/调试模式修改代码没有剩下,修改代码后需要重新运行每次启动,关闭很麻烦有调试模式开启调试,模式,......
  • Python格式化字符格式化
    Python格式化字符%s%d%f格式描述%%百分号标记#就是输出一个%%c字符及其ASCII码%s字符串%d有符号整数(十进制)%u无符号整数(十进制)%o无符号整数(八进制)%x无符号整数(十六进制)%X无符号整数(十六进制大写字符)%e浮点数字(科学计数法)%E浮点数字(科学计......
  • python3路径
    (1)在windows中,有效路径为:c:d:/e:\e:\gite:/git转为e:\git不能双写\\或者//(2)python中os.listdir(pa)如果是直接调用,参数pa=”i:”,获取的就是i:下的子文件或子目录而通过pyqt调用,参数pa=”i:”,居然获取的是当前运行py所在目录的子文件和子目录。这时,需要使调用参数pa为......
  • linux安装两个python版本
    1.下载python3安装包wgethttps://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz2.解压python的tgz压缩包文件tar-xzvfPython-3.7.2.tgz3.进入解压的文件cdPython-3.7.24.在python文件路径下编译pythonprefix=/usr/local/python37,指定python安装路径,这个路径......