首页 > 编程语言 >拓端数据tecdat|Python用ARIMA和SARIMA模型预测销量时间序列数据

拓端数据tecdat|Python用ARIMA和SARIMA模型预测销量时间序列数据

时间:2022-11-06 18:35:46浏览次数:45  
标签:平稳 Python 模型 ARIMA tecdat df 序列 数据

 

介绍

ARIMA模型是时间序列预测中一种常用的统计方法。指数平滑和ARIMA模型是时间序列预测中应用最为广泛的两种方法,它们是解决这一问题的补充方法。指数平滑模型是基于对数据趋势和季节性的描述,而ARIMA模型则是为了描述数据的自相关性。

在讨论ARIMA模型之前,我们先来讨论平稳性的概念和时间序列的差分技术。

 

平稳性

平稳时间序列数据的性质不依赖于时间,这就是为什么具有趋势或季节性的时间序列不是平稳的。趋势和季节性会在不同的时间影响时间序列的值,另一方面,对于平稳性,当你观察它时并不重要,它在任何时间点看起来都应该是相同的。一般来说,一个平稳的时间序列在长期内没有可预测的模式。

ARIMA是自回归综合移动平均线的缩写。它是一类在时间序列数据中捕获一组不同标准时间结构的模型。
在本教程中,我们将讨论如何用Python开发时间序列预测的ARIMA模型。
ARIMA模型是一类用于分析和预测时间序列数据的统计模型。它在使用上确实简化了,但是这个模型确实很强大。
ARIMA代表自回归综合移动平均。

ARIMA模型的参数定义如下:
p:模型中包含的滞后观测数,也称为滞后阶数。
d:原始观测值的差异次数,也称为差分阶数。
q:移动平均线窗口的大小,也叫移动平均阶数。
建立一个包含指定数量和类型的项的线性回归模型,并通过差分程度来准备数据,使其平稳,即去除对回归模型产生负面影响的趋势和季节结构。

 

步骤

1可视化时间序列数据
2确定日期是否平稳
3绘制相关图和自相关图
4根据数据建立ARIMA模型或季节ARIMA模型
 

在本教程中,我正在使用下面的数据集。


1.  df.head()
2.
3. #更新表头
4. df.columns=["月份","销量"]
5. df.head()
6.
7. df.plot()

 

拓端数据tecdat|Python用ARIMA和SARIMA模型预测销量时间序列数据_数据

如果我们看到上面的图表,那么我们将能够找到一个趋势,即有一段时间销售很高,反之亦然。这意味着我们可以看到数据是遵循季节性的。对于ARIMA,我们首先要做的是确定数据是平稳的还是非平稳的。如果数据是非平稳的,我们会尽量使它们平稳,然后我们会进一步处理。
让我们检查给定的数据集是否是平稳的,为此我们使用adfuller检验 。

我通过运行上述代码导入了检验函数。

为了确定数据的性质,我们将使用零假设。
H0:零假设:这是一个关于总体的陈述,要么被认为是正确的,要么被用来提出一个论点。
H1:备选假设:与H0相矛盾,当我们拒绝H0时,我们得出的结论。
Ho:它是非平稳的
H1:它是平稳的
我们将考虑数据不平稳的零假设和数据平稳的备择假设。


1.   
2. adfuller_test(df['销量'])

运行上述代码后,我们将得到P值,


1.  ADF Test Statistic : -1.833
2. p-value : 0.363915
3. #Lags Used : 11
4. Number of Observations : 93

这里P值是0.36,大于0.05,这意味着数据接受了零假设,这意味着数据是非平稳的。
我们来看看一阶差分和季节性差分:

df['Sales First Difference'] = df['销量'] - df['销量'].shift(1)

 

拓端数据tecdat|Python用ARIMA和SARIMA模型预测销量时间序列数据_时间序列_02


1.  # 再次测试数据是否平稳
2. adfuller_test(df['Seasonal First Difference'].dropna())
3. ADF Test Statistic : -7.626619157213163
4. p-value : 2.060579696813685e-11
5. #Lags Used : 0
6. Number of Observations : 92

这里p值是2.06,表示拒绝零假设。所以数据是平稳的。

