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

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

我将通过以下步骤:

探索性数据分析(EDA)

  • 问题定义(我们要解决什么)
  • 变量识别(我们拥有什么数据)
  • 单变量分析(了解数据集中的每个字段)
  • 多元分析(了解不同领域和目标之间的相互作用)
  • 缺失值处理
  • 离群值处理
  • 变量转换

预测建模

  • LSTM
  • XGBoost

问题定义

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

  • 商店:每个商店的ID

  • 销售:特定日期的营业额(我们的目标变量)

  • 客户:特定日期的客户数量

  • StateHoliday:假日

  • SchoolHoliday:学校假期

  • StoreType:4个不同的商店:a,b,c,d

  • CompetitionDistance:到最近的竞争对手商店的距离(以米为单位)

  • CompetitionOpenSince [月/年]:提供最近的竞争对手开放的大致年份和月份

  • 促销:当天促销与否

  • Promo2:Promo2是某些商店的连续和连续促销:0 =商店不参与,1 =商店正在参与

  • PromoInterval:描述促销启动的连续区间,并指定重新开始促销的月份。

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

1. # 让我们导入EDA所需的库:

3. import numpy as np # 线性代数

4. import pandas as pd # 数据处理,CSV文件I / O导入(例如pd.read_csv)

5. import matplotlib.pyplot as plt

6. import seaborn as sns

7. from datetime import datetime

8. plt.style.use("ggplot") # 绘图

11. #导入训练和测试文件:

12. train_df = pd.read_csv("../Data/train.csv")

13. test_df = pd.read_csv("../Data/test.csv")

16. #文件中有多少数据:

17. print("在训练集中,我们有", train_df.shape[0], "个观察值和", train_df.shape[1], 列/变量。")

18. print("在测试集中,我们有", test_df.shape[0], "个观察值和", test_df.shape[1], "列/变量。")

19. print("在商店集中,我们有", store_df.shape[0], "个观察值和", store_df.shape[1], "列/变量。")

在训练集中,我们有1017209个观察值和9列/变量。
在测试集中,我们有41088个观测值和8列/变量。
在商店集中,我们有1115个观察值和10列/变量。

首先让我们清理  训练数据集。

1. #查看数据

2. train_df.head().append(train_df.tail()) #显示前5行。

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

1. train_df.isnull().all()

2. Out[5]:

4. Store False

5. DayOfWeek False

6. Date False

7. Sales False

8. Customers False

9. Open False

10. Promo False

11. StateHoliday False

12. SchoolHoliday False

13. dtype: bool

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

 3.  opened_sales = (train_df[(train_df.Open == 1) #如果商店开业

4. opened_sales.Sales.describe()

5. Out[6]:

7. count 422307.000000

8. mean 6951.782199

9. std 3101.768685

10. min 133.000000

11. 25% 4853.000000

12. 50% 6367.000000

13. 75% 8355.000000

14. max 41551.000000

15. Name: Sales, dtype: float64

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

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

看一下顾客变量

1. In [9]:

3. train_df.Customers.describe()

4. Out[9]:

6. count 1.017209e+06

7. mean 6.331459e+02

8. std 4.644117e+02

9. min 0.000000e+00

10. 25% 4.050000e+02

11. 50% 6.090000e+02

12. 75% 8.370000e+02

13. max 7.388000e+03

14. Name: Customers, dtype: float64

16. <matplotlib.axes._subplots.AxesSubplot at 0x7f7c3565d240>

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

train_df[(train_df.Customers > 6000)]

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

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

train_df.StateHoliday.value_counts() 

1. 0 855087

2. 0 131072

3. a 20260

4. b 6690

5. c 4100

6. Name: StateHoliday, dtype: int64

train_df.StateHoliday_cat.count()

1017209

train_df.tail()

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

 2.  train_df.isnull().all() #检查缺失

3. Out[18]:

5. Store False

6. DayOfWeek False

7. Date False

8. Sales False

9. Customers False

10. Open False

11. Promo False

12. SchoolHoliday False

13. StateHoliday_cat False

14. dtype: bool

让我们继续进行商店分析

store_df.head().append(store_df.tail())

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

1. #缺失数据:

4. Store 0.000000

5. StoreType 0.000000

6. Assortment 0.000000

7. CompetitionDistance 0.269058

8. CompetitionOpenSinceMonth 31.748879

9. CompetitionOpenSinceYear 31.748879

10. Promo2 0.000000

11. Promo2SinceWeek 48.789238

12. Promo2SinceYear 48.789238

13. PromoInterval 48.789238

14. dtype: float64

15. In [21]:

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

 2.  store_df.CompetitionDistance.plot.box() 

让我看看异常值,因此我们可以在均值和中位数之间进行选择来填充NaN
 

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

缺少数据,因为商店没有竞争。 因此,我建议用零填充缺失的值。 

 2.  store_df["CompetitionOpenSinceMonth"].fillna(0, inplace = True)

让我们看一下促销活动。

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

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

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

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

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

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

3. plt.subplots_adjust(hspace = 0.3)

4. plt.show()

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

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

我们逐年查看趋势。

1. sns.factorplot(data = train_store_df,

2. # 我们可以看到季节性,但看不到趋势。 该销售额每年保持不变

5. <seaborn.axisgrid.FacetGrid at 0x7f7c350e0c50>

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

我们看一下相关图。

 1.    "CompetitionOpenSinceMonth", "CompetitionOpenSinceYear", "Promo2

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

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

我们可以得到相关性:

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

我的分析结论:

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

以上是 【Python】Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析 的全部内容, 来源链接: utcz.com/a/95011.html

回到顶部