介绍
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)
# 对于非季节性数据
#p=1, d=1, q=0 or 1
model=ARIMA(df['销量'],order=(1,1,1))
predict(start=90,end=103,dynamic=True)
plot(figsize=(12,8))
future_df['预测'] = results.predict(start = 104, end = 120, dynamic= True)
future_df.plot(figsize=(12, 8))
–
论断
工夫序列预测是十分有用的,有很多其余模型能够做工夫序列预测,但 ARIMA 是很容易了解的。