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是很容易理解的。


相关文章
|
5月前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
2926 1
|
5月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
597 0
|
5月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
5月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
6月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
6月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
6月前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
639 2
|
JSON 数据可视化 数据格式
Python 懂车帝全车系销量排行榜
Python 懂车帝全车系销量排行榜
Python 懂车帝全车系销量排行榜
|
6月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
690 102
|
6月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
407 104

推荐镜像

更多