使用rapidsai/cuml中的ARIMA进行时间序列分析与预测
cuml cuML - RAPIDS Machine Learning Library 项目地址: https://gitcode.com/gh_mirrors/cu/cuml
引言
时间序列分析是数据科学中的重要领域,广泛应用于金融、经济、气象、工业等多个行业。ARIMA(自回归积分滑动平均)模型是时间序列预测中最经典且广泛使用的模型之一。本文将介绍如何使用rapidsai/cuml库中的ARIMA实现进行高效的时间序列建模与预测。
ARIMA模型基础
ARIMA模型由三个主要部分组成:
- 自回归(AR)部分:使用观测值与滞后观测值之间的依赖关系
- 积分(I)部分:通过差分使时间序列平稳化
- 移动平均(MA)部分:使用观测值与滞后残差之间的依赖关系
完整的ARIMA模型通常表示为ARIMA(p,d,q),其中:
- p:自回归项的阶数
- d:差分次数
- q:移动平均项的阶数
环境准备
首先需要导入必要的库:
import cudf
from cuml.tsa.arima import ARIMA
import cupy as cp
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
数据加载与可视化
我们定义了一个辅助函数来加载数据集,并转换为GPU数据帧:
def load_dataset(name, max_batch=4):
pdf = pd.read_csv(f"data/time_series/{name}.csv")
return cudf.from_pandas(pdf[pdf.columns[1:max_batch+1]].astype(np.float64))
可视化函数可以帮助我们直观地理解数据和预测结果:
def visualize(y, pred=None, pred_start=None, lower=None, upper=None):
# 实现细节略...
非季节性ARIMA模型应用
简单MA(2)模型示例
我们首先使用"奥克兰按年龄划分的净迁移"数据集:
df_mig = load_dataset("net_migrations_auckland_by_age", 4)
visualize(df_mig)
创建并拟合MA(2)模型:
model_mig = ARIMA(df_mig, order=(0,0,2), fit_intercept=True)
model_mig.fit()
进行预测并可视化:
fc_mig = model_mig.forecast(10)
visualize(df_mig, fc_mig)
ARIMA(1,2,1)模型示例
使用"人口估计"数据集:
df_pop = load_dataset("population_estimate")
model_pop = ARIMA(df_pop, order=(1,2,1), fit_intercept=True)
model_pop.fit()
进行样本内预测和样本外预测:
pred_pop = model_pop.predict(80, 160)
visualize(df_pop, pred_pop, 80)
置信区间
获取预测的置信区间:
fc_pop, lower_pop, upper_pop = model_pop.forecast(23, level=0.95)
visualize(df_pop, fc_pop, lower=lower_pop, upper=upper_pop)
季节性ARIMA模型
季节性ARIMA模型表示为ARIMA(p,d,q)(P,D,Q)s,其中:
- P:季节性自回归阶数
- D:季节性差分次数
- Q:季节性移动平均阶数
- s:季节性周期长度
ARIMA(1,1,1)(1,1,1)12示例
使用"按地区划分的客人夜数"数据集:
df_guests = load_dataset("guest_nights_by_region", 4)
model_guests = ARIMA(df_guests, order=(1,1,1),
seasonal_order=(1,1,1,12), fit_intercept=False)
model_guests.fit()
进行预测:
fc_guests = model_guests.forecast(40)
visualize(df_guests[200:], fc_guests)
处理缺失值
ARIMA模型支持数据中的缺失值。我们可以创建包含缺失值的数据集:
df_guests_missing = df_guests[:100].copy()
# 添加缺失值...
填充缺失值并拟合模型:
df_guests_missing = df_guests_missing.fillna(np.nan)
model_guests_missing = ARIMA(df_guests_missing, order=(1,1,1),
seasonal_order=(1,1,1,12), fit_intercept=False)
model_guests_missing.fit()
进行预测:
fc_guests_missing = model_guests_missing.predict(0, 120)
visualize(df_guests_missing, fc_guests_missing, 0)
外生变量
ARIMA模型支持外生变量的引入。创建包含外生变量的数据集:
# 生成外生变量和系数...
df_exog = cudf.DataFrame(np_exog[:279])
df_exog_fut = cudf.DataFrame(np_exog[279:])
创建并拟合包含外生变量的模型:
model_guests_exog = ARIMA(endog=df_guests_exog, exog=df_exog,
order=(1,0,1), seasonal_order=(1,1,1,12),
fit_intercept=True)
model_guests_exog.fit()
进行预测:
fc_guests_exog = model_guests_exog.forecast(40, exog=df_exog_fut)
visualize(df_guests_exog[100:], fc_guests_exog)
总结
本文详细介绍了如何使用rapidsai/cuml中的ARIMA实现进行时间序列分析和预测。我们涵盖了从基础ARIMA模型到季节性ARIMA模型的应用,以及如何处理缺失值和外生变量。这些技术可以广泛应用于各种时间序列预测场景,特别是在需要处理大规模时间序列数据时,rapidsai/cuml的GPU加速实现能显著提高计算效率。
对于想要深入时间序列分析的数据科学家和工程师,掌握这些技术将大大提升分析能力和工作效率。
cuml cuML - RAPIDS Machine Learning Library 项目地址: https://gitcode.com/gh_mirrors/cu/cuml
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考