1:ARIMA模型的理解
自回归积分滑动平均模型(ARIMA,Autoregressive Integrated Moving Average Model)是一种预测时间序列数据的常用统计模型。ARIMA模型结合了自回归模型(AR)、差分(I)和移动平均模型(MA)的特点,以捕捉时间序列数据的各种特征。
以下是ARIMA模型的三个主要组成部分的介绍:
ARIMA模型
将上述三个部分结合起来,我们得到ARIMA模型,通常表示为ARIMA(p, d, q),其中:
- p是自回归项的阶数;
- d是差分次数;
- q是移动平均项的阶数。
ARIMA模型可以用于预测未来的时间序列值,也可以用于时间序列数据的分析。在应用ARIMA模型之前,通常需要对数据进行以下步骤:
- 确定数据是否为平稳时间序列,如果不是,需要进行差分;
- 使用ACF(自相关函数)和PACF(偏自相关函数)来确定ARIMA模型的p和q参数;
- 使用模型拟合和评估方法(如AIC、BIC)来选择最佳的模型参数;
- 使用模型进行预测。
ARIMA模型在时间序列分析中非常流行,因为它能够处理多种不同类型的时间序列数据,并且相对容易理解和实现。然而,它也有局限性,比如它假设时间序列数据是线性的,并且没有考虑到季节性因素。对于包含季节性因素的时间序列数据,可以使用SARIMA(季节性ARIMA)模型来进行分析和预测。
2:用Python通过构建ARIMA模型实现大数据预测的示例模板
导入所需的库:pandas
用于数据处理,numpy
用于数值计算,adfuller
和ARIMA
来自statsmodels
库用于时间序列分析,matplotlib.pyplot
用于绘图。
import pandas as pd
import numpy as np
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt
创建一个从2023年1月1日到2024年1月1日的月度时间序列数据集。生成随机的销售数据作为时间序列值。将日期列设置为DataFrame的索引,并将销售数据存储在变量ts
中。
# 创建一个简单的时间序列数据集
date_rng = pd.date_range(start='1/1/2023', end='1/1/2024')
data = pd.DataFrame(date_rng, columns=['date'])
data['sales'] = np.random.randint(100, 1000, size=(len(date_rng)))
# 将日期列设置为索引
data.set_index('date', inplace=True)
ts = data['sales'] # 假设时间序列数据在列'sales'中
构建数据如下:
Step1:检查数据是否平稳
再定义一个函数check_stationarity
来执行单位根测试(ADF测试),以检查时间序列是否平稳。打印测试统计量和p值,并根据p值判断序列是否平稳。
# 步骤1: 检查数据是否平稳
def check_stationarity(timeseries):
result = adfuller(timeseries, autolag='AIC')
print('ADF 统计量: %f' % result[0])
print('p值: %f' % result[1])
print('不同置信水平下的临界值:')
for key, value in result[4].items():
print('\t%s: %.3f' % (key, value))
if result[1] <= 0.05:
print("时间序列是平稳的")
else:
print("时间序列是非平稳的")
check_stationarity(ts)
结果如下:
以下是对这段代码的详细解释:
def check_stationarity(timeseries):
定义一个函数 check_stationarity
,它接受一个参数 timeseries
,这是一个 pandas Series 对象,代表时间序列数据。
result = adfuller(timeseries, autolag='AIC')
调用 adfuller
函数,它是来自 statsmodels
库的一个函数,用于执行 Augmented Dickey-Fuller (ADF) 测试。ADF 测试是一种单位根测试,用于检测时间序列是否具有单位根,从而判断时间序列是否平稳。
timeseries
是要测试的时间序列数据。
autolag='AIC'
表示自动选择滞后长度,基于赤池信息量准则(Akaike Information Criterion,AIC)。
print('ADF 统计量: %f' % result[0])
打印 ADF 统计量,它是 ADF 测试的主要结果之一,用于判断时间序列的平稳性。
print('p值: %f' % result[1])
打印 p 值,这是 ADF 测试的另一个关键结果。p 值用于确定 ADF 统计量的显著性。如果 p 值小于或等于 0.05,通常认为时间序列是平稳的。
print('不同置信水平下的临界值:')
for key, value in result[4].items():
print('\t%s: %.3f' % (key, value))
打印临界值,这些值与不同的显著性水平相对应(例如 1%,5%,10%)。这些临界值用于与 ADF 统计量比较,以判断时间序列是否平稳。循环遍历 result[4]
,它是一个字典,包含了不同置信水平下的临界值。
if result[1] <= 0.05:
print("时间序列是平稳的")
else:
print("时间序列是非平稳的")
根据计算出的 p 值,判断时间序列是否平稳。如果 p 值小于或等于 0.05,则打印 “时间序列是平稳的”,表示时间序列是平稳的;否则,打印 “时间序列是非平稳的”,表示时间序列是非平稳的。
以上就是检验平稳性的详细代码解释。
然后如果时间序列非平稳,需要进行差分。
# 如果时间序列非平稳,我们需要进行差分
# 这里我们假设差分次数为1
ts_diff = ts.diff().dropna()
# 再次检查差分后的序列是否平稳
check_stationarity(ts_diff)
Step2:使用ACF和PACF来确定ARIMA模型的p和q参数
# 步骤2: 使用ACF和PACF来确定ARIMA模型的p和q参数
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# 绘制ACF和PACF图
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8))
plot_acf(ts_diff, lags=20, ax=ax1)
plot_pacf(ts_diff, lags=20, ax=ax2)
plt.show()
# 根据ACF和PACF图,我们可以尝试不同的p和q值
结果图表如下:
根据ACF和PACF图确定ARIMA模型参数p和q的步骤如下:
确定参数p(自回归项的阶数)
-
绘制ACF图:
- 对原始时间序列进行差分,使其变为平稳序列。
- 绘制差分后的时间序列的ACF图。
-
寻找截断点:
- ACF图在k=0处开始,随着k的增加,自相关系数会逐渐下降。
- 截断点是ACF图第一次从1下降到0的点,或者接近0的点。
- 截断点通常位于k=p处,其中p是自回归项的阶数。
-
估计参数p:
- 如果ACF在k=p处开始下降到0,则可以估计p的值为截断点处的k值。
- 例如,如果ACF在k=4处开始下降到0,则可以估计p=4。
确定参数q(移动平均项的阶数)
-
绘制PACF图:
- 对原始时间序列进行差分,使其变为平稳序列。
- 绘制差分后的时间序列的PACF图。
-
寻找截断点:
- PACF图在k=0处开始,随着k的增加,偏自相关系数会逐渐下降。
- 截断点是PACF图第一次从1下降到0的点,或者接近0的点。
- 截断点通常位于k=q处,其中q是移动平均项的阶数。
-
估计参数q:
- 如果PACF在k=q处开始下降到0,则可以估计q的值为截断点处的k值。
- 例如,如果PACF在k=2处开始下降到0,则可以估计q=2。
通过上述步骤,我们可以根据截断点确定ARIMA模型的参数p和q。需要注意的是,这只是一个大致的指导原则,实际应用中可能需要根据数据的具体情况来调整参数p和q。此外,参数的选择也可能受到其他因素的影响,如数据的季节性或周期性特征。
Step3:构建ARIMA模型
# 假设我们选择了p=2和q=2
# 步骤3: 使用模型拟合和评估方法来选择最佳的模型参数
# 构建ARIMA模型
model = ARIMA(ts, order=(2, 1, 2))
model_fit = model.fit()
# 输出模型摘要信息
print(model_fit.summary())
得到如下的模型摘要信息:
# 构建ARIMA模型
model_fit = model.fit()
# 预测未来10个时间点的值
forecast = model_fit.forecast(steps=10)
forecast
得到如下ARIMA时间序列模型的预测结果:
以上就是通过Python通过构建模拟时间序列数据,再求ARIMA(p, d, q)的三个参数p,d,q的值,接下来检测平稳性求差分阶数d值,再通过绘制ACF和PACF图确认p值和q值,最后建立ARIMA模型预测求解。