一、ARIMA模型概述
ARMA模型就是AR和MA的简单结合,同时包含了历史数值项和错误项。由于AR和MA模型都对时间序列有平稳性要求,ARMA模型也存在这个限制,因此我们将其拓展到ARIMA模型,其可以解决非平稳性问题。引入的差分概念是一种获得时间序列的方法。最常使用的一种差分方法是计算当前项和前项的差值,获得一组新的时间序列。
对于时间序列问题,一般可以直接考虑使用ARIMA(p,d,q)模型,p代表自回归阶数;d代表差分次数;q代表移动平均阶数。确保这三个参数尽可能的小以避免过拟合,一个可供参数的准则是:不d<=2,p和q<=5,并且p和q尽量保证一个是模型主导项,另一个相对较小。
二、确定ARMA模型参数
ARIMA参数确定方法主要有两种:手动拟合法和自动拟合法
自动拟合ARIMA模型的一般步骤:
1、观察时间序列数据
首先需要可视化观察时间序列数据,了解数据的趋势、季节性和周期性等特征,以确定是否需要进行平稳化或差分操作。
# 导入销售数据,绘制原始图像
sales_data = pd.read_csv('data/retail_sales.csv')
sales_data['date']=pd.to_datetime(sales_data['date'])
sales_data.set_index('date', inplace=True) # 将date列作为df对象的行索引,这样在之后绘图时行列索引直接就作为折线图的行标签和图例了
sales_data.plot()
# plt.plot(sales_data['date'],sales_data['sales']) # 这样的话就不会生成图例和行索引
2、相关性检验 / 确定模型的阶数
使用自相关性函数(ACF)和偏自相关性函数(PACF)分析差分后的平稳时间序列数据,确定AR和MA项的阶数。
整体相关性检验:整体性检验通常用于检验时间序列数据的整体相关性结构,以确定时间序列的总体相关性和波动。
单个时间间隔相关性:单个时间间隔相关性通常用于分析时间序列数据中的季节性变化、日内变化和周期性变化等。在股票交易领域,我们可能会分析某支股票在不同时间间隔上的表现,例如日内交易、周内交易和月度交易等。单个时间间隔相关性分析可以帮助我们确定该资产的季节性、周期性和日内波动性等特征
3、平稳性检验
如果时间序列数据存在趋势或季节性等非平稳特征,需要进行平稳化或差分操作,以得到平稳的时间序列数据。
常用的方法有:
1、使用statsmodels中的seasonal_decompose方法进行趋势项和季节项的分解,并绘制分解后的时序图像,分别显示趋势、季节性、残差和原始图像的变化)
2、使用ADFTest检查平稳性
adf_test = ADFTest()
adf_test.should_diff(sales_data)
4、拟合模型
根据确定的模型阶数,拟合ARIMA模型,并检查模型的拟合效果。
具体步骤:
首先划分训练集和测试集,然后进行模型的拟合
train = sales_data[:60]
test = sales_data[60:]
predictions = model_fitted.predict(
start=len(train_data),
end=len(train_data) + len(test_data)-1,
dynamic=False) # dynamic参数表示是否用预测值动态预测下一个时刻的值
输出结果:
5、模型诊断
检查模型的残差序列是否为白噪声序列,如果不是,则需要重新调整模型参数
5、模型预测
pred = pd.DataFrame(arima_model.predict(n_periods=12),columns=['predicted'],index=test.index)
plt.plot(train)
plt.plot(test,label='true')
plt.plot(pred,label='predict')
plt.legend(); # 添加图例
文章来源:https://www.toymoban.com/news/detail-707339.html
6、模型评估
文章来源地址https://www.toymoban.com/news/detail-707339.html
到了这里,关于时间序列预测的一般步骤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!