首页
/ Nixtla/statsforecast 时间序列预测模型详解

Nixtla/statsforecast 时间序列预测模型详解

2025-07-08 07:33:58作者:郜逊炳

本文将对 Nixtla/statsforecast 项目中的核心时间序列预测模型进行技术解析,帮助读者理解这些模型的原理、特点和使用方法。

项目概述

statsforecast 是一个专注于统计时间序列预测的 Python 库,提供了多种经典和现代的统计预测方法。该项目特别强调预测的准确性和计算效率,适合处理大规模时间序列数据。

核心模型分类

statsforecast 中的模型可以分为以下几大类:

1. 自动模型选择类

AutoARIMA

  • 原理:自动选择最优 ARIMA 模型参数
  • 特点
    • 基于信息准则(默认 AICc)自动选择 p,d,q,P,D,Q 参数
    • 支持季节性 ARIMA
    • 提供逐步选择和全局搜索两种策略
  • 参数说明
    • max_p, max_q:控制自回归和移动平均项的最大阶数
    • seasonal:是否考虑季节性成分
    • stepwise:是否使用逐步选择(更快但可能不是全局最优)

AutoETS

  • 原理:自动选择最优指数平滑模型
  • 特点
    • 自动识别趋势和季节性模式
    • 支持多种误差、趋势和季节性组合

AutoTheta

  • 原理:自动优化的 Theta 方法
  • 特点
    • 结合了简单指数平滑和线性趋势
    • 对具有趋势的时间序列表现良好

2. 经典统计模型

简单预测方法

  • Naive:朴素预测(最后一个观测值为预测值)
  • SeasonalNaive:季节性朴素预测
  • HistoricAverage:历史平均值
  • RandomWalkWithDrift:带漂移的随机游走

指数平滑家族

  • SimpleExponentialSmoothing:简单指数平滑
  • Holt:Holt 线性趋势方法
  • HoltWinters:Holt-Winters 季节性方法

3. 间歇性需求模型

专为间歇性需求时间序列设计的模型:

  • ADIDA:聚合离散间歇性需求方法
  • Croston 系列:经典 Croston 及其变种
  • TSB:Teunter-Syntetos-Babai 方法

4. 高级模型

  • MSTL:多重季节性分解
  • TBATS:复杂季节性模式处理
  • GARCH/ARCH:波动率建模

模型使用范式

所有模型遵循统一的 API 设计:

# 初始化模型
model = AutoARIMA(season_length=12)

# 拟合数据
model.fit(y_train, X_train)

# 预测
forecasts = model.predict(h=14, X_future=X_test, level=[80, 95])

# 获取拟合值
fitted_values = model.predict_in_sample()

预测区间计算

statsforecast 提供了灵活的预测区间计算方式:

  1. 原生预测区间:部分模型内置概率预测功能
  2. 保形预测(Conformal Prediction)
    • 基于历史预测误差分布
    • 支持多种计算策略
    • 通过 ConformalIntervals 类配置
from statsforecast.utils import ConformalIntervals

# 配置保形预测
conformal_config = ConformalIntervals(
    h=12, 
    n_windows=10,
    method="conformal_distribution"
)

model = AutoARIMA(
    season_length=12,
    prediction_intervals=conformal_config
)

性能优化特性

  1. Numba 加速:关键计算路径使用 Numba 编译
  2. 避免不必要计算:按需计算预测区间
  3. 内存效率:提供 forecast() 方法避免存储大对象

模型选择建议

  1. 常规时间序列:从 AutoARIMA 或 AutoETS 开始
  2. 高季节性数据:尝试 TBATS 或 MSTL
  3. 间歇性需求:使用 Croston 或 TSB
  4. 需要快速预测:简单模型如 Naive 或 SeasonalNaive

总结

statsforecast 提供了一套全面而高效的统计预测工具,特别适合需要快速、可靠预测的应用场景。其统一的 API 设计和自动模型选择功能大大降低了使用门槛,而保形预测等高级功能则为专业用户提供了更多灵活性。

对于时间序列预测任务,建议从自动模型开始,然后根据具体需求尝试更专业的模型。该库的模块化设计使得模型比较和切换变得非常简单。