原文链接: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:形容促销启动的间断区间,并指定从新开始促销的月份。

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

# 让咱们导入EDA所需的库:import numpy as np # 线性代数import pandas as pd # 数据处理,CSV文件I / O导入(例如pd.read_csv)import matplotlib.pyplot as pltimport seaborn as snsfrom datetime import datetimeplt.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            FalseDayOfWeek        FalseDate             FalseSales            FalseCustomers        FalseOpen             FalsePromo            FalseStateHoliday     FalseSchoolHoliday    Falsedtype: bool

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

opened\_sales = (train\_df\[(train_df.Open == 1) #如果商店停业opened_sales.Sales.describe()Out\[6\]:count    422307.000000mean       6951.782199std        3101.768685min         133.00000025%        4853.00000050%        6367.00000075%        8355.000000max       41551.000000Name: Sales, dtype: float64<matplotlib.axes._subplots.AxesSubplot at 0x7f7c38fa6588>

看一下顾客变量

In \[9\]:train_df.Customers.describe()Out\[9\]:count    1.017209e+06mean     6.331459e+02std      4.644117e+02min      0.000000e+0025%      4.050000e+0250%      6.090000e+0275%      8.370000e+02max      7.388000e+03Name: Customers, dtype: float64<matplotlib.axes._subplots.AxesSubplot at 0x7f7c3565d240>

   
train\_df\[(train\_df.Customers > 6000)\]

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

   
train\_df.StateHoliday.value\_counts()
   
0    8550870    131072a     20260b      6690c      4100Name: StateHoliday, dtype: int64
train\_df.StateHoliday\_cat.count()
1017209
train_df.tail()

   
train_df.isnull().all() #查看缺失Out\[18\]:Store               FalseDayOfWeek           FalseDate                FalseSales               FalseCustomers           FalseOpen                FalsePromo               FalseSchoolHoliday       FalseStateHoliday_cat    Falsedtype: bool

让咱们持续进行商店剖析

store\_df.head().append(store\_df.tail())

#缺失数据:Store                         0.000000StoreType                     0.000000Assortment                    0.000000CompetitionDistance           0.269058CompetitionOpenSinceMonth    31.748879CompetitionOpenSinceYear     31.748879Promo2                        0.000000Promo2SinceWeek              48.789238Promo2SinceYear              48.789238PromoInterval                48.789238dtype: float64In \[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 = 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的购物车数量最多。
  • 促销仅在工作日进行。
  • 客户偏向于在星期一(促销)和星期日(没有促销)购买更多商品。
  • 我看不到任何年度趋势。仅季节性模式。

最受欢迎的见解

1.在python中应用lstm和pytorch进行工夫序列预测

2.python中利用长短期记忆模型lstm进行工夫序列预测剖析

3.应用r语言进行工夫序列(arima,指数平滑)剖析

4.r语言多元copula-garch-模型工夫序列预测

5.r语言copulas和金融工夫序列案例

6.应用r语言随机稳定模型sv解决工夫序列中的随机稳定

7.r语言工夫序列tar阈值自回归模型

8.r语言k-shape工夫序列聚类办法对股票价格工夫序列聚类

9.python3用arima模型进行工夫序列预测