时间序列预测模型之一文讲透 ARIMA 模型

图片

ARIMA模型(自回归积分滑动平均模型)是时间序列分析中的一种广泛应用的模型,这个模型在各个领域发挥着巨大的作用,如股票市场的价格预测、经济中GDP增长率预测、供应链中销售量和库存需求预测、气象中气温和降水量的预测等等。为了深入理解ARIMA模型,我们需要先深入理解构成它的三个基本构建模块:

  • AR(自回归)部分:使用时间序列自身的过去值来预测当前值。

  • I(积分)部分:通过对数据进行差分处理,使非平稳时间序列变为平稳序列。

  • MA(移动平均)部分:使用过去的预测误差来修正预测。

前面已经详细介绍 AR 模型和 MA 模型,如果还没阅读过这两篇文章的同学,强烈建议先提前阅读它们,因为那是学好本篇文章的基础。

1、时间序列模型之一文讲透 AR 模型

2、时间序列模型之一文讲透 MA 模型

本文的目标将是进入到时间序列模型系列的终极目标,上手深度学习掌握 ARIMA 模型。本人将从 ARIMA 模型基本概念、差分过程、ARIMA 模型应用 三个章节来详细讲述 ARIMA 模型。希望你通过阅读此文,能够获得对 ARIMA 模型的深入理解,并能够在实际问题中正确使用这些模型。

1、ARIMA 模型基本概念

ARIMA 模型全称为自回归差分移动平均模型(Autoregressive Integrated Moving Average Model),它主要由三部分构成,分别为自回归模型(AR)、差分过程(I)和移动平均模型(MA)。

从前面两篇文章的学习,我们知道 AR 模型和 MA 模型的主要作用为:

AR 模型,即自回归模型,它的基本思想是一个给定时间点的数据值受到其过去的数据值的显著影响,其优势是对于具有较长历史趋势的数据,AR模型可以捕获这些趋势,并据此进行预测。但是AR模型不能很好地处理某些类型的时间序列数据,例如那些有临时、突发的变化或者噪声较大的数据。

MA 模型,即移动平均模型,它的基本思想是大部分时候时间序列应当是相对稳定的,在稳定的基础上,每个时间点上的标签值受过去一段时间内、不可预料的各种偶然事件影响而波动。但是对于具有较长历史趋势的数据,MA模型可能无法像AR模型那样捕捉到这些趋势。

ARIMA 模型综合 AR 模型和 MA 模型,基本思想是:一个时间点上的数据值既受过去一段时间内的数据值影响,也受过去一段时间内的偶然事件的影响,这就是说,ARIMA模型假设:数据值是围绕着时间的大趋势而波动的,其中趋势是受历史标签影响构成的,波动是受一段时间内的偶然事件影响构成的,且大趋势本身不一定是稳定的。这个融合思想也在其名称 ARIMA 中看出来,那名称中(I)又表示什么意思呢?

I 表示差分,用于使非平稳时间序列达到平稳,通过一阶或者二阶等差分处理,消除了时间序列中的趋势和季节性因素,这个我们留着独立的章节来讲解。

图片

另外,这个公式的基础是假设我们正在处理的时间序列是平稳的,这样我们可以直接应用 AR 和 MA 模型。如果时间序列是非平稳的,那么我们就需要考虑 ARIMA 模型中的 I 部分,也就是进行差分处理。

2、差分过程

差分的基本思想是计算时间序列相邻观测值之间的差。通过差分,可以消除时间序列中的趋势和季节性,从而实现平稳化。

2.1、什么是差分

图片

差分的阶数:前面,我们介绍了一阶差分。然而,实际上,差分的阶数可以是任何正整数。差分的阶数就是我们需要进行多少次差分操作才能得到一个平稳序列。具体地说就是:二阶差分就是对一阶差分后的序列再次进行差分,三阶差分就是对二阶差分后的序列再次进行差分。需要注意的是:差分的阶数不会很大,在平时工作中使用 ARIMA 模型时,差分的阶数一般为 0、1、2,几乎不会是更大的了。

2.2、什么是滞后

图片

3、ARIMA 模型应用

在 ARIMA(p, d, q) 模型中存在三个参数 p、d、q ,根据前面我们所介绍的,它们分别具有以下作用:

  • p:表示 AR 自回归模型的阶数,即 AR 自回归模型考虑的过去多久的数据的线性组合;

  • d:表示差分的阶数,即这个数据使用几阶差分进行处理成平稳数据;

  • q:表示 MA 移动平均模型的阶数,即 MA 移动平均模型考虑过去多久的白噪声影响;

