statsmodels.tsa.forecasting.stl.STLForecast

class statsmodels.tsa.forecasting.stl.STLForecast(endog, model, *, model_kwargs=None, period=None, seasonal=7, trend=None, low_pass=None, seasonal_deg=1, trend_deg=1, low_pass_deg=1, robust=False, seasonal_jump=1, trend_jump=1, low_pass_jump=1)[source]

基于模型的预测使用STL去除季节性

预测是通过首先减去使用STL估计的季节性,然后使用时间序列模型(例如ARIMA)对去季节化的数据进行预测来生成的。

Parameters:
endogarray_like

要分解的数据。必须可以压缩到1维。

modelModel

用于在去除季节性后预测内生变量的模型

model_kwargsdict[str, Any]

使用通过减去季节性产生的残差来初始化模型所需的任何额外参数。

period{int, None}, optional

序列的周期性。如果为None且endog是pandas Series或DataFrame,尝试从endog中确定。如果endog是ndarray,则必须提供period。

seasonalint, optional

季节性平滑器的长度。必须是奇数整数,通常应大于等于7(默认)。

trend{int, None}, optional

趋势平滑器的长度。必须是奇数整数。如果未提供,则使用大于 1.5 * 周期 / (1 - 1.5 / 季节性) 的最小奇数整数,遵循原始实现中的建议。

low_pass{int, None}, optional

低通滤波器的长度。必须是大于等于3的奇数整数。如果未提供,则使用大于周期的最小奇数整数。

seasonal_degint, optional

季节性LOESS的程度。0(常数)或1(常数和趋势)。

trend_degint, optional

趋势LOESS的程度。0(常数)或1(常数和趋势)。

low_pass_degint, optional

低通LOESS的阶数。0(常数)或1(常数和趋势)。

robustbool, optional

指示是否使用对某些类型的异常值具有鲁棒性的加权版本的标志。

seasonal_jumpint, optional

正整数,确定线性插值步长。如果大于1,则每隔seasonal_jump个点使用LOESS,并在拟合点之间进行线性插值。较高的值可以减少估计时间。

trend_jumpint, optional

正整数,确定线性插值步长。如果大于1,则每隔trend_jump个点使用LOESS,并且两点之间的值通过线性插值获得。较高的值可以减少估计时间。

low_pass_jumpint, optional

确定线性插值步长的正整数。如果大于1,则每隔low_pass_jump点使用LOESS,并且两点之间的值通过线性插值计算。较高的值可以减少估计时间。

另请参阅

statsmodels.tsa.arima.model.ARIMA

ARIMA 建模。

statsmodels.tsa.ar_model.AutoReg

支持复杂确定性的自回归建模。

statsmodels.tsa.exponential_smoothing.ets.ETSModel

具有趋势的加法和乘法指数平滑。

statsmodels.tsa.statespace.exponential_smoothing.ExponentialSmoothing

带有趋势的加性指数平滑。

注释

如果 \(\hat{S}_t\) 是季节性成分,那么去季节化序列的构建方式为

\[Y_t - \hat{S}_t\]

趋势成分未被移除,因此时间序列模型应能够充分拟合和预测趋势(如果存在)。季节成分的样本外预测生成如下

\[\hat{S}_{T + h} = \hat{S}_{T - k}\]

其中 \(k = m - h + m \lfloor (h-1)/m \rfloor\) 跟踪了周期长度为 m 的完整周期 1, 2, …, m 中的周期偏移量。

这个类主要是围绕 STL 和一个用户指定的模型的一个便捷封装。假设模型遵循标准的 statsmodels 模式:

  • fit 用于估计参数并返回一个结果实例,results

  • results 必须暴露一个方法 forecast(steps, **kwargs) 用于生成样本外预测。

  • results 也可能暴露一个方法 get_prediction,该方法生成样本内和样本外的预测。

请参阅季节性分解笔记本以获取概述。

示例

>>> import numpy as np
>>> import pandas as pd
>>> from statsmodels.tsa.api import STLForecast
>>> from statsmodels.tsa.arima.model import ARIMA
>>> from statsmodels.datasets import macrodata
>>> ds = macrodata.load_pandas()
>>> data = np.log(ds.data.m1)
>>> base_date = f"{int(ds.data.year[0])}-{3*int(ds.data.quarter[0])+1}-1"
>>> data.index = pd.date_range(base_date, periods=data.shape[0], freq="QS")

从ARIMA生成预测

>>> stlf = STLForecast(data, ARIMA, model_kwargs={"order": (2, 1, 0)})
>>> res = stlf.fit()
>>> forecasts = res.forecast(12)

生成带有趋势的指数平滑模型的预测

>>> from statsmodels.tsa.statespace import exponential_smoothing
>>> ES = exponential_smoothing.ExponentialSmoothing
>>> config = {"trend": True}
>>> stlf = STLForecast(data, ES, model_kwargs=config)
>>> res = stlf.fit()
>>> forecasts = res.forecast(12)

方法

fit(*[, inner_iter, outer_iter, fit_kwargs])

估计STL和预测模型参数。


Last update: Oct 16, 2024