拓端数据tecdat|Python用ARIMA和SARIMA模型预测销量时间序列数据_数据_03

 

自相关系数:

1.  autocorrelation_plot(df['销量'])
2. plt.show()

拓端数据tecdat|Python用ARIMA和SARIMA模型预测销量时间序列数据_数据_04

plot_acf(df['季节性一阶差分'].dropna(),lags=40,ax=ax1)

 

拓端数据tecdat|Python用ARIMA和SARIMA模型预测销量时间序列数据_时间序列_05

拓端数据tecdat|Python用ARIMA和SARIMA模型预测销量时间序列数据_r语言_06

建立ARIMA模型 

1.  #对于非季节性数据
2. #p=1, d=1, q=0 or 1
3.
4. model=ARIMA(df['销量'],order=(1,1,1))
5.
predict(start=90,end=103,dynamic=True)

SARIMA模型 

然后建立SARIMA模型 

1.   
2. plot(figsize=(12,8))

可以看到拟合效果要优于ARIMA模型。

然后我们用SARIMA模型对未来进行预测。 

1.   
2. future_df['预测'] = results.predict(start = 104, end = 120, dynamic= True)
3. future_df.plot(figsize=(12, 8))

结论

时间序列预测是非常有用的,有很多其他模型可以做时间序列预测,但ARIMA是很容易理解的。


拓端数据tecdat|Python用ARIMA和SARIMA模型预测销量时间序列数据_时间序列_07

标签:平稳,Python,模型,ARIMA,tecdat,df,序列,数据
From: https://blog.51cto.com/u_14293657/5827495

相关文章

  • 拓端数据tecdat|R语言时间序列平稳性几种单位根检验(ADF,KPSS,PP)及比较分析
     时间序列模型根据研究对象是否随机分为确定性模型和随机性模型两大类。随机时间序列模型即是指仅用它的过去值及随机扰动项所建立起来的模型,建立具体的模型,需解决如下三......
  • 拓端数据tecdat|R语言主成分分析(PCA)葡萄酒可视化:主成分得分散点图和载荷图
     我们将使用葡萄酒数据集进行主成分分析。数据数据包含177个样本和13个变量的数据框;vintages包含类标签。这些数据是对生长在意大利同一地区但来自三个不同栽培品种的葡萄......
  • Python批量生成合同文档
    假设某日我开了一家空调公司,暂且就叫他天强空调安装设备公司吧,假装自己有公司,接了一单大生意,就是给甘肃省的各个高校安装空调(其实这边的气候基本用不到空调,就是假想一下),那么......
  • python学习第五周总结
    面向对象前戏之人狗大战#编写代码简单的实现人打狗狗咬人的小游戏(剧情需要)"""推导步骤1:代码定义出人和狗"""person1={'name':'jason','age':18,......
  • python 单元测试
    importunittestclassMyTestCase(unittest.TestCase):deftest_something(self):self.assertEqual(0,False)if__name__=='__main__':unitte......
  • python 协程
    什么是协程、异步举个例子:假设有1个洗衣房,里面有10台洗衣机,有一个洗衣工在负责这10台洗衣机。那么洗衣房就相当于1个进程,洗衣工就相当1个线程。如果有10个洗衣工,就相当于1......
  • Python周总结——面向对象
    Python周总结——面向对象编程思想'''面对过程编程: 过程即流程,面向过程就是按照固定的流程解决问题 需要列举出每一步的流程,并且随着步骤的深入,问题的解决也越来越简......
  • 学习python第七天
    importdatetimex=datetime.datetime.now()print(x)Python中的日期不是其自身的数据类型,但是我们可以导入名为 datetime 的模块,把日期视作日期对象进行处理。日期......
  • Python主要的应用领域有哪些?
    作为一个实用主义的学习者,最关心的问题一定是“我为什么要选择学Python,学会之后我可以用来做什么?”。在上篇《为什么选择Python入门》文章中,我们已经明白了为什么选择学......
  • python的函数进阶
    匿名函数基本语法lambda:定义匿名函数(没有函数名的函数)lambda参数1,参数2,参数n:返回值应用场景1、用于定义一些函数结构体非常简单、而且使用次数较少的函数2、作为......