原文链接: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 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
短少数据,因为商店没有竞争。因而,我倡议用零填充缺失的值。
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 模型进行工夫序列预测