ARIMA模型

1.模型介绍

ARIMA,差分自回归滑动平均模型,又称求自回归滑动平均模型,是时间序列预测分析方法之一。

ARIMA(p,d,q)中,AR是“自回归”,p为自回归项数;MA是“滑动平均”,q为滑动平均项数;d是使之成为平稳序列所做的差分次数(阶数)。

2.ARIMA模型运用流程

以《应用系统负载分析与磁盘容量预测》为案例:

- (平稳性检验)根据时间序列的散点图自相关系数和偏自相关系数单位根检验(ADF),来判断数据的平稳性;

- (平稳化处理)对非平稳的时间序列数据进行差分处理,得到差分阶数d;

- (白噪声检测)为了验证序列中有用的信息是否已被提取完毕,如果为白噪声序列,说明序列中有用的信息已经被提取完毕,可以采用LB统计量的方法进行白噪声检验;

- (模型识别和定阶)根据所识别出来的特征建立相应的时间序列模型。平稳化处理后,若偏自相关函数是截尾的,而自相关函数是拖尾的,则建立AR模型;若偏自相关函数是拖尾的,而自相关函数是截尾的,则建立MA模型;若偏自相关函数和自相关函数均是拖尾的,则序列适合ARIMA模型。可以采用BIC准则对模型进行定阶,确定p,q参数,从而选择最优模型;

- (模型检验)检验已确定的模型其残差序列是否为白噪声,如果不是白噪声,说明残差中还存在有用的信息,需要修改模型或者进一步提取;

-(模型预测)应用已通过检验的模型进行预测;

3.平稳性检验

(1)看图法

### ARIMA模型的使用与实现 ARIMA(Auto-Regressive Integrated Moving Average)是一种广泛应用于时间序列分析中的统计模型,特别适合处理具有趋势性和季节性的非平稳时间序列数据。以下是关于ARIMA模型的具体使用方法和实现方式。 #### 1. 数据预处理 在应用ARIMA模型之前,通常需要对原始数据进行必要的预处理操作。这一步骤的主要目的是使时间序列满足模型的前提条件——平稳性。如果输入的时间序列为非平稳,则需对其进行差分变换以达到平稳状态[^2]。 ```python import pandas as pd from statsmodels.tsa.stattools import adfuller def check_stationarity(data): """ADF检验""" result = adfuller(data) p_value = result[1] return p_value < 0.05 # 如果p-value小于显著水平(如0.05),则认为该序列是平稳的 # 对原序列做一阶或多阶差分直到其变为平稳为止 diff_order = 0 while not check_stationarity(series): series_diff = series.diff().dropna() diff_order += 1 ``` #### 2. 参数估计 (p,d,q) ARIMA模型由三个核心参数组成:`p`, `d`, 和 `q`。其中, - **p**: 自回归项数; - **d**: 差分次数(即单整阶数),用来将非平稳序列转换成平稳序列; - **q**: 移动平均项数。 可以通过观察自相关函数图(AutoCorrelation Function, ACF)以及偏自相关函数图(Partial AutoCorrelation Function, PACF)来初步判断合适的(p,q)值[^3]。 另外,在实际工作中也可以借助自动化工具包比如`pmdarima.auto_arima()`来自动生成最佳参数组合: ```python from pmdarima.arima import auto_arima model_auto = auto_arima(train_data, seasonal=False, trace=True, error_action='ignore', suppress_warnings=True) print(model_auto.summary()) ``` #### 3. 模型拟合与验证 选定好参数之后就可以构建并训练我们的ARIMA模型了。接着利用测试集评估模型性能指标如均方误差(MSE), 平均绝对百分比误差(MAPE)等。 ```python from sklearn.metrics import mean_squared_error import numpy as np # 构造ARIMA模型实例 model = sm.tsa.ARIMA(endog=series_diff, order=(p, d, q)) results = model.fit() forecast_values = results.forecast(steps=len(test_set))[0] mape = np.mean(np.abs((test_set.values - forecast_values)/test_set.values))*100 mse = mean_squared_error(test_set, forecast_values) print(f'MAPE: {mape:.2f}%') print(f'MSE: {mse}') ``` #### 4. 结果解释与可视化展示 最后可以绘制预测曲线同真实值对比图表以便直观理解模型效果如何。 ```python plt.figure(figsize=(10,6)) plt.plot(test_index, test_set, label="Observed", color="blue") plt.plot(test_index, forecast_values, label="Forecasted", color="red") plt.legend(loc='upper left') plt.title('Actual vs Predicted Values') plt.show() ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值