【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行。
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>
看一下顾客变量
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>
train_df[(train_df.Customers > 6000)]
我们看一下**假期** 变量。
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()
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())
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
缺少数据,因为商店没有竞争。 因此,我建议用零填充缺失的值。
2. store_df["CompetitionOpenSinceMonth"].fillna(0, inplace = True)
让我们看一下促销活动。
store_df.groupby(by = "Promo2", axis = 0).count()
如果未进行促销,则应将“促销”中的NaN替换为零
我们合并商店数据和训练集数据,然后继续进行分析。
第一,让我们按销售量、客户等比较商店。
1. f, ax = plt.subplots(2, 3, figsize = (20,10))
3. plt.subplots_adjust(hspace = 0.3)
4. plt.show()
从图中可以看出,StoreType A拥有最多的商店,销售和客户。但是,StoreType D的平均每位客户平均支出最高。只有17家商店的StoreType B拥有最多的平均顾客。
我们逐年查看趋势。
1. sns.factorplot(data = train_store_df,
2. # 我们可以看到季节性,但看不到趋势。 该销售额每年保持不变
5. <seaborn.axisgrid.FacetGrid at 0x7f7c350e0c50>
我们看一下相关图。
1. "CompetitionOpenSinceMonth", "CompetitionOpenSinceYear", "Promo23. <matplotlib.axes._subplots.AxesSubplot at 0x7f7c33d79c18>
我们可以得到相关性:
- 客户与销售(0.82)
- 促销与销售(0,82)
- 平均顾客销量 vs促销(0,28)
- 商店类别 vs 平均顾客销量 (0,44)
我的分析结论:
- 商店类别 A拥有最多的销售和顾客。
- 商店类别 B的每位客户平均销售额最低。因此,我认为客户只为小商品而来。
- 商店类别 D的购物车数量最多。
- 促销仅在工作日进行。
- 客户倾向于在星期一(促销)和星期日(没有促销)购买更多商品。
- 我看不到任何年度趋势。仅季节性模式。
以上是 【Python】Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析 的全部内容, 来源链接: utcz.com/a/95011.html