使用rapidsai/cuml中的ARIMA进行时间序列分析与预测

使用rapidsai/cuml中的ARIMA进行时间序列分析与预测

cuml cuML - RAPIDS Machine Learning Library cuml 项目地址: https://gitcode.com/gh_mirrors/cu/cuml

引言

时间序列分析是数据科学中的重要领域,广泛应用于金融、经济、气象、工业等多个行业。ARIMA(自回归积分滑动平均)模型是时间序列预测中最经典且广泛使用的模型之一。本文将介绍如何使用rapidsai/cuml库中的ARIMA实现进行高效的时间序列建模与预测。

ARIMA模型基础

ARIMA模型由三个主要部分组成:

  1. 自回归(AR)部分:使用观测值与滞后观测值之间的依赖关系
  2. 积分(I)部分:通过差分使时间序列平稳化
  3. 移动平均(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 cuml 项目地址: https://gitcode.com/gh_mirrors/cu/cuml

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牧唯盼Douglas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值