时间序列预测-ARMA实战

ARMA中文全称为自回归移动平均模型,广泛用于时间时间序列分析中。本文以statsmodels 模块中自带数据集co2为例,实战研究ARMA模型。
一、探索性数据分析。
首先导入必要的package与数据集

from statsmodels.datasets import co2
data=co2.load(as_pandas=True).data
print(data)

得到的data为DataFrame 格式的格式,数据结构为2284行,1列。
在这里插入图片描述
对数据进行可视化,这里用pandas 的画图方法,能较好地显示横坐标,个人感觉比plt.plot()好用。

data.plot()
plt.show()

在这里插入图片描述
这里看到两个信息:1、数据并不是以天为单位,所以画出的图中存在间断点,2、数据本身存在周期与趋势。
解决办法是先做一个数据上采样,将数据转变为月度平均,然后做一个12阶滞后的差分,消除趋势与周期

data=data.resample('M').mean().ffill()#均值上采样,用前项填充法填充缺失值
data_diff=data.diff(12).dropna()#12阶差分,删掉缺失值
print(data_diff.head(10))

输出前10 条数据,1958年3月份-1959年2月份的12条数据由于缺失被删除了,所以差分后的数据从1959年3月份开始。
在这里插入图片描述
画图检验12阶差分后数据的平稳性,平不平稳不敢说,至少比原始数据要好。

data_diff.plot()
plt.show()

在插入图片描述
所以我们用更为严格的方法来说明问题,这里用单位根检验(ADF)把原始数据和差分后数据均检验了一遍。原始数据P值为0.99,大于0.05,拒绝数据平稳的假设;差分后数据通过平稳性检验。

from statsmodels.tsa.stattools import adfuller#导入tsa.stattools中的ADF
print("12阶差分数据单位根检验的P值",adfuller(data_diff)[1])
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值