值得注意的是,差分滞后设置在社区提供的模型中没有提供参数配置,如果要实现滞后大于1以上的差分处理,需要对数据提前进行手动预处理。

在实际实践中,我们不需要从零开始自己编写 ARIMA 模型,在社区中有很多比较成熟的封装包了,我们可以拿来开箱即用。在 Python 中,我们可以使用 statsmodels 库中的 ARIMA 模型来使用。以下为一个简单的示例,如下所示,每行都有对应的注释说明,再结合上面的基础原理,相信大家一看就懂,所以就不再重复赘述了。

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 示例数据:月度销售数据
data = {
    'Month': ['2020-01', '2020-02', '2020-03', '2020-04', '2020-05', 
              '2020-06', '2020-07', '2020-08', '2020-09', '2020-10', 
              '2020-11', '2020-12'],
    'Sales': [200, 220, 250, 230, 300, 280, 310, 320, 330, 360, 400, 450]
}

# 创建 DataFrame
df = pd.DataFrame(data)
df['Month'] = pd.to_datetime(df['Month'])
df.set_index('Month', inplace=True)


# 构建和拟合 ARIMA 模型 (p=12, d=1, q=12)
model = ARIMA(df['Sales'], order=(12, 1, 12))
model_fit = model.fit()

# 进行预测
forecast = model_fit.forecast(steps=6)  # 预测未来 6 个月
print('Forecasted values:', forecast)

# 绘制预测结果
plt.figure(figsize=(10, 4))
plt.plot(df['Sales'], label='原始销量', marker='o')
plt.plot(pd.date_range(start='2020-12-31', periods=6, freq='M'), forecast, label='预测', color='red', marker='o')
plt.title('ARIMA 预测')
plt.xlabel('月份')
plt.ylabel('销量')
plt.legend()
plt.grid()
plt.show()

图片

4、总结

本文从 ARIMA 模型基本概念、差分过程、ARIMA 模型应用 三个章节来详细讲述 ARIMA 模型,帮助大家从零开始学习掌握 ARIMA 模型。至此,时间序列预测模型的文章(AR、MA、ARIMA)三姊妹篇都已完成输出,希望这系列文章能对你有切实有用的帮助,也不枉费我花了国庆两天时间整理沉淀!


如果你喜欢本文,欢迎点赞,并且关注我们的微信公众号:Python技术极客,我们会持续更新分享 Python 开发编程、数据分析、数据挖掘、AI 人工智能、网络爬虫等技术文章!让大家在Python 技术领域持续精进提升,成为更好的自己!

添加作者微信(coder_0101),拉你进入行业技术交流群,进行技术交流~

在`/etc/cron.d`中创建一个cron job,以便在系统上电后自动执行`/etc/ssss.sh`脚本,你需要按照特定的时间间隔或开机时刻运行这个脚本。这里提供一种基本的设置方法: 首先,你需要确保`/etc/ssss.sh`脚本已经被赋予了适当的执行权限: ```bash sudo chmod +x /etc/ssss.sh ``` 然后,在`/etc/cron.d`目录中新建一个名为`auto_start_sss.sh`的文件,可以使用文本编辑器打开它: ```bash sudo nano /etc/cron.d/auto_start_sss.sh ``` 接着,编写cron job的基本格式,例如,如果你想让它在每次系统启动时立即运行,你可以设置成每分钟执行一次(但这可能会导致频繁运行,如果脚本本身有较长的处理时间)。以下是一个示例: ```bash #!/bin/bash /path/to/command/to/start/on/reboot /etc/ssss.sh ``` 这里 `/path/to/command/to/start/on/reboot` 可能是空的,因为在许多Linux系统中,系统启动后就会自动执行cron tasks。如果你确实需要一个启动脚本来触发cron job,可以替换为像`systemctl start crond`这样的命令。 然而,由于Linux的初始化过程,直接将这个文件设置为开机自动执行可能不太准确。更常见的做法是在系统启动时执行一些特定的脚本来加载cron jobs。在Debian系列的系统中,可以在`/etc/rc.local`或`/etc/init.d/rc.local`中添加启动cron job的命令。但在Red Hat系列(如CentOS/RHEL)的系统上,推荐使用`chkconfig`或`systemd`来管理启动服务。 保存并关闭文件后,记得更新权限: ```bash sudo chmod +x /etc/cron.d/auto_start_sss.sh ``` 最后,你可以通过`systemctl restart rc-local.service`或`chkconfig --add rc.local`(取决于你的系统)来确保`rc.local`的服务会在系统启动时运行,并执行你的cron job。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coder_风逝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值