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

简介: Python用ARIMA和SARIMA模型预测销量时间序列数据

介绍

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

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

平稳性

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

ARIMA是自回归综合移动平均线的缩写。它是一类在时间序列数据中捕获一组不同标准时间结构的模型。

在本教程中,我们将讨论如何用Python开发时间序列预测的ARIMA模型。

ARIMA模型是一类用于分析和预测时间序列数据的统计模型。它在使用上确实简化了,但是这个模型确实很强大。

ARIMA代表自回归综合移动平均。

ARIMA模型的参数定义如下:

p:模型中包含的滞后观测数,也称为滞后阶数。

d:原始观测值的差异次数,也称为差分阶数。

q:移动平均线窗口的大小,也叫移动平均阶数。

建立一个包含指定数量和类型的项的线性回归模型,并通过差分程度来准备数据,使其平稳,即去除对回归模型产生负面影响的趋势和季节结构。

步骤

1可视化时间序列数据

2确定时间序列是否平稳

3绘制相关图和自相关图

4根据数据建立ARIMA模型或季节ARIMA模型

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

df.head()
#更新表头
df.columns=["月份","销量"]
df.head()
df.plot()

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

让我们检查给定的数据集是否是平稳的,为此我们使用adfuller检验 。

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

为了确定数据的性质,我们将使用零假设。

H0:零假设:这是一个关于总体的陈述,要么被认为是正确的,要么被用来提出一个论点。

H1:备选假设:与H0相矛盾,当我们拒绝H0时,我们得出的结论。

Ho:它是非平稳的

H1:它是平稳的

我们将考虑数据不平稳的零假设和数据平稳的备择假设。

adfuller_test(df['销量'])


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

ADF Test Statistic : -1.833
p-value : 0.363915
#Lags Used : 11
Number of Observations : 93


这里P值是0.36,大于0.05,这意味着数据接受了零假设,这意味着数据是非平稳的。

我们来看看一阶差分和季节性差分:

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


# 再次测试数据是否平稳
adfuller_test(df['Seasonal First Difference'].dropna())


ADF Test Statistic : -7.626619157213163
p-value : 2.060579696813685e-11
#Lags Used : 0
Number of Observations : 92


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

自相关系数:

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


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


建立ARIMA模型

#对于非季节性数据
#p=1, d=1, q=0 or 1
model=ARIMA(df['销量'],order=(1,1,1))


predict(start=90,end=103,dynamic=True)


=

SARIMA模型

然后建立SARIMA模型

plot(figsize=(12,8))



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

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

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



结论

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


相关文章
|
1月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
136 10
|
1天前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
52 37
Python时间序列分析工具Aeon使用指南
|
18天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
1月前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
102 5
|
1月前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
2月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
71 3
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
26天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
107 80